facing; } public function readStateFromMeta(int $meta) : void{ $this->facing = $meta; } public function getStateBitmask() : int{ return 0b111; } public function getName() : string{ return "Ladder"; } public function hasEntityCollision() : bool{ return true; } public function isSolid() : bool{ return false; } public function getHardness() : float{ return 0.4; } public function canClimb() : bool{ return true; } public function onEntityCollide(Entity $entity) : void{ $entity->resetFallDistance(); $entity->onGround = true; } protected function recalculateBoundingBox() : ?AxisAlignedBB{ return AxisAlignedBB::one()->trim($this->facing, 13 / 16); } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ if(!$blockClicked->isTransparent() and Facing::axis($face) !== Facing::AXIS_Y){ $this->facing = $face; return parent::place($item, $blockReplace, $blockClicked, $face, $clickVector, $player); } return false; } public function onNearbyBlockChange() : void{ if(!$this->getSide(Facing::opposite($this->facing))->isSolid()){ //Replace with common break method $this->level->useBreakOn($this); } } public function getToolType() : int{ return BlockToolType::TYPE_AXE; } }