mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-27 04:55:47 +01:00
e4d10a6d67
Upstream has released updates that appears 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: 122289ff Add FaceAttachable interface to handle Grindstone facing in common with Switches a6db750e SPIGOT-5647: ZombieVillager entity should have getVillagerType() CraftBukkit Changes:bbe3d58e
SPIGOT-5650: Lectern.setPage(int) causes a NullPointerException3075579f
Add FaceAttachable interface to handle Grindstone facing in common with Switches95bd4238
SPIGOT-5647: ZombieVillager entity should have getVillagerType()4d975ac3
SPIGOT-5617: setBlockData does not work when NotPlayEvent is called by redstone current
46 lines
2.1 KiB
Diff
46 lines
2.1 KiB
Diff
From 0d5276bef7c6bf3b3cf49c93bea589ca1c54e17e Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Fri, 28 Sep 2018 21:49:53 -0400
|
|
Subject: [PATCH] Fix issues with entity loss due to unloaded chunks
|
|
|
|
Vanilla has risk of losing entities by causing them to be
|
|
removed from all chunks if they try to move into an unloaded chunk.
|
|
|
|
This pretty much means high chance this entity will be lost in this
|
|
scenario.
|
|
|
|
There is another case that adding an entity to the world can fail if
|
|
the chunk isn't loaded.
|
|
|
|
Lots of the server is designed around addEntity never expecting to fail
|
|
for these reasons, nor is it really logical.
|
|
|
|
This change ensures the chunks are always loaded when entities are
|
|
added to the world, or a valid entity moves between chunks.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
|
index 64bd41f1e3..1221c30a99 100644
|
|
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
|
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
|
@@ -707,7 +707,7 @@ public class WorldServer extends World {
|
|
this.getChunkAt(entity.chunkX, entity.chunkZ).a(entity, entity.chunkY);
|
|
}
|
|
|
|
- if (!entity.cc() && !this.isChunkLoaded(i, k)) {
|
|
+ if (!entity.valid && !entity.cc() && !this.isChunkLoaded(i, k)) { // Paper - always load chunks to register valid entities location
|
|
entity.inChunk = false;
|
|
} else {
|
|
this.getChunkAt(i, k).a(entity);
|
|
@@ -1033,7 +1033,7 @@ public class WorldServer extends World {
|
|
return false;
|
|
}
|
|
// CraftBukkit end
|
|
- IChunkAccess ichunkaccess = this.getChunkAt(MathHelper.floor(entity.locX() / 16.0D), MathHelper.floor(entity.locZ() / 16.0D), ChunkStatus.FULL, entity.attachedToPlayer);
|
|
+ IChunkAccess ichunkaccess = this.getChunkAt(MathHelper.floor(entity.locX() / 16.0D), MathHelper.floor(entity.locZ() / 16.0D), ChunkStatus.FULL, true); // Paper - always load chunks for entity adds
|
|
|
|
if (!(ichunkaccess instanceof Chunk)) {
|
|
return false;
|
|
--
|
|
2.25.1
|
|
|