treeHeight - $random->nextBoundedInt(3); } public function placeObject(ChunkManager $world, int $x, int $y, int $z, Random $random) : void{ $this->treeHeight = $random->nextBoundedInt(4) + 6; parent::placeObject($world, $x, $y, $z, $random); } protected function placeCanopy(int $x, int $y, int $z, Random $random, BlockTransaction $transaction) : void{ $topSize = $this->treeHeight - (1 + $random->nextBoundedInt(2)); $lRadius = 2 + $random->nextBoundedInt(2); $radius = $random->nextBoundedInt(2); $maxR = 1; $minR = 0; for($yy = 0; $yy <= $topSize; ++$yy){ $yyy = $y + $this->treeHeight - $yy; for($xx = $x - $radius; $xx <= $x + $radius; ++$xx){ $xOff = abs($xx - $x); for($zz = $z - $radius; $zz <= $z + $radius; ++$zz){ $zOff = abs($zz - $z); if($xOff === $radius and $zOff === $radius and $radius > 0){ continue; } if(!$transaction->fetchBlockAt($xx, $yyy, $zz)->isSolid()){ $transaction->addBlockAt($xx, $yyy, $zz, $this->leafBlock); } } } if($radius >= $maxR){ $radius = $minR; $minR = 1; if(++$maxR > $lRadius){ $maxR = $lRadius; } }else{ ++$radius; } } } }