From 9b2ef9a75313e64ffc693405423b5aa3d616ea0d Mon Sep 17 00:00:00 2001 From: Creeam <102713261+HaHaWTH@users.noreply.github.com> Date: Sat, 8 Feb 2025 08:27:02 -0800 Subject: [PATCH] Dont reallocate buckets again (#218) * Don't re-allocate buckets again --- ...t-sort-entities-in-NearestLivingEntitySensor.patch | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/leaf-server/minecraft-patches/features/0089-Smart-sort-entities-in-NearestLivingEntitySensor.patch b/leaf-server/minecraft-patches/features/0089-Smart-sort-entities-in-NearestLivingEntitySensor.patch index 3a84fdd65..657eff5b5 100644 --- a/leaf-server/minecraft-patches/features/0089-Smart-sort-entities-in-NearestLivingEntitySensor.patch +++ b/leaf-server/minecraft-patches/features/0089-Smart-sort-entities-in-NearestLivingEntitySensor.patch @@ -14,7 +14,7 @@ In non-strict testing, this can give ~20-40% improvement (54MSPT -> 44MSPT), under 625 villagers situation. diff --git a/net/minecraft/world/entity/ai/sensing/NearestLivingEntitySensor.java b/net/minecraft/world/entity/ai/sensing/NearestLivingEntitySensor.java -index b0c5e41fefc7c9adf1a61bd5b52861736657d37e..66374b79ade5cd10fa6e1d9187bf6b1112da4827 100644 +index b0c5e41fefc7c9adf1a61bd5b52861736657d37e..7f67848eff9f74881e7a9cd56a2e69ec6fd81e44 100644 --- a/net/minecraft/world/entity/ai/sensing/NearestLivingEntitySensor.java +++ b/net/minecraft/world/entity/ai/sensing/NearestLivingEntitySensor.java @@ -13,6 +13,21 @@ import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities; @@ -39,7 +39,7 @@ index b0c5e41fefc7c9adf1a61bd5b52861736657d37e..66374b79ade5cd10fa6e1d9187bf6b11 @Override protected void doTick(ServerLevel level, T entity) { double attributeValue = entity.getAttributeValue(Attributes.FOLLOW_RANGE); -@@ -20,11 +35,150 @@ public class NearestLivingEntitySensor extends Sensor +@@ -20,11 +35,145 @@ public class NearestLivingEntitySensor extends Sensor List entitiesOfClass = level.getEntitiesOfClass( LivingEntity.class, aabb, matchableEntity -> matchableEntity != entity && matchableEntity.isAlive() ); @@ -139,12 +139,7 @@ index b0c5e41fefc7c9adf1a61bd5b52861736657d37e..66374b79ade5cd10fa6e1d9187bf6b11 + } + double invMaxDist = 1.0 / maxDist; + -+ for (int i = 0; i < NUM_BUCKETS; i++) { -+ buckets[i] = new it.unimi.dsi.fastutil.objects.ObjectArrayList<>(); -+ } -+ -+ for (int idx = 0; idx < arr.length; idx++) { -+ EntityDistance e = arr[idx]; ++ for (EntityDistance e : arr) { + int bucketIndex = (int) (e.distance * invMaxDist * NUM_BUCKETS_MINUS_1); + buckets[bucketIndex].add(e); + }