diff options
author | Fabrizio La Rosa <[email protected]> | 2024-09-08 22:12:36 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2024-09-08 22:12:36 +0200 |
commit | 971a7a5511b3c656b96a9be66ec9848915eb6d3d (patch) | |
tree | 14db760bce66a267a4e0bdbb7da01a675c2bf750 /patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch | |
parent | b09eaf2e8d15fea856005f6727638b753850c8d1 (diff) | |
download | Paper-971a7a5511b3c656b96a9be66ec9848915eb6d3d.tar.gz Paper-971a7a5511b3c656b96a9be66ec9848915eb6d3d.zip |
Add Decorated Pot Cracked API (#11365)
Diffstat (limited to 'patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch')
-rw-r--r-- | patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch b/patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch new file mode 100644 index 0000000000..ab4d61b97a --- /dev/null +++ b/patches/server/0887-Do-not-read-tile-entities-in-chunks-that-are-positio.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf <[email protected]> +Date: Sun, 18 Jun 2023 23:04:46 -0700 +Subject: [PATCH] Do not read tile entities in chunks that are positioned + outside of the chunk + +The tile entities are not accessible and so should not be loaded. +This can happen as a result of users moving regionfiles around, +which would cause a crash on Folia but would appear to function +fine on Paper. + +diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +index 5e1a68e3a920aab10a459b9b54f6abd59e7855e0..d42585bccb03f8ee1be5e37cfbe8520af4cc5454 100644 +--- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java ++++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +@@ -303,6 +303,13 @@ public class ChunkSerializer { + for (int k1 = 0; k1 < nbttaglist3.size(); ++k1) { + CompoundTag nbttagcompound4 = nbttaglist3.getCompound(k1); + ++ // Paper start - do not read tile entities positioned outside the chunk ++ BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound4); ++ if ((blockposition.getX() >> 4) != chunkPos.x || (blockposition.getZ() >> 4) != chunkPos.z) { ++ LOGGER.warn("Tile entity serialized in chunk " + chunkPos + " in world '" + world.getWorld().getName() + "' positioned at " + blockposition + " is located outside of the chunk"); ++ continue; ++ } ++ // Paper end - do not read tile entities positioned outside the chunk + ((ChunkAccess) object1).setBlockEntityNbt(nbttagcompound4); + } + +@@ -507,10 +514,19 @@ public class ChunkSerializer { + CompoundTag nbttagcompound1 = nbttaglist1.getCompound(i); + boolean flag = nbttagcompound1.getBoolean("keepPacked"); + ++ // Paper start - do not read tile entities positioned outside the chunk ++ BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound1); // moved up ++ ChunkPos chunkPos = chunk.getPos(); ++ if ((blockposition.getX() >> 4) != chunkPos.x || (blockposition.getZ() >> 4) != chunkPos.z) { ++ LOGGER.warn("Tile entity serialized in chunk " + chunkPos + " in world '" + world.getWorld().getName() + "' positioned at " + blockposition + " is located outside of the chunk"); ++ continue; ++ } ++ // Paper end - do not read tile entities positioned outside the chunk ++ + if (flag) { + chunk.setBlockEntityNbt(nbttagcompound1); + } else { +- BlockPos blockposition = BlockEntity.getPosFromTag(nbttagcompound1); ++ // Paper - do not read tile entities positioned outside the chunk; move up + BlockEntity tileentity = BlockEntity.loadStatic(blockposition, chunk.getBlockState(blockposition), nbttagcompound1, world.registryAccess()); + + if (tileentity != null) { |