2022-04-07 10:42:20 +02: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
|
2023-12-05 18:20:55 +01:00
|
|
|
index 48dcee0757af22dea954681689bb9fd12315bd37..f6002cb6565d5f3f1ed729892ca38c9b5a021387 100644
|
2022-04-07 10:42:20 +02: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
|
2023-09-29 02:28:26 +02:00
|
|
|
@@ -279,7 +279,11 @@ public class StructureTemplate {
|
2022-04-07 10:42:20 +02: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);
|
|
|
|
}
|
2023-09-29 02:28:26 +02:00
|
|
|
// CraftBukkit start
|
|
|
|
@@ -406,7 +410,11 @@ public class StructureTemplate {
|
2022-04-07 10:42:20 +02: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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|