aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0712-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch
blob: 05d5b9189b35269eb7715f69359e5f6acb875195 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 bd401b38239fb7e510f82f458f9336b7da372da0..b5365dce7882c98b5be4f5df877165eee80933dd 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
@@ -279,7 +279,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 - Fix NBT pieces overriding a block entity during worldgen deadlock
                             world.setBlock(blockposition2, Blocks.BARRIER.defaultBlockState(), 20);
                         }
                         // CraftBukkit start
@@ -406,7 +410,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 - Fix NBT pieces overriding a block entity during worldgen deadlock
                             }
                         }
                     }