From 258923cc78bc2fc5f9504e450cb3ba43a484d2c3 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sat, 21 Jun 2025 23:05:51 +0100 Subject: [PATCH] World: verify blockstate IDs in setChunk() I think I've finally traced the source of these problems back to BuilderTools setting bad values in async tasks :) --- src/world/World.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/world/World.php b/src/world/World.php index 5c5e4cfbfd..ecec3d3b9c 100644 --- a/src/world/World.php +++ b/src/world/World.php @@ -2625,6 +2625,16 @@ class World implements ChunkManager{ } public function setChunk(int $chunkX, int $chunkZ, Chunk $chunk) : void{ + foreach($chunk->getSubChunks() as $subChunk){ + foreach($subChunk->getBlockLayers() as $blockLayer){ + foreach($blockLayer->getPalette() as $blockStateId){ + if(!$this->blockStateRegistry->hasStateId($blockStateId)){ + throw new \InvalidArgumentException("Provided chunk contains unknown/unregistered blocks (found unknown state ID $blockStateId)"); + } + } + } + } + $chunkHash = World::chunkHash($chunkX, $chunkZ); $oldChunk = $this->loadChunk($chunkX, $chunkZ); if($oldChunk !== null && $oldChunk !== $chunk){