From 30d13508b4a2ac8afeca3fec25fbaaa331b6e2f0 Mon Sep 17 00:00:00 2001 From: "Dylan T." Date: Fri, 27 Jun 2025 15:49:43 +0000 Subject: [PATCH] Update LevelDB to check for layer emptiness instead of null - Check if layers are empty (bitsPerBlock == 0 and value == emptyBlockId) instead of null when saving subchunks - This aligns with the refactored SubChunk class that now uses non-nullable blockLayer and liquidLayer fields --- src/world/format/io/leveldb/LevelDB.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/world/format/io/leveldb/LevelDB.php b/src/world/format/io/leveldb/LevelDB.php index 8f28c3231..86cd8594d 100644 --- a/src/world/format/io/leveldb/LevelDB.php +++ b/src/world/format/io/leveldb/LevelDB.php @@ -775,19 +775,22 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{ $subStream = new BinaryStream(); $subStream->putByte(self::CURRENT_LEVEL_SUBCHUNK_VERSION); - $layerCount = 0; $blockLayer = $subChunk->getBlockLayer(); $liquidLayer = $subChunk->getLiquidLayer(); - if($blockLayer !== null) $layerCount++; - if($liquidLayer !== null) $layerCount++; + $isBlockLayerEmpty = $blockLayer->getBitsPerBlock() === 0 && $blockLayer->get(0, 0, 0) === $subChunk->getEmptyBlockId(); + $isLiquidLayerEmpty = $liquidLayer->getBitsPerBlock() === 0 && $liquidLayer->get(0, 0, 0) === $subChunk->getEmptyBlockId(); + + $layerCount = 0; + if(!$isBlockLayerEmpty) $layerCount++; + if(!$isLiquidLayerEmpty) $layerCount++; $subStream->putByte($layerCount); - if($blockLayer !== null){ + if(!$isBlockLayerEmpty){ $this->serializeBlockPalette($subStream, $blockLayer); } - if($liquidLayer !== null){ + if(!$isLiquidLayerEmpty){ $this->serializeBlockPalette($subStream, $liquidLayer); }