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
This commit is contained in:
Dylan T. 2025-06-27 15:49:43 +00:00
parent ba2a7cceaf
commit 30d13508b4

View File

@ -775,19 +775,22 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
$subStream = new BinaryStream(); $subStream = new BinaryStream();
$subStream->putByte(self::CURRENT_LEVEL_SUBCHUNK_VERSION); $subStream->putByte(self::CURRENT_LEVEL_SUBCHUNK_VERSION);
$layerCount = 0;
$blockLayer = $subChunk->getBlockLayer(); $blockLayer = $subChunk->getBlockLayer();
$liquidLayer = $subChunk->getLiquidLayer(); $liquidLayer = $subChunk->getLiquidLayer();
if($blockLayer !== null) $layerCount++; $isBlockLayerEmpty = $blockLayer->getBitsPerBlock() === 0 && $blockLayer->get(0, 0, 0) === $subChunk->getEmptyBlockId();
if($liquidLayer !== null) $layerCount++; $isLiquidLayerEmpty = $liquidLayer->getBitsPerBlock() === 0 && $liquidLayer->get(0, 0, 0) === $subChunk->getEmptyBlockId();
$layerCount = 0;
if(!$isBlockLayerEmpty) $layerCount++;
if(!$isLiquidLayerEmpty) $layerCount++;
$subStream->putByte($layerCount); $subStream->putByte($layerCount);
if($blockLayer !== null){ if(!$isBlockLayerEmpty){
$this->serializeBlockPalette($subStream, $blockLayer); $this->serializeBlockPalette($subStream, $blockLayer);
} }
if($liquidLayer !== null){ if(!$isLiquidLayerEmpty){
$this->serializeBlockPalette($subStream, $liquidLayer); $this->serializeBlockPalette($subStream, $liquidLayer);
} }