facing; } public function readStateFromMeta(int $meta) : void{ $this->facing = BlockDataValidator::readHorizontalFacing($meta); } public function getStateBitmask() : int{ return 0b111; } public function getHardness() : float{ return 2.5; } public function getName() : string{ return "Chest"; } public function getToolType() : int{ return BlockToolType::TYPE_AXE; } protected function recalculateBoundingBox() : ?AxisAlignedBB{ //these are slightly bigger than in PC return AxisAlignedBB::one()->contract(0.025, 0, 0.025)->trim(Facing::UP, 0.05); } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ /** @var TileChest|null $pair */ $pair = null; if($player !== null){ $this->facing = Facing::opposite($player->getHorizontalFacing()); } foreach([ Facing::rotateY($player->getHorizontalFacing(), false), Facing::rotateY($player->getHorizontalFacing(), true) ] as $side){ $c = $this->getSide($side); if($c instanceof Chest and $c->isSameType($this) and $c->facing === $this->facing){ $tile = $this->getLevel()->getTile($c); if($tile instanceof TileChest and !$tile->isPaired()){ $pair = $tile; break; } } } if(parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player)){ /** @var TileChest $tile */ $tile = Tile::createFromItem(TileChest::class, $this->getLevel(), $this->asVector3(), $item); $this->level->addTile($tile); if($pair instanceof TileChest){ $pair->pairWith($tile); $tile->pairWith($pair); } return true; } return false; } public function onActivate(Item $item, Player $player = null) : bool{ if($player instanceof Player){ $chest = $this->getLevel()->getTile($this); if($chest instanceof TileChest){ if( !$this->getSide(Facing::UP)->isTransparent() or ($chest->isPaired() and !$chest->getPair()->getBlock()->getSide(Facing::UP)->isTransparent()) or !$chest->canOpenWith($item->getCustomName()) ){ return true; } $player->addWindow($chest->getInventory()); } } return true; } public function getFuelTime() : int{ return 300; } }