facing; } public function readStateFromMeta(int $meta) : void{ $this->facing = BlockDataValidator::readHorizontalFacing(5 - $meta); } public function getStateBitmask() : int{ return 0b11; } protected function getTileClass() : ?string{ return TileItemFrame::class; } public function getName() : string{ return "Item Frame"; } public function onActivate(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{ $tile = $this->level->getTile($this); if($tile instanceof TileItemFrame){ if($tile->hasItem()){ $tile->setItemRotation(($tile->getItemRotation() + 1) % 8); }elseif(!$item->isNull()){ $tile->setItem($item->pop()); } } return true; } public function onNearbyBlockChange() : void{ if(!$this->getSide(Facing::opposite($this->facing))->isSolid()){ $this->level->useBreakOn($this); } } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ if($face === Facing::DOWN or $face === Facing::UP or !$blockClicked->isSolid()){ return false; } $this->facing = $face; return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } public function getDropsForCompatibleTool(Item $item) : array{ $drops = parent::getDropsForCompatibleTool($item); $tile = $this->level->getTile($this); if($tile instanceof TileItemFrame){ $tileItem = $tile->getItem(); if(lcg_value() <= $tile->getItemDropChance() and !$tileItem->isNull()){ $drops[] = $tileItem; } } return $drops; } public function isAffectedBySilkTouch() : bool{ return false; } }