meta = $meta; } 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){ $entity->resetFallDistance(); $entity->onGround = true; } protected function recalculateBoundingBox(){ $f = 0.1875; if($this->meta === 2){ return new AxisAlignedBB( $this->x, $this->y, $this->z + 1 - $f, $this->x + 1, $this->y + 1, $this->z + 1 ); }elseif($this->meta === 3){ return new AxisAlignedBB( $this->x, $this->y, $this->z, $this->x + 1, $this->y + 1, $this->z + $f ); }elseif($this->meta === 4){ return new AxisAlignedBB( $this->x + 1 - $f, $this->y, $this->z, $this->x + 1, $this->y + 1, $this->z + 1 ); }elseif($this->meta === 5){ return new AxisAlignedBB( $this->x, $this->y, $this->z, $this->x + $f, $this->y + 1, $this->z + 1 ); } return null; } public function place(Item $item, Block $block, Block $target, int $face, Vector3 $facePos, Player $player = null) : bool{ if($target->isTransparent() === false){ $faces = [ 2 => 2, 3 => 3, 4 => 4, 5 => 5, ]; if(isset($faces[$face])){ $this->meta = $faces[$face]; $this->getLevel()->setBlock($block, $this, true, true); return true; } } return false; } public function onUpdate(int $type){ if($type === Level::BLOCK_UPDATE_NORMAL){ $sides = [ 2 => 3, 3 => 2, 4 => 5, 5 => 4 ]; if(!$this->getSide($sides[$this->meta])->isSolid()){ //Replace with common break method $this->level->useBreakOn($this); return Level::BLOCK_UPDATE_NORMAL; } } return false; } public function getToolType() : int{ return Tool::TYPE_AXE; } public function getVariantBitmask() : int{ return 0; } }