mirror of
https://github.com/PaperMC/Paper.git
synced 2024-10-23 17:36:33 +02:00
Only remove worldgen block entity on changed block (#10794)
This commit is contained in:
parent
7ac24a1894
commit
d8d54d9279
1 changed files with 22 additions and 3 deletions
|
@ -5,14 +5,33 @@ Subject: [PATCH] Fix creation of invalid block entity during world generation
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||||
index 5ece375eaf6bcc61864997a389bb5e24625e4505..9c3f8f79c2b3389a118dce9a1558edda52446833 100644
|
index 5ece375eaf6bcc61864997a389bb5e24625e4505..17e3c28f738504082733859f5ebfccc3dc046b6d 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
|
||||||
@@ -352,6 +352,7 @@ public class WorldGenRegion implements WorldGenLevel {
|
@@ -336,7 +336,7 @@ public class WorldGenRegion implements WorldGenLevel {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
ChunkAccess ichunkaccess = this.getChunk(pos);
|
||||||
|
- BlockState iblockdata1 = ichunkaccess.setBlockState(pos, state, false);
|
||||||
|
+ BlockState iblockdata1 = ichunkaccess.setBlockState(pos, state, false); final BlockState previousBlockState = iblockdata1; // Paper - Clear block entity before setting up a DUMMY block entity
|
||||||
|
|
||||||
|
if (iblockdata1 != null) {
|
||||||
|
this.level.onBlockStateChange(pos, iblockdata1, state);
|
||||||
|
@@ -352,6 +352,17 @@ public class WorldGenRegion implements WorldGenLevel {
|
||||||
ichunkaccess.removeBlockEntity(pos);
|
ichunkaccess.removeBlockEntity(pos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
+ ichunkaccess.removeBlockEntity(pos); // Paper - Clear the block entity before setting up a DUMMY block entity
|
+ // Paper start - Clear block entity before setting up a DUMMY block entity
|
||||||
|
+ // The concept of removing a block entity when the block itself changes is generally lifted
|
||||||
|
+ // from LevelChunk#setBlockState.
|
||||||
|
+ // It is however to note that this may only run if the block actually changes.
|
||||||
|
+ // Otherwise a chest block entity generated by a structure template that is later "updated" to
|
||||||
|
+ // be waterlogged would remove its existing block entity (see PaperMC/Paper#10750)
|
||||||
|
+ // This logic is *also* found in LevelChunk#setBlockState.
|
||||||
|
+ if (previousBlockState != null && !java.util.Objects.equals(previousBlockState.getBlock(), state.getBlock())) {
|
||||||
|
+ ichunkaccess.removeBlockEntity(pos);
|
||||||
|
+ }
|
||||||
|
+ // Paper end - Clear block entity before setting up a DUMMY block entity
|
||||||
CompoundTag nbttagcompound = new CompoundTag();
|
CompoundTag nbttagcompound = new CompoundTag();
|
||||||
|
|
||||||
nbttagcompound.putInt("x", pos.getX());
|
nbttagcompound.putInt("x", pos.getX());
|
||||||
|
|
Loading…
Reference in a new issue