22declare(strict_types=1);
28use pocketmine\block\utils\FallableTrait;
29use pocketmine\block\utils\HorizontalFacingTrait;
30use pocketmine\block\utils\SupportType;
41use
function lcg_value;
46 use HorizontalFacingTrait;
48 public const UNDAMAGED = 0;
49 public const SLIGHTLY_DAMAGED = 1;
50 public const VERY_DAMAGED = 2;
52 private int $damage = self::UNDAMAGED;
55 $w->boundedIntAuto(self::UNDAMAGED, self::VERY_DAMAGED, $this->damage);
59 $w->horizontalFacing($this->facing);
62 public function getDamage() : int{ return $this->damage; }
66 if($damage < self::UNDAMAGED || $damage > self::VERY_DAMAGED){
67 throw new \InvalidArgumentException(
"Damage must be in range " . self::UNDAMAGED .
" ... " . self::VERY_DAMAGED);
69 $this->damage = $damage;
81 return SupportType::NONE;
85 if($player instanceof
Player){
94 $this->facing = Facing::rotateY($player->getHorizontalFacing(),
true);
96 return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
100 if(lcg_value() < 0.05 + (round($blockEntity->getFallDistance()) - 1) * 0.05){
101 if($this->damage !== self::VERY_DAMAGED){
102 $this->damage = $this->damage + 1;
place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player=null)
recalculateCollisionBoxes()
describeBlockOnlyState(RuntimeDataDescriber $w)
onHitGround(FallingBlock $blockEntity)
onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player=null, array &$returnedItems=[])
describeBlockItemState(RuntimeDataDescriber $w)
getSupportType(int $facing)