36 lines
1.5 KiB
Diff
36 lines
1.5 KiB
Diff
|
From efaf7c2426c5bfd1970e5d9a01fb43d96ee1aab2 Mon Sep 17 00:00:00 2001
|
||
|
From: Aikar <aikar@aikar.co>
|
||
|
Date: Tue, 31 Mar 2020 03:01:45 -0400
|
||
|
Subject: [PATCH] Fix unregistering entities from unloading chunks
|
||
|
|
||
|
CraftBukkit caused a regression here by making unloading chunks not
|
||
|
have a ticket added and returning unloaded future.
|
||
|
|
||
|
This caused entities who were killed in same tick their chunk is unloading
|
||
|
to not be able to be removed from the chunk.
|
||
|
|
||
|
This then results in dead entities lingering in the Chunk.
|
||
|
|
||
|
Combine that with a buggy detail of the previous implementation of
|
||
|
the Dupe UUID patch, then this was the likely source of the "Ghost entities"
|
||
|
|
||
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||
|
index 9cb22eef56..f7a9b58db3 100644
|
||
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||
|
@@ -1482,9 +1482,9 @@ public class WorldServer extends World {
|
||
|
}
|
||
|
|
||
|
private void removeEntityFromChunk(Entity entity) {
|
||
|
- IChunkAccess ichunkaccess = this.getChunkAt(entity.chunkX, entity.chunkZ, ChunkStatus.FULL, false);
|
||
|
+ Chunk ichunkaccess = entity.getCurrentChunk(); // Paper - getChunkAt(x,z,full,false) is broken by CraftBukkit as it won't return an unloading chunk. Use our current chunk reference as this points to what chunk they need to be removed from anyways
|
||
|
|
||
|
- if (ichunkaccess instanceof Chunk) {
|
||
|
+ if (ichunkaccess != null) { // Paper
|
||
|
((Chunk) ichunkaccess).b(entity);
|
||
|
}
|
||
|
|
||
|
--
|
||
|
2.25.1
|
||
|
|