pocketmine\Server::generateLevel PHP Method

generateLevel() public method

Generates a new level if it does not exists
public generateLevel ( string $name, integer $seed = null, string $generator = null, array $options = [] ) : boolean
$name string
$seed integer
$generator string Class name that extends pocketmine\level\generator\Noise
$options array
return boolean
    public function generateLevel($name, $seed = null, $generator = null, $options = [])
    {
        if (trim($name) === "" or $this->isLevelGenerated($name)) {
            return false;
        }
        $seed = $seed === null ? Binary::readInt(random_bytes(4)) : (int) $seed;
        if (!isset($options["preset"])) {
            $options["preset"] = $this->getConfigString("generator-settings", "");
        }
        if (!($generator !== null and class_exists($generator, true) and is_subclass_of($generator, Generator::class))) {
            $generator = Generator::getGenerator($this->getLevelType());
        }
        if (($provider = LevelProviderManager::getProviderByName($providerName = $this->getProperty("level-settings.default-format", "mcregion"))) === null) {
            $provider = LevelProviderManager::getProviderByName($providerName = "mcregion");
        }
        try {
            $path = $this->getDataPath() . "worlds/" . $name . "/";
            /** @var \pocketmine\level\format\LevelProvider $provider */
            $provider::generate($path, $name, $seed, $generator, $options);
            $level = new Level($this, $name, $path, $provider);
            $this->levels[$level->getId()] = $level;
            $level->initLevel();
            $level->setTickRate($this->baseTickRate);
        } catch (\Throwable $e) {
            $this->logger->error($this->getLanguage()->translateString("pocketmine.level.generateError", [$name, $e->getMessage()]));
            $this->logger->logException($e);
            return false;
        }
        $this->getPluginManager()->callEvent(new LevelInitEvent($level));
        $this->getPluginManager()->callEvent(new LevelLoadEvent($level));
        $this->getLogger()->notice($this->getLanguage()->translateString("pocketmine.level.backgroundGeneration", [$name]));
        $centerX = $level->getSpawnLocation()->getX() >> 4;
        $centerZ = $level->getSpawnLocation()->getZ() >> 4;
        $order = [];
        for ($X = -3; $X <= 3; ++$X) {
            for ($Z = -3; $Z <= 3; ++$Z) {
                $distance = $X ** 2 + $Z ** 2;
                $chunkX = $X + $centerX;
                $chunkZ = $Z + $centerZ;
                $index = Level::chunkHash($chunkX, $chunkZ);
                $order[$index] = $distance;
            }
        }
        asort($order);
        foreach ($order as $index => $distance) {
            Level::getXZ($index, $chunkX, $chunkZ);
            $level->populateChunk($chunkX, $chunkZ, true);
        }
        return true;
    }

Usage Example

Ejemplo n.º 1
0
 public function __construct(array $args, Main $main)
 {
     $this->name = $args["name"];
     $this->motto = $args["motto"];
     $this->id = $args["id"];
     $this->founder = $args["founder"];
     $this->ranks = $args["ranks"];
     $this->defaultRank = $args["default-rank"];
     $this->allyRank = $args["ally-rank"];
     $this->truceRank = $args["truce-rank"];
     $this->stdRank = $args["std-rank"];
     $this->members = $args["members"];
     $this->lastActive = $args["last-active"];
     $this->chunks = $args["chunks"];
     $this->homes = $args["homes"];
     $this->main = $main;
     $this->whitelist = $args["whitelist"];
     $this->reputation = isset($args["reputation"]) ? $args["reputation"] : 0;
     $this->server = $this->main->getServer();
     $levels = [];
     foreach ($this->chunks as $chunk) {
         $level = $chunk->getLevel();
         if (!isset($levels[$level])) {
             $levels[] = $level;
             if (!$this->server->isLevelLoaded($level)) {
                 if (!$this->server->isLevelGenerated($this->server->loadLevel($level))) {
                     $this->server->generateLevel($level, $this->main->getLevelGenerationSeed());
                 }
                 $this->server->loadLevel($level);
             }
         }
     }
     $this->initializeXEconEntity($main->getXEcon($this->server));
 }
Server