From f1b980c22fd29b81ec7ec42bece2fe137ed4e54e Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Wed, 6 May 2020 07:57:18 -0700 Subject: [PATCH] Make loaded entity list logic more consistent (#3301) When adding/removing to a chunk, we need to also look at editing the loaded entity list. Co-authored-by: Spottedleaf --- ...list-iteration-requiring-entities-be.patch | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Spigot-Server-Patches/Optimize-entity-list-iteration-requiring-entities-be.patch b/Spigot-Server-Patches/Optimize-entity-list-iteration-requiring-entities-be.patch index 485571381..22f015454 100644 --- a/Spigot-Server-Patches/Optimize-entity-list-iteration-requiring-entities-be.patch +++ b/Spigot-Server-Patches/Optimize-entity-list-iteration-requiring-entities-be.patch @@ -10,6 +10,30 @@ diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/m index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java +@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { + entity.chunkZ = this.loc.z; + this.entities.add(entity); // Paper - per chunk entity list + this.entitySlices[k].add(entity); if (entity.hardCollides()) this.hardCollidingEntities[k].add(entity); // Paper - optimise hard colliding entities ++ // Paper start - world loaded entity list ++ if (this.loadedTicketLevel) { ++ ((WorldServer)this.world).loadedEntities.add(entity); ++ } else { ++ ((WorldServer)this.world).loadedEntities.remove(entity); ++ } ++ // Paper end - world loaded entity list + // Paper start + if (entity instanceof EntityItem) { + itemCounts[k]++; +@@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { + if (entity.hardCollides()) this.hardCollidingEntities[i].remove(entity); if (!this.entitySlices[i].remove(entity)) { // Paper - optimise hard colliding entities + return; + } ++ // Paper start - world loaded entity list ++ ((WorldServer)this.world).loadedEntities.remove(entity); ++ // Paper end - world loaded entity list + if (entity instanceof EntityItem) { + itemCounts[i]--; + } else if (entity instanceof IInventory) { @@ -0,0 +0,0 @@ public class Chunk implements IChunkAccess { this.setNeighbourLoaded(0, 0, this); this.loadedTicketLevel = true;