aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch')
-rw-r--r--patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch124
1 files changed, 0 insertions, 124 deletions
diff --git a/patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch b/patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch
deleted file mode 100644
index bc2e7f6645..0000000000
--- a/patches/server/0361-Avoid-hopper-searches-if-there-are-no-items.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: CullanP <[email protected]>
-Date: Thu, 3 Mar 2016 02:13:38 -0600
-Subject: [PATCH] Avoid hopper searches if there are no items
-
-Hoppers searching for items and minecarts is the most expensive part of hopper ticking.
-We keep track of the number of minecarts and items in a chunk.
-If there are no items in the chunk, we skip searching for items.
-If there are no minecarts in the chunk, we skip searching for them.
-
-Usually hoppers aren't near items, so we can skip most item searches.
-And since minecart hoppers are used _very_ rarely near we can avoid alot of searching there.
-
-Combined, this adds up a lot.
-
-diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
-index 7bd8ffb6bfba7f7188532ae3788701c08e1d624a..ef4e48127168acdd614bbdcac97a98da5240928e 100644
---- a/src/main/java/net/minecraft/world/level/Level.java
-+++ b/src/main/java/net/minecraft/world/level/Level.java
-@@ -966,7 +966,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable {
- }
- }
-
-- });
-+ }, predicate == net.minecraft.world.entity.EntitySelector.CONTAINER_ENTITY_SELECTOR); // Paper
- return list;
- }
-
-diff --git a/src/main/java/net/minecraft/world/level/entity/EntitySection.java b/src/main/java/net/minecraft/world/level/entity/EntitySection.java
-index 524f3c42964eb83c9109bcc548a1075f1e295411..e9aee7d11798c3bd990466f101e9e342686de11c 100644
---- a/src/main/java/net/minecraft/world/level/entity/EntitySection.java
-+++ b/src/main/java/net/minecraft/world/level/entity/EntitySection.java
-@@ -13,6 +13,10 @@ public class EntitySection<T extends EntityAccess> {
- private static final Logger LOGGER = LogUtils.getLogger();
- private final ClassInstanceMultiMap<T> storage;
- private Visibility chunkStatus;
-+ // Paper start - track number of items and minecarts
-+ public int itemCount;
-+ public int inventoryEntityCount;
-+ // Paper end
-
- public EntitySection(Class<T> entityClass, Visibility status) {
- this.chunkStatus = status;
-@@ -20,10 +24,24 @@ public class EntitySection<T extends EntityAccess> {
- }
-
- public void add(T entity) {
-+ // Paper start
-+ if (entity instanceof net.minecraft.world.entity.item.ItemEntity) {
-+ this.itemCount++;
-+ } else if (entity instanceof net.minecraft.world.Container) {
-+ this.inventoryEntityCount++;
-+ }
-+ // Paper end
- this.storage.add(entity);
- }
-
- public boolean remove(T entity) {
-+ // Paper start
-+ if (entity instanceof net.minecraft.world.entity.item.ItemEntity) {
-+ this.itemCount--;
-+ } else if (entity instanceof net.minecraft.world.Container) {
-+ this.inventoryEntityCount--;
-+ }
-+ // Paper end
- return this.storage.remove(entity);
- }
-
-diff --git a/src/main/java/net/minecraft/world/level/entity/EntitySectionStorage.java b/src/main/java/net/minecraft/world/level/entity/EntitySectionStorage.java
-index 4c1e7c219e1ca153be4423347bd239ebaec4a31d..f54ca6383298848b2ee7108c41fcea593f924881 100644
---- a/src/main/java/net/minecraft/world/level/entity/EntitySectionStorage.java
-+++ b/src/main/java/net/minecraft/world/level/entity/EntitySectionStorage.java
-@@ -112,13 +112,20 @@ public class EntitySectionStorage<T extends EntityAccess> {
- }
-
- public void getEntities(AABB box, Consumer<T> action) {
-+ // Paper start
-+ this.getEntities(box, action, false);
-+ }
-+ public void getEntities(AABB box, Consumer<T> action, boolean isContainerSearch) {
-+ // Paper end
- this.forEachAccessibleNonEmptySection(box, (section) -> {
-+ if (isContainerSearch && section.inventoryEntityCount <= 0) return; // Paper
- section.getEntities(box, action);
- });
- }
-
- public <U extends T> void getEntities(EntityTypeTest<T, U> filter, AABB box, Consumer<U> action) {
- this.forEachAccessibleNonEmptySection(box, (section) -> {
-+ if (filter.getBaseClass() == net.minecraft.world.entity.item.ItemEntity.class && section.itemCount <= 0) return; // Paper
- section.getEntities(filter, box, action);
- });
- }
-diff --git a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java
-index 9723a0ad61548c8c6c4c5ef20a150d5b17d80afd..da1ad0b2679e392ed81b50c15f012c63cb5c939e 100644
---- a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java
-+++ b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetter.java
-@@ -17,6 +17,7 @@ public interface LevelEntityGetter<T extends EntityAccess> {
- <U extends T> void get(EntityTypeTest<T, U> filter, Consumer<U> action);
-
- void get(AABB box, Consumer<T> action);
-+ void get(AABB box, Consumer<T> action, boolean isContainerSearch); // Paper
-
- <U extends T> void get(EntityTypeTest<T, U> filter, AABB box, Consumer<U> action);
- }
-diff --git a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java
-index d5129c12c79eb6fe6b7e5f8eed4d24226423f5fd..3b13f6ea36a3bfecabe09221eb5c48dddab119db 100644
---- a/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java
-+++ b/src/main/java/net/minecraft/world/level/entity/LevelEntityGetterAdapter.java
-@@ -38,7 +38,13 @@ public class LevelEntityGetterAdapter<T extends EntityAccess> implements LevelEn
-
- @Override
- public void get(AABB box, Consumer<T> action) {
-- this.sectionStorage.getEntities(box, action);
-+ // Paper start
-+ this.get(box, action, false);
-+ }
-+ @Override
-+ public void get(AABB box, Consumer<T> action, boolean isContainerSearch) {
-+ this.sectionStorage.getEntities(box, action, isContainerSearch);
-+ // Paper end
- }
-
- @Override