22declare(strict_types=1);
26use pocketmine\block\utils\AgeableTrait;
28use pocketmine\block\utils\HorizontalFacingTrait;
29use pocketmine\block\utils\WoodType;
43 use HorizontalFacingTrait;
46 public const MAX_AGE = 2;
49 $w->horizontalFacing($this->facing);
59 ->squash(
Facing::axis(
Facing::rotateY($this->facing, true)), (6 - $this->age) / 16)
60 ->trim(
Facing::DOWN, (7 - $this->age * 2) / 16)
62 ->trim(
Facing::opposite($this->facing), 1 / 16)
63 ->trim($this->facing, (11 - $this->age * 2) / 16)
67 private function canAttachTo(
Block $block) : bool{
68 return $block instanceof
Wood && $block->getWoodType() === WoodType::JUNGLE;
72 if(
Facing::axis($face) !==
Axis::Y && $this->canAttachTo($blockClicked)){
73 $this->facing = $face;
74 return parent::place($tx, $item, $blockReplace, $blockClicked, $face, $clickVector, $player);
81 if($item instanceof
Fertilizer && $this->grow($player)){
91 if(!$this->canAttachTo($this->getSide(
Facing::opposite($this->facing)))){
92 $this->position->getWorld()->useBreakOn($this->position);
97 return $this->age < self::MAX_AGE;
101 if(mt_rand(1, 5) === 1){
106 private function grow(?
Player $player =
null) : bool{
107 if($this->age < self::MAX_AGE){
108 $block = clone $this;
110 return BlockEventHelper::grow($this, $block, $player);
117 VanillaItems::COCOA_BEANS()->setCount($this->age === self::MAX_AGE ? mt_rand(2, 3) : 1)
describeBlockOnlyState(RuntimeDataDescriber $w)
recalculateCollisionBoxes()
onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player=null, array &$returnedItems=[])
getDropsForCompatibleTool(Item $item)
place(BlockTransaction $tx, Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, ?Player $player=null)
boundedIntAuto(int $min, int $max, int &$value)