mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-15 20:23:53 -07:00
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 1e843b72 #510: Add NamespacedKey#fromString() to fetch from user input a4d18241 #581: Add methods to modify despawn delay for wandering villagers CraftBukkit Changes: 0cd8f19f #802: Add methods to modify despawn delay for wandering villagers d5c5d998 SPIGOT-6362: ConcurrentModificationException: null --> Server Crash 8c7d69fe SPIGOT-5228: Entities that are removed during chunk unloads are not properly removed from the chunk.
33 lines
1.8 KiB
Diff
33 lines
1.8 KiB
Diff
From 0000000000000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 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 implements GeneratorAccessSeed {
|
|
}
|
|
|
|
private void removeEntityFromChunk(Entity entity) {
|
|
- IChunkAccess ichunkaccess = chunkProvider.getChunkUnchecked(entity.chunkX, entity.chunkZ); // CraftBukkit - SPIGOT-5228: getChunkAt won't find the entity's chunk if it has already been unloaded (i.e. if it switched to state INACCESSIBLE).
|
|
+ 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);
|
|
}
|
|
|