mirror of https://github.com/YatopiaMC/Yatopia.git
63 lines
3.1 KiB
Diff
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
|
|
|