Yatopia/patches/Airplane/patches/server/0025-Skip-creating-hashset-...

63 lines
3.1 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Paul Sauve <paul@technove.co>
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 5fb3f2968f20e78d76382bec52c9236add4fc060..7ddbc56eb2ea8491cd32987843801e9bee9dbe0b 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -319,10 +319,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<EntityPlayer> getPlayersInTrackRange() {
+ // Airplane start - replicate behavior of getAllPassengers to skip creating hashset
+ /*
Collection<Entity> 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) {
@@ -333,8 +362,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