From 26ec562fbf41cbc7d207627f92a3d092f31a265c Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Fri, 1 Aug 2014 12:24:08 +0200 Subject: [PATCH] Added worlds directive to pocketmine.yml to load extra worlds or use a plugin-provided generator --- src/pocketmine/Server.php | 19 ++++++++++++++++++- src/pocketmine/level/generator/Generator.php | 4 ++-- src/pocketmine/resources/pocketmine.yml | 11 +++++++++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 575bae28f..f4467c220 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1034,7 +1034,7 @@ class Server{ * * @return bool */ - public function generateLevel($name, $seed = null, $generator = null, array $options = []){ + public function generateLevel($name, $seed = null, $generator = null, $options = []){ if(trim($name) === "" or $this->isLevelGenerated($name)){ return false; } @@ -1509,6 +1509,23 @@ class Server{ Generator::addGenerator("pocketmine\\level\\generator\\Normal", "normal"); Generator::addGenerator("pocketmine\\level\\generator\\Normal", "default"); + foreach($this->getProperty("worlds", []) as $name => $worldSetting){ + if($this->loadLevel($name) === false){ + $seed = $this->getProperty("worlds.$name.seed", time()); + $options = explode(":", $this->getProperty("worlds.$name.generator", Generator::getGenerator("default"))); + $generator = Generator::getGenerator(array_shift($options)); + if(count($options) > 0){ + $options = [ + "preset" => implode(":", $options), + ]; + }else{ + $options = []; + } + + $this->generateLevel($name, $seed, $generator, $options); + } + } + if($this->getDefaultLevel() === null){ $default = $this->getConfigString("level-name", "world"); if(trim($default) == ""){ diff --git a/src/pocketmine/level/generator/Generator.php b/src/pocketmine/level/generator/Generator.php index 38a524a10..1f7b44543 100644 --- a/src/pocketmine/level/generator/Generator.php +++ b/src/pocketmine/level/generator/Generator.php @@ -30,7 +30,7 @@ abstract class Generator{ private static $list = []; public static function addGenerator($object, $name){ - if(is_subclass_of($object, "pocketmine\\level\\generator\\Generator") and !isset(Generator::$list[$name])){ + if(is_subclass_of($object, "pocketmine\\level\\generator\\Generator") and !isset(Generator::$list[$name = strtolower($name)])){ Generator::$list[$name] = $object; return true; @@ -40,7 +40,7 @@ abstract class Generator{ } public static function getGenerator($name){ - if(isset(Generator::$list[$name])){ + if(isset(Generator::$list[$name = strtolower($name)])){ return Generator::$list[$name]; } diff --git a/src/pocketmine/resources/pocketmine.yml b/src/pocketmine/resources/pocketmine.yml index 6cddf9198..715652e75 100644 --- a/src/pocketmine/resources/pocketmine.yml +++ b/src/pocketmine/resources/pocketmine.yml @@ -78,6 +78,13 @@ auto-updater: host: www.pocketmine.net aliases: - #Examples + #Examples: #showtheversion: version - #savestop: [save-all, stop] \ No newline at end of file + #savestop: [save-all, stop] + +worlds: + #These settings will override the generator set in server.properties and allows loading multiple levels + #Example: + #world: + # seed: 404 + # generator: FLAT:2;7,59x1,3x3,2;1;decoration(treecount=80 grasscount=45) \ No newline at end of file