--- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java @@ -138,7 +_,7 @@ private final AtomicInteger tickingGenerated = new AtomicInteger(); private final String storageName; private final PlayerMap playerMap = new PlayerMap(); - public final Int2ObjectMap entityMap = new Int2ObjectOpenHashMap<>(); + public final Int2ObjectMap entityMap = new me.samsuik.sakura.utils.collections.TrackedEntityChunkMap(); // Sakura - optimised tracked entity map private final Long2ByteMap chunkTypeCache = new Long2ByteOpenHashMap(); private final Long2LongMap nextChunkSaveTime = new Long2LongOpenHashMap(); private final LongSet chunksToEagerlySave = new LongLinkedOpenHashSet(); @@ -1420,7 +_,10 @@ double vec3_dz = player.getZ() - this.entity.getZ(); // Paper end - remove allocation of Vec3D here int playerViewDistance = ChunkMap.this.getPlayerViewDistance(player); - double d = Math.min(this.getEffectiveRange(), playerViewDistance * 16); + // Sakura start - entity tracking range modifier + double visibleRange = this.getEffectiveRange() * player.trackingRangeModifier; + double d = Math.min(visibleRange, playerViewDistance * 16); + // Sakura end - entity tracking range modifier double d1 = vec3_dx * vec3_dx + vec3_dz * vec3_dz; // Paper double d2 = d * d; // Paper start - Configurable entity tracking range by Y