diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index e2f035e76..0cdf7046b 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -51,6 +51,7 @@ use pocketmine\level\biome\Biome; use pocketmine\level\format\io\LevelProvider; use pocketmine\level\format\io\LevelProviderManager; use pocketmine\level\generator\Generator; +use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; use pocketmine\level\LevelException; use pocketmine\metadata\EntityMetadataStore; @@ -1074,7 +1075,7 @@ class Server{ } if(!($generator !== null and class_exists($generator, true) and is_subclass_of($generator, Generator::class))){ - $generator = Generator::getGenerator($this->getLevelType()); + $generator = GeneratorManager::getGenerator($this->getLevelType()); } if(($providerClass = LevelProviderManager::getProviderByName($this->getProperty("level-settings.default-format", "pmanvil"))) === null){ @@ -1662,7 +1663,7 @@ class Server{ $this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable")); } - Generator::registerDefaultGenerators(); + GeneratorManager::registerDefaultGenerators(); foreach((array) $this->getProperty("worlds", []) as $name => $options){ if(!is_array($options)){ @@ -1678,12 +1679,12 @@ class Server{ if(isset($options["generator"])){ $generatorOptions = explode(":", $options["generator"]); - $generator = Generator::getGenerator(array_shift($generatorOptions)); + $generator = GeneratorManager::getGenerator(array_shift($generatorOptions)); if(count($options) > 0){ $options["preset"] = implode(":", $generatorOptions); } }else{ - $generator = Generator::getGenerator("default"); + $generator = GeneratorManager::getGenerator("default"); } $this->generateLevel($name, $seed, $generator, $options); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 86c627264..01a57634a 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -51,6 +51,7 @@ use pocketmine\level\format\io\BaseLevelProvider; use pocketmine\level\format\io\ChunkRequestTask; use pocketmine\level\format\io\LevelProvider; use pocketmine\level\generator\Generator; +use pocketmine\level\generator\GeneratorManager; use pocketmine\level\generator\GeneratorRegisterTask; use pocketmine\level\generator\GeneratorUnregisterTask; use pocketmine\level\generator\PopulationTask; @@ -331,7 +332,7 @@ class Level implements ChunkManager, Metadatable{ $this->worldHeight = $this->provider->getWorldHeight(); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.level.preparing", [$this->displayName])); - $this->generator = Generator::getGenerator($this->provider->getGenerator()); + $this->generator = GeneratorManager::getGenerator($this->provider->getGenerator()); $this->folderName = $name; diff --git a/src/pocketmine/level/format/io/leveldb/LevelDB.php b/src/pocketmine/level/format/io/leveldb/LevelDB.php index d3baa7651..1cd8b57ac 100644 --- a/src/pocketmine/level/format/io/leveldb/LevelDB.php +++ b/src/pocketmine/level/format/io/leveldb/LevelDB.php @@ -29,7 +29,7 @@ use pocketmine\level\format\io\ChunkUtils; use pocketmine\level\format\io\exception\UnsupportedChunkFormatException; use pocketmine\level\format\SubChunk; use pocketmine\level\generator\Flat; -use pocketmine\level\generator\Generator; +use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; use pocketmine\level\LevelException; use pocketmine\nbt\LittleEndianNBTStream; @@ -212,7 +212,7 @@ class LevelDB extends BaseLevelProvider{ //Additional PocketMine-MP fields new CompoundTag("GameRules", []), new ByteTag("hardcore", ($options["hardcore"] ?? false) === true ? 1 : 0), - new StringTag("generatorName", Generator::getGeneratorName($generator)), + new StringTag("generatorName", GeneratorManager::getGeneratorName($generator)), new StringTag("generatorOptions", $options["preset"] ?? "") ]); diff --git a/src/pocketmine/level/format/io/region/McRegion.php b/src/pocketmine/level/format/io/region/McRegion.php index 6c98dc67d..88a47ce68 100644 --- a/src/pocketmine/level/format/io/region/McRegion.php +++ b/src/pocketmine/level/format/io/region/McRegion.php @@ -28,7 +28,7 @@ use pocketmine\level\format\ChunkException; use pocketmine\level\format\io\BaseLevelProvider; use pocketmine\level\format\io\ChunkUtils; use pocketmine\level\format\SubChunk; -use pocketmine\level\generator\Generator; +use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; use pocketmine\nbt\BigEndianNBTStream; use pocketmine\nbt\NBT; @@ -242,7 +242,7 @@ class McRegion extends BaseLevelProvider{ new LongTag("RandomSeed", $seed), new LongTag("SizeOnDisk", 0), new LongTag("Time", 0), - new StringTag("generatorName", Generator::getGeneratorName($generator)), + new StringTag("generatorName", GeneratorManager::getGeneratorName($generator)), new StringTag("generatorOptions", $options["preset"] ?? ""), new StringTag("LevelName", $name), new CompoundTag("GameRules", []) diff --git a/src/pocketmine/level/generator/Generator.php b/src/pocketmine/level/generator/Generator.php index d2a5fbdda..0f1aafa19 100644 --- a/src/pocketmine/level/generator/Generator.php +++ b/src/pocketmine/level/generator/Generator.php @@ -27,61 +27,10 @@ declare(strict_types=1); namespace pocketmine\level\generator; use pocketmine\level\ChunkManager; -use pocketmine\level\generator\hell\Nether; -use pocketmine\level\generator\normal\Normal; use pocketmine\math\Vector3; use pocketmine\utils\Random; abstract class Generator{ - private static $list = []; - - public static function registerDefaultGenerators() : void{ - self::addGenerator(Flat::class, "flat"); - self::addGenerator(Normal::class, "normal"); - self::addGenerator(Normal::class, "default"); - self::addGenerator(Nether::class, "hell"); - self::addGenerator(Nether::class, "nether"); - } - - public static function addGenerator($object, $name) : bool{ - if(is_subclass_of($object, Generator::class) and !isset(Generator::$list[$name = strtolower($name)])){ - Generator::$list[$name] = $object; - - return true; - } - - return false; - } - - /** - * @return string[] - */ - public static function getGeneratorList() : array{ - return array_keys(Generator::$list); - } - - /** - * @param $name - * - * @return string|Generator Name of class that extends Generator (not an actual Generator object) - */ - public static function getGenerator($name){ - if(isset(Generator::$list[$name = strtolower($name)])){ - return Generator::$list[$name]; - } - - return Normal::class; - } - - public static function getGeneratorName($class){ - foreach(Generator::$list as $name => $c){ - if($c === $class){ - return $name; - } - } - - return "unknown"; - } abstract public function __construct(array $settings = []); diff --git a/src/pocketmine/level/generator/GeneratorManager.php b/src/pocketmine/level/generator/GeneratorManager.php new file mode 100644 index 000000000..8646454e8 --- /dev/null +++ b/src/pocketmine/level/generator/GeneratorManager.php @@ -0,0 +1,84 @@ + $c){ + if($c === $class){ + return $name; + } + } + + return "unknown"; + } + + private function __construct(){ + //NOOP + } +}