mirror of
https://github.com/SparklyPower/SparklyPaper.git
synced 2025-12-19 15:09:27 +00:00
61 lines
3.3 KiB
Diff
61 lines
3.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Paul <paul@technove.co>
|
|
Date: Tue, 29 Jun 2021 02:19:34 -0500
|
|
Subject: [PATCH] Remove streams from getting nearby players
|
|
|
|
This results in a 3% improvement at 20,000 entities, but more
|
|
importantly is the heaviest part of the entity tracker currently.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
index 2453492429a743677db07e31d575c1473fedf4ad..c38b46a57cac6789409509e8b420a8459fddc49d 100644
|
|
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
@@ -355,17 +355,36 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
|
|
this.isLegacyTrackingEntity = isLegacyTrackingEntity;
|
|
}
|
|
|
|
+ private org.spigotmc.TrackingRange.TrackingRangeType getFurthestEntity(Entity entity, net.minecraft.server.level.ChunkMap chunkMap, org.spigotmc.TrackingRange.TrackingRangeType type, int range) {
|
|
+ List<Entity> passengers = entity.getPassengers();
|
|
+ for (int i = 0, size = passengers.size(); i < size; i++) {
|
|
+ Entity passenger = passengers.get(i);
|
|
+ org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType;
|
|
+ int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal());
|
|
+ if (passengerRange > range) {
|
|
+ type = passengerType;
|
|
+ range = passengerRange;
|
|
+ }
|
|
+
|
|
+ type = this.getFurthestEntity(passenger, chunkMap, type, range);
|
|
+ }
|
|
+
|
|
+ return type;
|
|
+ }
|
|
+
|
|
public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet<ServerPlayer> getPlayersInTrackRange() {
|
|
// Tuinity start - determine highest range of passengers
|
|
if (this.passengers.isEmpty()) {
|
|
return ((ServerLevel)this.level).getChunkSource().chunkMap.playerEntityTrackerTrackMaps[this.trackingRangeType.ordinal()]
|
|
.getObjectsInRange(MCUtil.getCoordinateKey(this));
|
|
}
|
|
- Iterable<Entity> passengers = this.getIndirectPassengers();
|
|
+ //Iterable<Entity> passengers = this.getIndirectPassengers(); // Airplane
|
|
net.minecraft.server.level.ChunkMap chunkMap = ((ServerLevel)this.level).getChunkSource().chunkMap;
|
|
org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType;
|
|
int range = chunkMap.getEntityTrackerRange(type.ordinal());
|
|
|
|
+ // Airplane start - use getFurthestEntity to skip getIndirectPassengers
|
|
+ /*
|
|
for (Entity passenger : passengers) {
|
|
org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType;
|
|
int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal());
|
|
@@ -374,6 +393,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n
|
|
range = passengerRange;
|
|
}
|
|
}
|
|
+ */
|
|
+ type = this.getFurthestEntity(this, chunkMap, type, range);
|
|
+ // Airplane end
|
|
|
|
return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this));
|
|
// Tuinity end - determine highest range of passengers
|