22declare(strict_types=1);
24namespace pocketmine\block\utils;
41 public function onInteract(Item $item,
Facing $face, Vector3 $clickVector, ?Player $player =
null, array &$returnedItems = []) : bool{
42 if($player instanceof Player && !$this->isOpeningObstructed() && $this->
canOpenWith($item->getCustomName())){
43 $this->openToUnchecked($player);
49 protected function newMenu(Player $player, Inventory $inventory, Position $position) : InventoryWindow{
50 return new BlockInventoryWindow($player, $inventory, $position);
53 public function isOpeningObstructed() : bool{
57 abstract protected function getPosition() : Position;
59 protected function getTile() : ?ContainerTile{
61 $tile = $pos->getWorld()->getTile($pos);
62 return $tile instanceof ContainerTile ? $tile :
null;
67 return $this->getTile()?->
canOpenWith($key) ?? false;
70 public function openToUnchecked(Player $player) : bool{
71 $inventory = $this->getInventory();
72 return $inventory !==
null && $player->setCurrentWindow($this->newMenu($player, $inventory, $this->
getPosition()));
75 public function getInventory() : ?Inventory{
76 return $this->getTile()?->getInventory();