mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-13 09:19:42 +00:00
FastChunkSerializer: optimize palette writing
This commit is contained in:
parent
6838a1e07a
commit
a279648c68
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user