diff --git a/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php b/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php index 705779fd8..4c1c73841 100644 --- a/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php +++ b/src/network/mcpe/protocol/types/entity/CompoundTagMetadataProperty.php @@ -23,8 +23,10 @@ declare(strict_types=1); namespace pocketmine\network\mcpe\protocol\types\entity; +use pocketmine\nbt\NbtDataException; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\TreeRoot; +use pocketmine\network\BadPacketException; use pocketmine\network\mcpe\serializer\NetworkBinaryStream; use pocketmine\network\mcpe\serializer\NetworkNbtSerializer; @@ -54,11 +56,21 @@ final class CompoundTagMetadataProperty implements MetadataProperty{ return $other instanceof self and $other->value->equals($this->value); } + /** + * @param NetworkBinaryStream $in + * + * @return self + * @throws BadPacketException + */ public static function read(NetworkBinaryStream $in) : self{ $offset = $in->getOffset(); - $result = new self((new NetworkNbtSerializer())->read($in->getBuffer(), $offset, 512)->getTag()); + try{ + $tag = (new NetworkNbtSerializer())->read($in->getBuffer(), $offset, 512)->mustGetCompoundTag(); + }catch(NbtDataException $e){ + throw new BadPacketException($e->getMessage(), 0, $e); + } $in->setOffset($offset); - return $result; + return new self($tag); } public function write(NetworkBinaryStream $out) : void{