41 use StaticSupportTrait;
46 if($player ===
null || !$player->hasFiniteResources() || mt_rand(1, 100) <= 45){
55 private function grow(?
Player $player) : void{
56 $random = new Random(mt_rand());
57 $tree = TreeFactory::get($random, TreeType::AZALEA);
58 $transaction = $tree?->getBlockTransaction($this->position->getWorld(), $this->position->getFloorX(), $this->position->getFloorY(), $this->position->getFloorZ(), $random);
59 if($transaction ===
null){
63 $ev =
new StructureGrowEvent($this, $transaction, $player);
65 if(!$ev->isCancelled()){
66 $transaction->apply();
73 ->squashedCopy(
Axis::X, 6 / 16)
74 ->squashedCopy(
Axis::Z, 6 / 16)
75 ->trimmedCopy(
Facing::UP, 8 / 16),
80 private function canBeSupportedAt(
Block $block) : bool{
82 $supportBlock = $block->getSide(
Facing::DOWN);
83 return $supportBlock->
getTypeId() === BlockTypeIds::CLAY ||
84 $supportBlock->hasTypeTag(BlockTypeTags::DIRT) ||
85 $supportBlock->hasTypeTag(BlockTypeTags::MUD);