From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Paul Sauve Date: Fri, 23 Apr 2021 18:12:08 -0500 Subject: [PATCH] Skip creating hashset for entity track range diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index feab0ae1930b5271fe0d06a40c180317dcbc9d1d..1d1721ee1bbf94214a175f42c1a26841b7bc1354 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -316,10 +316,39 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.isLegacyTrackingEntity = isLegacyTrackingEntity; } + // Airplane start - behavior of getAllPassengers + getting bigger range + private org.spigotmc.TrackingRange.TrackingRangeType getBiggestRangeOfPassengers(net.minecraft.server.level.PlayerChunkMap chunkMap, int[] range, Entity entity) { + org.spigotmc.TrackingRange.TrackingRangeType type = null; + + for (int i = 0; i < entity.passengers.size(); i++) { + Entity passenger = entity.passengers.get(i); + org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; + int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal()); + if (passengerRange > range[0]) { + type = passengerType; + range[0] = passengerRange; + } + + org.spigotmc.TrackingRange.TrackingRangeType childType = this.getBiggestRangeOfPassengers(chunkMap, range, passenger); + if (childType != null) { + type = childType; + } + } + + return type; + } + // Airplane end + public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { + // Airplane start - replicate behavior of getAllPassengers to skip creating hashset + /* Collection passengers = this.getAllPassengers(); + */ net.minecraft.server.level.PlayerChunkMap chunkMap = ((WorldServer)this.world).getChunkProvider().playerChunkMap; org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType; + type = this.getBiggestRangeOfPassengers(chunkMap, new int[]{chunkMap.getEntityTrackerRange(type.ordinal())}, this); + if (type == null) type = this.trackingRangeType; + /* int range = chunkMap.getEntityTrackerRange(type.ordinal()); for (Entity passenger : passengers) { @@ -330,8 +359,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne range = passengerRange; } } + */ + // Airplane end - return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); + return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this.chunkX, this.chunkZ)); // Airplane - don't convert doubles to ints here } // Paper end - optimise entity tracking