mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-11 01:12:47 +01:00
41 lines
2.4 KiB
Diff
41 lines
2.4 KiB
Diff
|
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
|
||
|
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
|
||
|
}
|
||
|
}
|
||
|
}
|