getShort() public method

public getShort ( )
Esempio n. 1
0
 public function __construct($level, Compound $nbt = null)
 {
     if ($nbt === null) {
         $this->provider = $level;
         $this->nbt = new Compound("Level", []);
         return;
     }
     $this->nbt = $nbt;
     if (isset($this->nbt->Entities) and $this->nbt->Entities instanceof Enum) {
         $this->nbt->Entities->setTagType(NBT::TAG_Compound);
     } else {
         $this->nbt->Entities = new Enum("Entities", []);
         $this->nbt->Entities->setTagType(NBT::TAG_Compound);
     }
     if (isset($this->nbt->TileEntities) and $this->nbt->TileEntities instanceof Enum) {
         $this->nbt->TileEntities->setTagType(NBT::TAG_Compound);
     } else {
         $this->nbt->TileEntities = new Enum("TileEntities", []);
         $this->nbt->TileEntities->setTagType(NBT::TAG_Compound);
     }
     if (isset($this->nbt->TileTicks) and $this->nbt->TileTicks instanceof Enum) {
         $this->nbt->TileTicks->setTagType(NBT::TAG_Compound);
     } else {
         $this->nbt->TileTicks = new Enum("TileTicks", []);
         $this->nbt->TileTicks->setTagType(NBT::TAG_Compound);
     }
     if (!isset($this->nbt->BiomeColors) or !$this->nbt->BiomeColors instanceof IntArray) {
         $this->nbt->BiomeColors = new IntArray("BiomeColors", array_fill(0, 256, 0));
     }
     if (!isset($this->nbt->HeightMap) or !$this->nbt->HeightMap instanceof IntArray) {
         $this->nbt->HeightMap = new IntArray("HeightMap", array_fill(0, 256, 0));
     }
     if (!isset($this->nbt->Blocks)) {
         $this->nbt->Blocks = new ByteArray("Blocks", str_repeat("", 32768));
     }
     if (!isset($this->nbt->Data)) {
         $this->nbt->Data = new ByteArray("Data", $half = str_repeat("", 16384));
         $this->nbt->SkyLight = new ByteArray("SkyLight", $half);
         $this->nbt->BlockLight = new ByteArray("BlockLight", $half);
     }
     $extraData = [];
     if (!isset($this->nbt->ExtraData) or !$this->nbt->ExtraData instanceof ByteArray) {
         $this->nbt->ExtraData = new ByteArray("ExtraData", Binary::writeInt(0));
     } else {
         $stream = new BinaryStream($this->nbt->ExtraData->getValue());
         $count = $stream->getInt();
         for ($i = 0; $i < $count; ++$i) {
             $key = $stream->getInt();
             $extraData[$key] = $stream->getShort(false);
         }
     }
     parent::__construct($level, $this->nbt["xPos"], $this->nbt["zPos"], $this->nbt->Blocks->getValue(), $this->nbt->Data->getValue(), $this->nbt->SkyLight->getValue(), $this->nbt->BlockLight->getValue(), $this->nbt->BiomeColors->getValue(), $this->nbt->HeightMap->getValue(), $this->nbt->Entities->getValue(), $this->nbt->TileEntities->getValue());
     unset($this->nbt->Blocks);
     unset($this->nbt->Data);
     unset($this->nbt->SkyLight);
     unset($this->nbt->BlockLight);
     unset($this->nbt->BiomeColors);
     unset($this->nbt->HeightMap);
     unset($this->nbt->Biomes);
 }
