pocketmine\level\format\mcregion\Chunk::fromFastBinary PHP Метод

fromFastBinary() публичный статический Метод

public static fromFastBinary ( $data, pocketmine\level\format\LevelProvider $provider = null )
$provider pocketmine\level\format\LevelProvider
    public static function fromFastBinary($data, LevelProvider $provider = null)
    {
        try {
            $offset = 0;
            $chunk = new Chunk($provider instanceof LevelProvider ? $provider : McRegion::class, null);
            $chunk->provider = $provider;
            $chunk->x = Binary::readInt(substr($data, $offset, 4));
            $offset += 4;
            $chunk->z = Binary::readInt(substr($data, $offset, 4));
            $offset += 4;
            $chunk->blocks = substr($data, $offset, 32768);
            $offset += 32768;
            $chunk->data = substr($data, $offset, 16384);
            $offset += 16384;
            $chunk->skyLight = substr($data, $offset, 16384);
            $offset += 16384;
            $chunk->blockLight = substr($data, $offset, 16384);
            $offset += 16384;
            $chunk->heightMap = array_values(unpack("C*", substr($data, $offset, 256)));
            $offset += 256;
            $chunk->biomeColors = array_values(unpack("N*", substr($data, $offset, 1024)));
            $offset += 1024;
            $flags = ord($data[$offset++]);
            $chunk->nbt->TerrainGenerated = new ByteTag("TerrainGenerated", $flags & 0b1);
            $chunk->nbt->TerrainPopulated = new ByteTag("TerrainPopulated", $flags >> 1 & 0b1);
            $chunk->nbt->LightPopulated = new ByteTag("LightPopulated", $flags >> 2 & 0b1);
            return $chunk;
        } catch (Throwable $e) {
            return null;
        }
    }

Usage Example

Пример #1
0
 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);
 }