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 Developers!: You will need to clean up your work/Minecraft/1.13.2 folder for this Also, restore a patch that was dropped in the last upstream Bukkit Changes: 279eeab3 Fix command description not being set 96e2bb18 Remove debug print from SyntheticEventTest CraftBukkit Changes: d3ed1516 Fix dangerously threaded beacons 217a293d Don't relocate joptsimple to allow --help to work. 1be05a21 Prepare for imminent Java 12 release a49270b2 Mappings Update 5259d80c SPIGOT-4669: Fix PlayerTeleportEvent coordinates for relative teleports Spigot Changes: e6eb36f2 Rebuild patches
61 lines
2.5 KiB
Diff
61 lines
2.5 KiB
Diff
From 176a6ae2aff482d22329cb39f9315603915f56ab Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Thu, 26 Jul 2018 00:11:12 -0400
|
|
Subject: [PATCH] Prevent Saving Bad entities to chunks
|
|
|
|
See https://github.com/PaperMC/Paper/issues/1223
|
|
|
|
Minecraft is saving invalid entities to the chunk files.
|
|
|
|
Avoid saving bad data, and also make improvements to handle
|
|
loading these chunks. Any invalid entity will be instant killed,
|
|
so lets avoid adding it to the world...
|
|
|
|
This lets us be safer about the dupe UUID resolver too, as now
|
|
we can ignore instant killed entities and avoid risk of duplicating
|
|
an invalid entity.
|
|
|
|
This should reduce log occurrences of dupe uuid messages.
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
index 2c4a4fc6b..485bce987 100644
|
|
--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
+++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
|
@@ -567,11 +567,22 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
|
|
Iterator iterator;
|
|
|
|
+ java.util.List<Entity> toUpdate = new java.util.ArrayList<>(); // Paper
|
|
for (int j = 0; j < chunk.getEntitySlices().length; ++j) {
|
|
iterator = chunk.getEntitySlices()[j].iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
Entity entity = (Entity) iterator.next();
|
|
+ // Paper start
|
|
+ if ((int)Math.floor(entity.locX) >> 4 != chunk.locX || (int)Math.floor(entity.locZ) >> 4 != chunk.locZ) {
|
|
+ LogManager.getLogger().warn(entity + " is not in this chunk, skipping save. This a bug fix to a vanilla bug. Do not report this to PaperMC please.");
|
|
+ toUpdate.add(entity);
|
|
+ continue;
|
|
+ }
|
|
+ if (entity.dead) {
|
|
+ continue;
|
|
+ }
|
|
+ // Paper end
|
|
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
|
|
|
|
if (entity.d(nbttagcompound1)) {
|
|
@@ -580,6 +591,11 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver {
|
|
}
|
|
}
|
|
}
|
|
+ // Paper start - move entities to the correct chunk
|
|
+ for (Entity entity : toUpdate) {
|
|
+ world.entityJoinedWorld(entity, false);
|
|
+ }
|
|
+ // Paper end
|
|
|
|
nbttagcompound.set("Entities", nbttaglist1);
|
|
NBTTagList nbttaglist2 = new NBTTagList();
|
|
--
|
|
2.21.0
|
|
|