22declare(strict_types=1);
35 public const MAX_BITES = 6;
37 protected int $bites = 0;
40 $w->boundedIntAuto(0, self::MAX_BITES, $this->bites);
49 ->contract(1 / 16, 0, 1 / 16)
51 ->trim(
Facing::WEST, $this->bites / 8)
55 public function getBites() : int{ return $this->bites; }
59 if($bites < 0 || $bites > self::MAX_BITES){
60 throw new \InvalidArgumentException(
"Bites must be in range 0 ... " . self::MAX_BITES);
62 $this->bites = $bites;
67 if($this->bites === 0 && $item instanceof
ItemBlock){
70 if($block->getTypeId() === BlockTypeIds::CANDLE){
71 $resultBlock = VanillaBlocks::CAKE_WITH_CANDLE();
73 $resultBlock = VanillaBlocks::CAKE_WITH_DYED_CANDLE()->setColor($block->getColor());
76 if($resultBlock !==
null){
77 $this->position->getWorld()->setBlock($this->position, $resultBlock);
83 return parent::onInteract($item, $face, $clickVector, $player, $returnedItems);
90 public function getResidue() :
Block{
93 if($clone->bites > self::MAX_BITES){
94 $clone = VanillaBlocks::AIR();
getDropsForCompatibleTool(Item $item)
recalculateCollisionBoxes()
onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player=null, array &$returnedItems=[])
describeBlockOnlyState(RuntimeDataDescriber $w)
getBlock(?int $clickedFace=null)