Improve the don't save entities patch per leafs feedback

This commit is contained in:
Aikar
2020-04-12 18:29:52 -04:00
parent bd4c6a566c
commit 73e413e403
10 changed files with 74 additions and 41 deletions

View File

@@ -79,4 +79,45 @@ index 4af5a230b..83bcef7e6 100644
public static ChunkStatus.Type a(@Nullable NBTTagCompound nbttagcompound) {
if (nbttagcompound != null) {
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 6ce7f77a5..1adabb751 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -0,0 +0,0 @@ public class WorldServer extends World {
List[] aentityslice = chunk.getEntitySlices(); // Spigot
int i = aentityslice.length;
+ java.util.List<Entity> toMoveChunks = new java.util.ArrayList<>(); // Paper
for (int j = 0; j < i; ++j) {
List<Entity> entityslice = aentityslice[j]; // Spigot
Iterator iterator = entityslice.iterator();
@@ -0,0 +0,0 @@ public class WorldServer extends World {
throw (IllegalStateException) SystemUtils.c(new IllegalStateException("Removing entity while ticking!"));
}
+ // Paper start - move out entities that shouldn't be in this chunk before it unloads
+ if (!entity.dead && (int) Math.floor(entity.locX()) >> 4 != chunk.getPos().x || (int) Math.floor(entity.locZ()) >> 4 != chunk.getPos().z) {
+ toMoveChunks.add(entity);
+ entity.inChunk = false;
+ entity.entitySlice = null;
+ iterator.remove();
+ continue;
+ }
+ // Paper end
+
this.entitiesById.remove(entity.getId());
this.unregisterEntity(entity);
+
+ if (entity.dead) iterator.remove(); // Paper - don't save dead entities during unload
}
}
}
+ // Paper start - move out entities that shouldn't be in this chunk before it unloads
+ for (Entity entity : toMoveChunks) {
+ this.chunkCheck(entity);
+ }
+ // Paper end
}
--