2022-04-07 08:42:20 +00:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: etil2jz <blanchot.arthur@protonmail.ch>
|
|
|
|
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
|
2022-07-27 21:50:05 +00:00
|
|
|
index 4aac9be67a073e60272a68b52c2cda026d4ee28f..30c44b39f9b7a434bb77d6307d2514f2ce9d2857 100644
|
2022-04-07 08:42:20 +00:00
|
|
|
--- 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
|
2022-07-27 21:50:05 +00:00
|
|
|
@@ -266,7 +266,11 @@ public class StructureTemplate {
|
2022-04-07 08:42:20 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
2022-07-27 21:50:05 +00:00
|
|
|
@@ -381,7 +385,11 @@ public class StructureTemplate {
|
2022-04-07 08:42:20 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|