From e1e5a33da48ac8f6de7dbb628921e7fc6606d103 Mon Sep 17 00:00:00 2001
From: Pierpaolo Coletta <pierpi0900@gmail.com>
Date: Sat, 6 Apr 2024 23:16:54 +0200
Subject: [PATCH] Fix invalid block entities created during world gen (#10375)

---
 ...invalid-block-entity-during-world-ge.patch | 40 +++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch

diff --git a/patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch b/patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch
new file mode 100644
index 0000000000..0e21522a3f
--- /dev/null
+++ b/patches/server/Fix-creation-of-invalid-block-entity-during-world-ge.patch
@@ -0,0 +1,40 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Pierpaolo Coletta <p.coletta@glyart.com>
+Date: Sat, 30 Mar 2024 21:06:10 +0100
+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
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
++++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
+@@ -0,0 +0,0 @@ public class WorldGenRegion implements WorldGenLevel {
+                         ichunkaccess.removeBlockEntity(pos);
+                     }
+                 } else {
++                    ichunkaccess.removeBlockEntity(pos); // Paper - Clear the block entity before setting up a DUMMY block entity
+                     CompoundTag nbttagcompound = new CompoundTag();
+ 
+                     nbttagcompound.putInt("x", pos.getX());
+diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
+--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
++++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+@@ -0,0 +0,0 @@ public class LevelChunk extends ChunkAccess {
+                         if (this.blockEntity.getType().isValid(iblockdata)) {
+                             this.ticker.tick(LevelChunk.this.level, this.blockEntity.getBlockPos(), iblockdata, this.blockEntity);
+                             this.loggedInvalidBlockState = false;
+-                        } else if (!this.loggedInvalidBlockState) {
+-                            this.loggedInvalidBlockState = true;
+-                            LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata});
++                        // Paper start - Remove the Block Entity if it's invalid
++                        } else {
++                            LevelChunk.this.removeBlockEntity(this.getPos());
++                            if (!this.loggedInvalidBlockState) {
++                                this.loggedInvalidBlockState = true;
++                                LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata});
++                            }
++                            // Paper end - Remove the Block Entity if it's invalid
+                         }
+ 
+                         gameprofilerfiller.pop();