diff --git a/src/block/tile/ContainerTrait.php b/src/block/tile/ContainerTrait.php index 2abe134f2..ba8ab084a 100644 --- a/src/block/tile/ContainerTrait.php +++ b/src/block/tile/ContainerTrait.php @@ -44,7 +44,7 @@ trait ContainerTrait{ abstract public function getRealInventory(); protected function loadItems(CompoundTag $tag) : void{ - if(($inventoryTag = $tag->getTag(Container::TAG_ITEMS)) instanceof ListTag){ + if(($inventoryTag = $tag->getTag(Container::TAG_ITEMS)) instanceof ListTag && $inventoryTag->getTagType() === NBT::TAG_Compound){ $inventory = $this->getRealInventory(); $listeners = $inventory->getListeners()->toArray(); $inventory->getListeners()->remove(...$listeners); //prevent any events being fired by initialization diff --git a/src/item/Banner.php b/src/item/Banner.php index 18d0f1081..ea7320b79 100644 --- a/src/item/Banner.php +++ b/src/item/Banner.php @@ -29,6 +29,7 @@ use pocketmine\block\utils\BannerPatternLayer; use pocketmine\block\utils\DyeColor; use pocketmine\data\bedrock\BannerPatternTypeIdMap; use pocketmine\data\bedrock\DyeColorIdMap; +use pocketmine\nbt\NBT; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\ListTag; use function count; @@ -98,7 +99,7 @@ class Banner extends ItemBlockWallOrFloor{ $colorIdMap = DyeColorIdMap::getInstance(); $patternIdMap = BannerPatternTypeIdMap::getInstance(); $patterns = $tag->getListTag(self::TAG_PATTERNS); - if($patterns !== null){ + if($patterns !== null && $patterns->getTagType() === NBT::TAG_Compound){ /** @var CompoundTag $t */ foreach($patterns as $t){ $patternColor = $colorIdMap->fromInvertedId($t->getInt(self::TAG_PATTERN_COLOR)) ?? DyeColor::BLACK(); //TODO: missing pattern colour should be an error diff --git a/src/item/Item.php b/src/item/Item.php index b490ac6b1..9c1119db3 100644 --- a/src/item/Item.php +++ b/src/item/Item.php @@ -306,7 +306,7 @@ class Item implements \JsonSerializable{ $this->canPlaceOn = []; $canPlaceOn = $tag->getListTag("CanPlaceOn"); - if($canPlaceOn !== null){ + if($canPlaceOn !== null && $canPlaceOn->getTagType() === NBT::TAG_String){ /** @var StringTag $entry */ foreach($canPlaceOn as $entry){ $this->canPlaceOn[$entry->getValue()] = $entry->getValue(); @@ -314,7 +314,7 @@ class Item implements \JsonSerializable{ } $this->canDestroy = []; $canDestroy = $tag->getListTag("CanDestroy"); - if($canDestroy !== null){ + if($canDestroy !== null && $canDestroy->getTagType() === NBT::TAG_String){ /** @var StringTag $entry */ foreach($canDestroy as $entry){ $this->canDestroy[$entry->getValue()] = $entry->getValue();