From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samsuik Date: Thu, 27 Jun 2024 17:02:32 +0100 Subject: [PATCH] Add maxSearch to getEntities diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java index f3832bf2064117ef2fe804ae3fd679b1f2b0343b..9051dc762e48191fd56d26e0d0499ef12b10a240 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/ChunkEntitySlices.java @@ -336,10 +336,16 @@ public final class ChunkEntitySlices { this.allEntities.getEntities(except, box, into, predicate); } + // Sakura start - add maxSearch to getEntities + public boolean getEntities(final Entity except, final AABB box, final List into, final Predicate predicate, + final int maxCount) { + return this.getEntities(except, box, into, predicate, maxCount, Integer.MAX_VALUE); + } public boolean getEntities(final Entity except, final AABB box, final List into, final Predicate predicate, - final int maxCount) { - return this.allEntities.getEntitiesWithEnderDragonPartsLimited(except, box, into, predicate, maxCount); + final int maxCount, final int maxSearch) { + return this.allEntities.getEntitiesWithEnderDragonPartsLimited(except, box, into, predicate, maxCount, maxSearch); + // Sakura end - add maxSearch to getEntities } public boolean getEntitiesWithoutDragonParts(final Entity except, final AABB box, final List into, final Predicate predicate, @@ -693,8 +699,16 @@ public final class ChunkEntitySlices { } } + // Sakura start - add maxSearch to getEntities public boolean getEntitiesWithEnderDragonPartsLimited(final Entity except, final AABB box, final List into, final Predicate predicate, final int maxCount) { + return this.getEntitiesWithEnderDragonPartsLimited(except, box, into, predicate, maxCount, Integer.MAX_VALUE); + } + + public boolean getEntitiesWithEnderDragonPartsLimited(final Entity except, final AABB box, final List into, + final Predicate predicate, final int maxCount, + final int maxSearch) { + // Sakura end - add maxSearch to getEntities if (this.count == 0) { return false; } @@ -716,8 +730,14 @@ public final class ChunkEntitySlices { final Entity[] storage = list.storage; - for (int i = 0, len = Math.min(storage.length, list.size()); i < len; ++i) { - final Entity entity = storage[i]; + // Sakura start - add maxSearch to getEntities + final int len = Math.min(storage.length, list.size()); + final int offset = this.slices.world.random.nextInt(len); + for (int i = 0; i < len; ++i) { + final int pos = (i + offset) % len; + final Entity entity = storage[pos]; + if (i > maxSearch) break; + // Sakura end - add maxSearch to getEntities if (entity == null || entity == except || !entity.getBoundingBox().intersects(box)) { continue; diff --git a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java index efc0c1acc8239dd7b00211a1d3bfd3fc3b2c810c..0ffbc8b459c3475ff0a9c307cb7bd144045f5f1c 100644 --- a/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java +++ b/src/main/java/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java @@ -801,8 +801,15 @@ public abstract class EntityLookup implements LevelEntityGetter { } } + // Sakura start - add maxSearch to getEntities public void getEntities(final Entity except, final AABB box, final List into, final Predicate predicate, final int maxCount) { + this.getEntities(except, box, into, predicate, maxCount, Integer.MAX_VALUE); + } + + public void getEntities(final Entity except, final AABB box, final List into, final Predicate predicate, + final int maxCount, final int maxSearch) { + // Sakura end - add maxSearch to getEntities final int minChunkX = (Mth.floor(box.minX) - 2) >> 4; final int minChunkZ = (Mth.floor(box.minZ) - 2) >> 4; final int maxChunkX = (Mth.floor(box.maxX) + 2) >> 4; @@ -834,7 +841,7 @@ public abstract class EntityLookup implements LevelEntityGetter { continue; } - if (chunk.getEntities(except, box, into, predicate, maxCount)) { + if (chunk.getEntities(except, box, into, predicate, maxCount, maxSearch)) { // Sakura - add maxSearch to getEntities return; } } @@ -1080,4 +1087,4 @@ public abstract class EntityLookup implements LevelEntityGetter { @Override public void onRemove(final Entity.RemovalReason reason) {} } -} \ No newline at end of file +} diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java index c3260ad0ddb40fbde9c1aaf25c0a2be901357dcc..75d11642b7246bae4073feec09c0cf21c24622ca 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1685,10 +1685,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl this.getEntities(filter, box, predicate, result, Integer.MAX_VALUE); } - // Paper start - rewrite chunk system + // Sakura start - add maxSearch to getEntities public void getEntities(final EntityTypeTest entityTypeTest, final AABB boundingBox, final Predicate predicate, final List into, final int maxCount) { + this.getEntities(entityTypeTest, boundingBox, predicate, into, maxCount, Integer.MAX_VALUE); + } + + // Paper start - rewrite chunk system + public void getEntities(final EntityTypeTest entityTypeTest, + final AABB boundingBox, final Predicate predicate, + final List into, final int maxCount, final int maxSearch) { + // Sakura end - add maxSearch to getEntities this.getProfiler().incrementCounter("getEntities"); if (entityTypeTest instanceof net.minecraft.world.entity.EntityType byType) { @@ -1703,7 +1711,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl if (entityTypeTest == null) { if (maxCount != Integer.MAX_VALUE) { - ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate, maxCount); + ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate, maxCount, maxSearch); // Sakura - add maxSearch to getEntities return; } else { ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities((Entity)null, boundingBox, (List)into, (Predicate)predicate);