diff --git a/composer.lock b/composer.lock index 6391d98f1..f38a63753 100644 --- a/composer.lock +++ b/composer.lock @@ -233,16 +233,16 @@ }, { "name": "particle/validator", - "version": "v2.3.3", + "version": "v2.3.4", "source": { "type": "git", "url": "https://github.com/particle-php/Validator.git", - "reference": "becaa89160fe220ebd9e9cd10addc62cf2adf3f0" + "reference": "657c7543e51938dd9d114750e49d695129527a7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/particle-php/Validator/zipball/becaa89160fe220ebd9e9cd10addc62cf2adf3f0", - "reference": "becaa89160fe220ebd9e9cd10addc62cf2adf3f0", + "url": "https://api.github.com/repos/particle-php/Validator/zipball/657c7543e51938dd9d114750e49d695129527a7a", + "reference": "657c7543e51938dd9d114750e49d695129527a7a", "shasum": "" }, "require": { @@ -291,20 +291,20 @@ "validation", "validator" ], - "time": "2018-09-12T08:03:23+00:00" + "time": "2019-01-07T13:39:13+00:00" }, { "name": "pocketmine/binaryutils", - "version": "0.1.5", + "version": "0.1.6", "source": { "type": "git", "url": "https://github.com/pmmp/BinaryUtils.git", - "reference": "03361b0d78ef2b400a99e96406aa594a5bc1c4ed" + "reference": "53cbb5a958130a6c6b5a4c511e623f4d401c1476" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pmmp/BinaryUtils/zipball/03361b0d78ef2b400a99e96406aa594a5bc1c4ed", - "reference": "03361b0d78ef2b400a99e96406aa594a5bc1c4ed", + "url": "https://api.github.com/repos/pmmp/BinaryUtils/zipball/53cbb5a958130a6c6b5a4c511e623f4d401c1476", + "reference": "53cbb5a958130a6c6b5a4c511e623f4d401c1476", "shasum": "" }, "require": { @@ -322,10 +322,10 @@ ], "description": "Classes and methods for conveniently handling binary data", "support": { - "source": "https://github.com/pmmp/BinaryUtils/tree/0.1.5", + "source": "https://github.com/pmmp/BinaryUtils/tree/0.1.6", "issues": "https://github.com/pmmp/BinaryUtils/issues" }, - "time": "2019-01-04T13:32:11+00:00" + "time": "2019-01-06T15:20:40+00:00" }, { "name": "pocketmine/math", @@ -372,12 +372,12 @@ "source": { "type": "git", "url": "https://github.com/pmmp/NBT.git", - "reference": "863b2e509485baffd4897cd6fa8e98e7e7e5ae14" + "reference": "ead8577bf3ff0eb8dd3c19c40a67a9ee6d06783a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pmmp/NBT/zipball/863b2e509485baffd4897cd6fa8e98e7e7e5ae14", - "reference": "863b2e509485baffd4897cd6fa8e98e7e7e5ae14", + "url": "https://api.github.com/repos/pmmp/NBT/zipball/ead8577bf3ff0eb8dd3c19c40a67a9ee6d06783a", + "reference": "ead8577bf3ff0eb8dd3c19c40a67a9ee6d06783a", "shasum": "" }, "require": { @@ -405,7 +405,7 @@ "source": "https://github.com/pmmp/NBT/tree/master", "issues": "https://github.com/pmmp/NBT/issues" }, - "time": "2019-01-04T15:32:10+00:00" + "time": "2019-01-07T21:01:32+00:00" }, { "name": "pocketmine/raklib", diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 41409e66f..776bfd733 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -94,7 +94,7 @@ use pocketmine\nbt\tag\DoubleTag; use pocketmine\nbt\tag\ListTag; use pocketmine\network\mcpe\CompressBatchPromise; use pocketmine\network\mcpe\NetworkCipher; -use pocketmine\network\mcpe\NetworkLittleEndianNBTStream; +use pocketmine\network\mcpe\NetworkNbtSerializer; use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\ProcessLoginTask; use pocketmine\network\mcpe\protocol\AdventureSettingsPacket; @@ -2465,7 +2465,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $t = $this->level->getTile($pos); if($t instanceof Spawnable){ - $nbt = new NetworkLittleEndianNBTStream(); + $nbt = new NetworkNbtSerializer(); $compound = $nbt->read($packet->namedtag); if(!$t->updateCompoundTag($compound, $this)){ $t->spawnTo($this); diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index cd3b92920..2156ef398 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -61,7 +61,7 @@ use pocketmine\level\LevelException; use pocketmine\metadata\EntityMetadataStore; use pocketmine\metadata\LevelMetadataStore; use pocketmine\metadata\PlayerMetadataStore; -use pocketmine\nbt\BigEndianNBTStream; +use pocketmine\nbt\BigEndianNbtSerializer; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; @@ -812,7 +812,7 @@ class Server{ if($this->shouldSavePlayerData()){ if(file_exists($path . "$name.dat")){ try{ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); return $nbt->readCompressed(file_get_contents($path . "$name.dat")); }catch(\Throwable $e){ //zlib decode error / corrupt data rename($path . "$name.dat", $path . "$name.dat.bak"); @@ -875,7 +875,7 @@ class Server{ $ev->call(); if(!$ev->isCancelled()){ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); try{ file_put_contents($this->getDataPath() . "players/" . strtolower($name) . ".dat", $nbt->writeCompressed($ev->getSaveData())); }catch(\Throwable $e){ diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index 1e7e64084..214efe1df 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -33,7 +33,7 @@ use pocketmine\entity\Entity; use pocketmine\item\enchantment\Enchantment; use pocketmine\item\enchantment\EnchantmentInstance; use pocketmine\math\Vector3; -use pocketmine\nbt\LittleEndianNBTStream; +use pocketmine\nbt\LittleEndianNbtSerializer; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; @@ -61,7 +61,7 @@ class Item implements ItemIds, \JsonSerializable{ public const TAG_DISPLAY_LORE = "Lore"; - /** @var LittleEndianNBTStream */ + /** @var LittleEndianNbtSerializer */ private static $cachedParser = null; private static function parseCompoundTag(string $tag) : CompoundTag{ @@ -70,7 +70,7 @@ class Item implements ItemIds, \JsonSerializable{ } if(self::$cachedParser === null){ - self::$cachedParser = new LittleEndianNBTStream(); + self::$cachedParser = new LittleEndianNbtSerializer(); } return self::$cachedParser->read($tag); @@ -78,7 +78,7 @@ class Item implements ItemIds, \JsonSerializable{ private static function writeCompoundTag(CompoundTag $tag) : string{ if(self::$cachedParser === null){ - self::$cachedParser = new LittleEndianNBTStream(); + self::$cachedParser = new LittleEndianNbtSerializer(); } return self::$cachedParser->write($tag); diff --git a/src/pocketmine/level/format/io/data/BedrockLevelData.php b/src/pocketmine/level/format/io/data/BedrockLevelData.php index 1f4f9f0ba..bfdfdf111 100644 --- a/src/pocketmine/level/format/io/data/BedrockLevelData.php +++ b/src/pocketmine/level/format/io/data/BedrockLevelData.php @@ -27,7 +27,7 @@ use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\generator\Flat; use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; -use pocketmine\nbt\LittleEndianNBTStream; +use pocketmine\nbt\LittleEndianNbtSerializer; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\FloatTag; @@ -97,13 +97,13 @@ class BedrockLevelData extends BaseNbtLevelData{ new StringTag("generatorOptions", $options["preset"] ?? "") ]); - $nbt = new LittleEndianNBTStream(); + $nbt = new LittleEndianNbtSerializer(); $buffer = $nbt->write($levelData); file_put_contents($path . "level.dat", Binary::writeLInt(self::CURRENT_STORAGE_VERSION) . Binary::writeLInt(strlen($buffer)) . $buffer); } protected function load() : ?CompoundTag{ - $nbt = new LittleEndianNBTStream(); + $nbt = new LittleEndianNbtSerializer(); $levelData = $nbt->read(substr(file_get_contents($this->dataPath), 8)); $version = $levelData->getInt("StorageVersion", INT32_MAX, true); @@ -148,7 +148,7 @@ class BedrockLevelData extends BaseNbtLevelData{ $this->compoundTag->setInt("NetworkVersion", ProtocolInfo::CURRENT_PROTOCOL); $this->compoundTag->setInt("StorageVersion", self::CURRENT_STORAGE_VERSION); - $nbt = new LittleEndianNBTStream(); + $nbt = new LittleEndianNbtSerializer(); $buffer = $nbt->write($this->compoundTag); file_put_contents($this->dataPath, Binary::writeLInt(self::CURRENT_STORAGE_VERSION) . Binary::writeLInt(strlen($buffer)) . $buffer); } diff --git a/src/pocketmine/level/format/io/data/JavaLevelData.php b/src/pocketmine/level/format/io/data/JavaLevelData.php index 76d726843..893d7cef0 100644 --- a/src/pocketmine/level/format/io/data/JavaLevelData.php +++ b/src/pocketmine/level/format/io/data/JavaLevelData.php @@ -25,7 +25,7 @@ namespace pocketmine\level\format\io\data; use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; -use pocketmine\nbt\BigEndianNBTStream; +use pocketmine\nbt\BigEndianNbtSerializer; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\FloatTag; @@ -61,7 +61,7 @@ class JavaLevelData extends BaseNbtLevelData{ new StringTag("LevelName", $name), new CompoundTag("GameRules", []) ]); - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); $buffer = $nbt->writeCompressed(new CompoundTag("", [ $levelData ])); @@ -69,7 +69,7 @@ class JavaLevelData extends BaseNbtLevelData{ } protected function load() : ?CompoundTag{ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); $levelData = $nbt->readCompressed(file_get_contents($this->dataPath)); if($levelData->hasTag("Data", CompoundTag::class)){ return $levelData->getCompoundTag("Data"); @@ -90,7 +90,7 @@ class JavaLevelData extends BaseNbtLevelData{ } public function save() : void{ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); $this->compoundTag->setName("Data"); $buffer = $nbt->writeCompressed(new CompoundTag("", [ $this->compoundTag diff --git a/src/pocketmine/level/format/io/leveldb/LevelDB.php b/src/pocketmine/level/format/io/leveldb/LevelDB.php index 18fd3f5ec..8badadf35 100644 --- a/src/pocketmine/level/format/io/leveldb/LevelDB.php +++ b/src/pocketmine/level/format/io/leveldb/LevelDB.php @@ -31,7 +31,7 @@ use pocketmine\level\format\io\exception\UnsupportedChunkFormatException; use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\format\io\LevelData; use pocketmine\level\format\SubChunk; -use pocketmine\nbt\LittleEndianNBTStream; +use pocketmine\nbt\LittleEndianNbtSerializer; use pocketmine\nbt\tag\CompoundTag; use pocketmine\utils\Binary; use pocketmine\utils\BinaryStream; @@ -239,7 +239,7 @@ class LevelDB extends BaseLevelProvider{ throw new UnsupportedChunkFormatException("don't know how to decode chunk format version $chunkVersion"); } - $nbt = new LittleEndianNBTStream(); + $nbt = new LittleEndianNbtSerializer(); /** @var CompoundTag[] $entities */ $entities = []; @@ -332,7 +332,7 @@ class LevelDB extends BaseLevelProvider{ */ private function writeTags(array $targets, string $index) : void{ if(!empty($targets)){ - $nbt = new LittleEndianNBTStream(); + $nbt = new LittleEndianNbtSerializer(); $this->db->put($index, $nbt->writeMultiple($targets)); }else{ $this->db->delete($index); diff --git a/src/pocketmine/level/format/io/region/LegacyAnvilChunkTrait.php b/src/pocketmine/level/format/io/region/LegacyAnvilChunkTrait.php index 759da6d9b..86b69eede 100644 --- a/src/pocketmine/level/format/io/region/LegacyAnvilChunkTrait.php +++ b/src/pocketmine/level/format/io/region/LegacyAnvilChunkTrait.php @@ -27,7 +27,7 @@ use pocketmine\level\format\Chunk; use pocketmine\level\format\io\ChunkUtils; use pocketmine\level\format\io\exception\CorruptedChunkException; use pocketmine\level\format\SubChunk; -use pocketmine\nbt\BigEndianNBTStream; +use pocketmine\nbt\BigEndianNbtSerializer; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\IntArrayTag; @@ -89,14 +89,14 @@ trait LegacyAnvilChunkTrait{ //TODO: TileTicks - $writer = new BigEndianNBTStream(); + $writer = new BigEndianNbtSerializer(); return $writer->writeCompressed(new CompoundTag("", [$nbt]), ZLIB_ENCODING_DEFLATE, RegionLoader::$COMPRESSION_LEVEL); } abstract protected function serializeSubChunk(SubChunk $subChunk) : CompoundTag; protected function deserializeChunk(string $data) : Chunk{ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); $chunk = $nbt->readCompressed($data); if(!$chunk->hasTag("Level")){ throw new CorruptedChunkException("'Level' key is missing from chunk NBT"); diff --git a/src/pocketmine/level/format/io/region/McRegion.php b/src/pocketmine/level/format/io/region/McRegion.php index 165840d8f..389c6e939 100644 --- a/src/pocketmine/level/format/io/region/McRegion.php +++ b/src/pocketmine/level/format/io/region/McRegion.php @@ -27,7 +27,7 @@ use pocketmine\level\format\Chunk; use pocketmine\level\format\io\ChunkUtils; use pocketmine\level\format\io\exception\CorruptedChunkException; use pocketmine\level\format\SubChunk; -use pocketmine\nbt\BigEndianNBTStream; +use pocketmine\nbt\BigEndianNbtSerializer; use pocketmine\nbt\NBT; use pocketmine\nbt\tag\ByteArrayTag; use pocketmine\nbt\tag\CompoundTag; @@ -95,7 +95,7 @@ class McRegion extends RegionLevelProvider{ $nbt->setTag(new ListTag("TileEntities", $tiles, NBT::TAG_Compound)); - $writer = new BigEndianNBTStream(); + $writer = new BigEndianNbtSerializer(); return $writer->writeCompressed(new CompoundTag("", [$nbt]), ZLIB_ENCODING_DEFLATE, RegionLoader::$COMPRESSION_LEVEL); } @@ -106,7 +106,7 @@ class McRegion extends RegionLevelProvider{ * @throws CorruptedChunkException */ protected function deserializeChunk(string $data) : Chunk{ - $nbt = new BigEndianNBTStream(); + $nbt = new BigEndianNbtSerializer(); $chunk = $nbt->readCompressed($data); if(!$chunk->hasTag("Level")){ throw new CorruptedChunkException("'Level' key is missing from chunk NBT"); diff --git a/src/pocketmine/network/mcpe/NetworkBinaryStream.php b/src/pocketmine/network/mcpe/NetworkBinaryStream.php index 565e5779a..5b4a8523b 100644 --- a/src/pocketmine/network/mcpe/NetworkBinaryStream.php +++ b/src/pocketmine/network/mcpe/NetworkBinaryStream.php @@ -30,7 +30,7 @@ use pocketmine\entity\Entity; use pocketmine\item\Item; use pocketmine\item\ItemFactory; use pocketmine\math\Vector3; -use pocketmine\nbt\LittleEndianNBTStream; +use pocketmine\nbt\LittleEndianNbtSerializer; use pocketmine\network\mcpe\protocol\types\CommandOriginData; use pocketmine\network\mcpe\protocol\types\EntityLink; use pocketmine\utils\BinaryStream; @@ -39,7 +39,7 @@ use function count; use function strlen; class NetworkBinaryStream extends BinaryStream{ - /** @var LittleEndianNBTStream */ + /** @var LittleEndianNbtSerializer */ private static $itemNbtSerializer = null; public function getString() : string{ @@ -85,7 +85,7 @@ class NetworkBinaryStream extends BinaryStream{ $compound = null; if($nbtLen > 0){ if(self::$itemNbtSerializer === null){ - self::$itemNbtSerializer = new LittleEndianNBTStream(); + self::$itemNbtSerializer = new LittleEndianNbtSerializer(); } $compound = self::$itemNbtSerializer->read($this->get($nbtLen)); } @@ -119,7 +119,7 @@ class NetworkBinaryStream extends BinaryStream{ $nbtLen = 0; if($item->hasNamedTag()){ if(self::$itemNbtSerializer === null){ - self::$itemNbtSerializer = new LittleEndianNBTStream(); + self::$itemNbtSerializer = new LittleEndianNbtSerializer(); } $nbt = self::$itemNbtSerializer->write($item->getNamedTag()); $nbtLen = strlen($nbt); diff --git a/src/pocketmine/network/mcpe/NetworkLittleEndianNBTStream.php b/src/pocketmine/network/mcpe/NetworkNbtSerializer.php similarity index 52% rename from src/pocketmine/network/mcpe/NetworkLittleEndianNBTStream.php rename to src/pocketmine/network/mcpe/NetworkNbtSerializer.php index 3f136463a..689dcb7ba 100644 --- a/src/pocketmine/network/mcpe/NetworkLittleEndianNBTStream.php +++ b/src/pocketmine/network/mcpe/NetworkNbtSerializer.php @@ -23,59 +23,55 @@ declare(strict_types=1); namespace pocketmine\network\mcpe; -use pocketmine\nbt\LittleEndianNBTStream; +use pocketmine\nbt\LittleEndianNbtSerializer; use function count; use function strlen; -#ifndef COMPILE -use pocketmine\utils\Binary; -#endif -#include +class NetworkNbtSerializer extends LittleEndianNbtSerializer{ -class NetworkLittleEndianNBTStream extends LittleEndianNBTStream{ - - public function getInt() : int{ - return Binary::readVarInt($this->buffer, $this->offset); + public function readInt() : int{ + return $this->buffer->getVarInt(); } - public function putInt(int $v) : void{ - $this->put(Binary::writeVarInt($v)); + public function writeInt(int $v) : void{ + $this->buffer->putVarInt($v); } - public function getLong() : int{ - return Binary::readVarLong($this->buffer, $this->offset); + public function readLong() : int{ + return $this->buffer->getVarLong(); } - public function putLong(int $v) : void{ - $this->put(Binary::writeVarLong($v)); + public function writeLong(int $v) : void{ + $this->buffer->putVarLong($v); } - public function getString() : string{ - return $this->get(Binary::readUnsignedVarInt($this->buffer, $this->offset)); + public function readString() : string{ + return $this->buffer->get($this->buffer->getUnsignedVarInt()); } - public function putString(string $v) : void{ + public function writeString(string $v) : void{ $len = strlen($v); if($len > 32767){ throw new \InvalidArgumentException("NBT strings cannot be longer than 32767 bytes, got $len bytes"); } - $this->put(Binary::writeUnsignedVarInt($len) . $v); + $this->buffer->putUnsignedVarInt($len); + $this->buffer->put($v); } - public function getIntArray() : array{ - $len = $this->getInt(); //varint + public function readIntArray() : array{ + $len = $this->readInt(); //varint $ret = []; for($i = 0; $i < $len; ++$i){ - $ret[] = $this->getInt(); //varint + $ret[] = $this->readInt(); //varint } return $ret; } - public function putIntArray(array $array) : void{ - $this->putInt(count($array)); //varint + public function writeIntArray(array $array) : void{ + $this->writeInt(count($array)); //varint foreach($array as $v){ - $this->putInt($v); //varint + $this->writeInt($v); //varint } } } diff --git a/src/pocketmine/tile/Spawnable.php b/src/pocketmine/tile/Spawnable.php index b4954ffb1..10f272901 100644 --- a/src/pocketmine/tile/Spawnable.php +++ b/src/pocketmine/tile/Spawnable.php @@ -26,7 +26,7 @@ namespace pocketmine\tile; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\StringTag; -use pocketmine\network\mcpe\NetworkLittleEndianNBTStream; +use pocketmine\network\mcpe\NetworkNbtSerializer; use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; use pocketmine\Player; use function get_class; @@ -37,7 +37,7 @@ abstract class Spawnable extends Tile{ /** @var bool */ private $dirty = true; //default dirty, until it's been spawned appropriately on the level - /** @var NetworkLittleEndianNBTStream|null */ + /** @var NetworkNbtSerializer|null */ private static $nbtWriter = null; public function createSpawnPacket() : BlockEntityDataPacket{ @@ -95,7 +95,7 @@ abstract class Spawnable extends Tile{ final public function getSerializedSpawnCompound() : string{ if($this->spawnCompoundCache === null){ if(self::$nbtWriter === null){ - self::$nbtWriter = new NetworkLittleEndianNBTStream(); + self::$nbtWriter = new NetworkNbtSerializer(); } $this->spawnCompoundCache = self::$nbtWriter->write($this->getSpawnCompound());