pocketmine\level\generator\object\BigTree::placeObject PHP Метод

placeObject() публичный Метод

public placeObject ( pocketmine\level\ChunkManager $level, $x, $y, $z, Random $random )
$level pocketmine\level\ChunkManager
$random pocketmine\utils\Random
    public function placeObject(ChunkManager $level, $x, $y, $z, Random $random)
    {
        $this->random = $random;
        $this->trunkHeight = (int) ($this->totalHeight * $this->trunkHeightMultiplier);
        $leaves = $this->getLeafGroupPoints($level, $x, $y, $z);
        foreach ($leaves as $leaf) {
            /** @var Vector3 $leafGroup */
            $leafGroup = $leaf[0];
            $groupX = $leafGroup->getX();
            $groupY = $leafGroup->getY();
            $groupZ = $leafGroup->getZ();
            for ($yy = $groupY; $yy < $groupY + $this->leafDistanceLimit; ++$yy) {
                $this->generateGroupLayer($level, $groupX, $yy, $groupZ, $this->getLeafGroupLayerSize($yy - $groupY));
            }
        }
        $trunk = new VectorIterator($level, new Vector3($x, $y - 1, $z), new Vector3($x, $y + $this->trunkHeight, $z));
        while ($trunk->valid()) {
            $trunk->next();
            $pos = $trunk->current();
            $level->setBlockIdAt($pos->x, $pos->y, $pos->z, Block::LOG);
        }
        $this->generateBranches($level, $x, $y, $z, $leaves);
    }

Usage Example

Пример #1
0
 /**
  * @param CommandSender $sender
  * @param string $alias
  * @param array $args
  * @return bool
  */
 public function execute(CommandSender $sender, $alias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return false;
     }
     if (!$sender instanceof Player) {
         $sender->sendMessage($this->getConsoleUsage());
         return false;
     }
     if (count($args) !== 1) {
         $sender->sendMessage($this->getUsage());
         return false;
     }
     $transparent = [];
     $block = $sender->getTargetBlock(100, $transparent);
     while (!$block->isSolid) {
         if ($block === null) {
             break;
         }
         $transparent[] = $block->getID();
         $block = $sender->getTargetBlock(100, $transparent);
     }
     if ($block === null) {
         $sender->sendMessage(TextFormat::RED . "There isn't a reachable block");
         return false;
     }
     switch (strtolower($args[0])) {
         case "tree":
             $type = Sapling::OAK;
             break;
         case "redwood":
             $type = Sapling::SPRUCE;
             break;
         case "jungle":
             $type = Sapling::JUNGLE;
             break;
         default:
             $sender->sendMessage(TextFormat::RED . "Invalid tree type, try with:\n<tree|redwood|jungle>");
             return false;
             break;
     }
     $tree = new BigTree();
     $tree->placeObject($sender->getLevel(), $block->getFloorX(), $block->getFloorY() + 1, $block->getFloorZ(), $type);
     $sender->sendMessage(TextFormat::GREEN . "BigTree spawned!");
     return true;
 }