meta = $meta; } public function isTransparent() : bool{ return true; } public function getHardness() : float{ return 5; } public function getBlastResistance() : float{ return 6000; } public function getVariantBitmask() : int{ return 0x0c; } public function getName() : string{ static $names = [ self::TYPE_NORMAL => "Anvil", self::TYPE_SLIGHTLY_DAMAGED => "Slightly Damaged Anvil", self::TYPE_VERY_DAMAGED => "Very Damaged Anvil" ]; return $names[$this->getVariant()] ?? "Anvil"; } public function getToolType() : int{ return BlockToolType::TYPE_PICKAXE; } public function getToolHarvestLevel() : int{ return TieredTool::TIER_WOODEN; } public function recalculateBoundingBox() : ?AxisAlignedBB{ $inset = 0.125; if(($this->meta & 0x01) !== 0){ //east/west return new AxisAlignedBB( $this->x, $this->y, $this->z + $inset, $this->x + 1, $this->y + 1, $this->z + 1 - $inset ); }else{ return new AxisAlignedBB( $this->x + $inset, $this->y, $this->z, $this->x + 1 - $inset, $this->y + 1, $this->z + 1 ); } } public function onActivate(Item $item, Player $player = null) : bool{ if($player instanceof Player){ $player->addWindow(new AnvilInventory($this)); } return true; } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ $direction = ($player !== null ? $player->getDirection() : 0) & 0x03; $this->meta = $this->getVariant() | $direction; return $this->getLevelNonNull()->setBlock($blockReplace, $this, true, true); } }