From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: etil2jz 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 d1bfb95114b733dde9537c4de6bd1bccb696cd18..1d809de3db6c6de64f938f66d81356c5b58967f8 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 @@ -267,7 +267,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); } @@ -382,7 +386,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 } } }