FastChunkSerializer: optimize palette writing

This commit is contained in:
Dylan K. Taylor 2019-06-27 15:42:10 +01:00
parent 6838a1e07a
commit a279648c68

View File

@ -31,6 +31,7 @@ use pocketmine\world\format\SubChunk;
use function array_values; use function array_values;
use function count; use function count;
use function pack; use function pack;
use function strlen;
use function unpack; use function unpack;
/** /**
@ -75,10 +76,9 @@ final class FastChunkSerializer{
$subStream->putByte($blocks->getBitsPerBlock()); $subStream->putByte($blocks->getBitsPerBlock());
$subStream->put($wordArray); $subStream->put($wordArray);
$subStream->putInt(count($palette)); $serialPalette = pack("N*", ...$palette);
foreach($palette as $p){ $subStream->putInt(strlen($serialPalette));
$subStream->putInt($p); $subStream->put($serialPalette);
}
} }
if($chunk->isLightPopulated()){ if($chunk->isLightPopulated()){
@ -129,10 +129,7 @@ final class FastChunkSerializer{
for($i = 0, $layerCount = $stream->getByte(); $i < $layerCount; ++$i){ for($i = 0, $layerCount = $stream->getByte(); $i < $layerCount; ++$i){
$bitsPerBlock = $stream->getByte(); $bitsPerBlock = $stream->getByte();
$words = $stream->get(PalettedBlockArray::getExpectedWordArraySize($bitsPerBlock)); $words = $stream->get(PalettedBlockArray::getExpectedWordArraySize($bitsPerBlock));
$palette = []; $palette = array_values(unpack("N*", $stream->get($stream->getInt())));
for($k = 0, $paletteSize = $stream->getInt(); $k < $paletteSize; ++$k){
$palette[] = $stream->getInt();
}
$layers[] = PalettedBlockArray::fromData($bitsPerBlock, $words, $palette); $layers[] = PalettedBlockArray::fromData($bitsPerBlock, $words, $palette);
} }