public static fromFastBinary ( string $data, pocketmine\level\format\LevelProvider $provider = null ) : |
||
$data | string | |
$provider | pocketmine\level\format\LevelProvider | |
return |
public static function fromFastBinary($data, LevelProvider $provider = null)
{
$nbt = new NBT(NBT::BIG_ENDIAN);
try {
$nbt->read($data);
$chunk = $nbt->getData();
if (!isset($chunk->Level) or !$chunk->Level instanceof CompoundTag) {
return null;
}
return new Chunk($provider instanceof LevelProvider ? $provider : Anvil::class, $chunk->Level);
} catch (\Throwable $e) {
return null;
}
}
public function onRun() { $chunk = Chunk::fromFastBinary($this->chunk); $extraData = new BinaryStream(); $extraData->putLInt(count($chunk->getBlockExtraDataArray())); foreach ($chunk->getBlockExtraDataArray() as $key => $value) { $extraData->putLInt($key); $extraData->putLShort($value); } $ordered = $chunk->getBlockIdArray() . $chunk->getBlockDataArray() . $chunk->getBlockSkyLightArray() . $chunk->getBlockLightArray() . pack("C*", ...$chunk->getHeightMapArray()) . pack("N*", ...$chunk->getBiomeColorArray()) . $extraData->getBuffer() . $this->tiles; $this->setResult($ordered, false); }