Esempio n. 2
0
 public function __construct($level, Compound $nbt = \null)
 {
     if ($nbt === \null) {
         $this->provider = $level;
         $this->nbt = new Compound("Level", []);
         return;
     }
     $this->nbt = $nbt;
     if (!isset($this->nbt->Entities) or !$this->nbt->Entities instanceof Enum) {
         $this->nbt->Entities = new Enum("Entities", []);
         $this->nbt->Entities->setTagType(NBT::TAG_Compound);
     }
     if (!isset($this->nbt->TileEntities) or !$this->nbt->TileEntities instanceof Enum) {
         $this->nbt->TileEntities = new Enum("TileEntities", []);
         $this->nbt->TileEntities->setTagType(NBT::TAG_Compound);
     }
     if (!isset($this->nbt->TileTicks) or !$this->nbt->TileTicks instanceof Enum) {
         $this->nbt->TileTicks = new Enum("TileTicks", []);
         $this->nbt->TileTicks->setTagType(NBT::TAG_Compound);
     }
     if (!isset($this->nbt->Sections) or !$this->nbt->Sections instanceof Enum) {
         $this->nbt->Sections = new Enum("Sections", []);
         $this->nbt->Sections->setTagType(NBT::TAG_Compound);
     }
     if (!isset($this->nbt->BiomeColors) or !$this->nbt->BiomeColors instanceof IntArray) {
         $this->nbt->BiomeColors = new IntArray("BiomeColors", \array_fill(0, 256, 0));
     }
     if (!isset($this->nbt->HeightMap) or !$this->nbt->HeightMap instanceof IntArray) {
         $this->nbt->HeightMap = new IntArray("HeightMap", \array_fill(0, 256, 0));
     }
     $sections = [];
     foreach ($this->nbt->Sections as $section) {
         if ($section instanceof Compound) {
             $y = (int) $section["Y"];
             if ($y < 8) {
                 $sections[$y] = new ChunkSection($section);
             }
         }
     }
     for ($y = 0; $y < 8; ++$y) {
         if (!isset($sections[$y])) {
             $sections[$y] = new EmptyChunkSection($y);
         }
     }
     $extraData = [];
     if (!isset($this->nbt->ExtraData) or !$this->nbt->ExtraData instanceof ByteArray) {
         $this->nbt->ExtraData = new ByteArray("ExtraData", \pack("N", 0));
     } else {
         $stream = new BinaryStream($this->nbt->ExtraData->getValue());
         $count = $stream->getInt();
         for ($i = 0; $i < $count; ++$i) {
             $key = $stream->getInt();
             $extraData[$key] = $stream->getShort(\false);
         }
     }
     parent::__construct($level, (int) $this->nbt["xPos"], (int) $this->nbt["zPos"], $sections, $this->nbt->BiomeColors->getValue(), $this->nbt->HeightMap->getValue(), $this->nbt->Entities->getValue(), $this->nbt->TileEntities->getValue(), $extraData);
     if (isset($this->nbt->Biomes)) {
         $this->checkOldBiomes($this->nbt->Biomes->getValue());
         unset($this->nbt->Biomes);
     }
     unset($this->nbt->Sections, $this->nbt->ExtraData);
 }
 /**
  * @param string        $data
  * @param LevelProvider $provider
  *
  * @return Chunk
  */
 public static function fromBinary($data, LevelProvider $provider = \null)
 {
     try {
         $chunkX = \unpack("V", \substr($data, 0, 4))[1];
         $chunkZ = \unpack("V", \substr($data, 4, 4))[1];
         $chunkData = \substr($data, 8, -1);
         $flags = \ord(\substr($data, -1));
         $entities = \null;
         $tiles = \null;
         $extraData = [];
         if ($provider instanceof LevelDB) {
             $nbt = new NBT(NBT::LITTLE_ENDIAN);
             $entityData = $provider->getDatabase()->get(\substr($data, 0, 8) . LevelDB::ENTRY_ENTITIES);
             if ($entityData !== \false and \strlen($entityData) > 0) {
                 $nbt->read($entityData, \true);
                 $entities = $nbt->getData();
                 if (!\is_array($entities)) {
                     $entities = [$entities];
                 }
             }
             $tileData = $provider->getDatabase()->get(\substr($data, 0, 8) . LevelDB::ENTRY_TILES);
             if ($tileData !== \false and \strlen($tileData) > 0) {
                 $nbt->read($tileData, \true);
                 $tiles = $nbt->getData();
                 if (!\is_array($tiles)) {
                     $tiles = [$tiles];
                 }
             }
             $tileData = $provider->getDatabase()->get(\substr($data, 0, 8) . LevelDB::ENTRY_EXTRA_DATA);
             if ($tileData !== \false and \strlen($tileData) > 0) {
                 $stream = new BinaryStream($tileData);
                 $count = $stream->getInt();
                 for ($i = 0; $i < $count; ++$i) {
                     $key = $stream->getInt();
                     $value = $stream->getShort(\false);
                     $extraData[$key] = $value;
                 }
             }
         }
         $chunk = new Chunk($provider instanceof LevelProvider ? $provider : LevelDB::class, $chunkX, $chunkZ, $chunkData, $entities, $tiles);
         if ($flags & 0x1) {
             $chunk->setGenerated();
         }
         if ($flags & 0x2) {
             $chunk->setPopulated();
         }
         if ($flags & 0x4) {
             $chunk->setLightPopulated();
         }
         return $chunk;
     } catch (\Exception $e) {
         return \null;
     }
 }