diff options
author | Etil <[email protected]> | 2022-04-07 10:42:20 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2022-04-07 10:42:20 +0200 |
commit | 11e0dcdf864efd8516f5146dbf2d5602daff86d8 (patch) | |
tree | 3e2900857b9ae1dc0035b083ca123d7cf78b3a56 | |
parent | 29144573e697aac0235f00e185195166058081d2 (diff) | |
download | Paper-11e0dcdf864efd8516f5146dbf2d5602daff86d8.tar.gz Paper-11e0dcdf864efd8516f5146dbf2d5602daff86d8.zip |
Fix NBT pieces overriding a block entity during worldgen deadlock (#7692)
-rw-r--r-- | patches/server/0891-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/patches/server/0891-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch b/patches/server/0891-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch new file mode 100644 index 0000000000..c76221ca5a --- /dev/null +++ b/patches/server/0891-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: etil2jz <[email protected]> +Date: Sat, 2 Apr 2022 23:29:24 +0200 +Subject: [PATCH] Fix NBT pieces overriding a block entity during worldgen + deadlock + +By checking if the world passed into StructureTemplate's placeInWorld +is not a WorldGenRegion, we can bypass the deadlock entirely. +See https://bugs.mojang.com/browse/MC-246262 + +diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java +index c5827e4d870a0bba483649d54cae23072eab2b18..332d080ad722a0252d2ae8eb83f7697c1323b4ce 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java +@@ -265,7 +265,11 @@ public class StructureTemplate { + + if (definedstructure_blockinfo.nbt != null) { + tileentity = world.getBlockEntity(blockposition2); +- Clearable.tryClear(tileentity); ++ // Paper start - Fix NBT pieces overriding a block entity during worldgen deadlock ++ if (!(world instanceof net.minecraft.world.level.WorldGenLevel)) { ++ Clearable.tryClear(tileentity); ++ } ++ // Paper end + world.setBlock(blockposition2, Blocks.BARRIER.defaultBlockState(), 20); + } + +@@ -380,7 +384,11 @@ public class StructureTemplate { + if (pair1.getSecond() != null) { + tileentity = world.getBlockEntity(blockposition6); + if (tileentity != null) { +- tileentity.setChanged(); ++ // Paper start - Fix NBT pieces overriding a block entity during worldgen deadlock ++ if (!(world instanceof net.minecraft.world.level.WorldGenLevel)) { ++ tileentity.setChanged(); ++ } ++ // Paper end + } + } + } |