From 050e972adda31208991f8df008e42d96146eda15 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 4 Oct 2018 12:49:46 +0100 Subject: [PATCH] Clean up default level provider management --- src/pocketmine/Server.php | 13 +++++----- .../level/format/io/LevelProviderManager.php | 26 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 3af550ed2..f52f5199c 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1080,12 +1080,7 @@ class Server{ $generator = GeneratorManager::getGenerator($this->getLevelType()); } - if(($providerClass = LevelProviderManager::getProviderByName($this->getProperty("level-settings.default-format", "pmanvil"))) === null){ - $providerClass = LevelProviderManager::getProviderByName("pmanvil"); - if($providerClass === null){ - throw new \InvalidStateException("Default level provider has not been registered"); - } - } + $providerClass = LevelProviderManager::getDefault(); $path = $this->getDataPath() . "worlds/" . $name . "/"; /** @var LevelProvider $providerClass */ @@ -1677,6 +1672,12 @@ class Server{ $this->network->registerInterface(new RakLibInterface($this)); LevelProviderManager::init(); + if(($format = LevelProviderManager::getProviderByName($formatName = (string) $this->getProperty("level-settings.default-format"))) !== null){ + LevelProviderManager::setDefault($format); + }elseif($formatName !== ""){ + $this->logger->warning($this->language->translateString("pocketmine.level.badDefaultFormat", [$formatName])); + } + if(extension_loaded("leveldb")){ $this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable")); } diff --git a/src/pocketmine/level/format/io/LevelProviderManager.php b/src/pocketmine/level/format/io/LevelProviderManager.php index 04f30f168..437721816 100644 --- a/src/pocketmine/level/format/io/LevelProviderManager.php +++ b/src/pocketmine/level/format/io/LevelProviderManager.php @@ -32,6 +32,9 @@ use pocketmine\utils\Utils; abstract class LevelProviderManager{ protected static $providers = []; + /** @var string|LevelProvider */ + private static $default = PMAnvil::class; + public static function init() : void{ self::addProvider(Anvil::class); self::addProvider(McRegion::class); @@ -39,6 +42,29 @@ abstract class LevelProviderManager{ self::addProvider(LevelDB::class); } + /** + * Returns the default format used to generate new levels. + * + * @return string + */ + public static function getDefault() : string{ + return self::$default; + } + + /** + * Sets the default format. + * + * @param string $class Class extending LevelProvider + * + * @throws \InvalidArgumentException + */ + public static function setDefault(string $class) : void{ + Utils::testValidInstance($class, LevelProvider::class); + + self::addProvider($class); + self::$default = $class; + } + /** * @param string $class *