Clean up default level provider management

This commit is contained in:
Dylan K. Taylor 2018-10-04 12:49:46 +01:00
parent 23132b899c
commit 050e972add
2 changed files with 33 additions and 6 deletions

View File

@ -1080,12 +1080,7 @@ class Server{
$generator = GeneratorManager::getGenerator($this->getLevelType()); $generator = GeneratorManager::getGenerator($this->getLevelType());
} }
if(($providerClass = LevelProviderManager::getProviderByName($this->getProperty("level-settings.default-format", "pmanvil"))) === null){ $providerClass = LevelProviderManager::getDefault();
$providerClass = LevelProviderManager::getProviderByName("pmanvil");
if($providerClass === null){
throw new \InvalidStateException("Default level provider has not been registered");
}
}
$path = $this->getDataPath() . "worlds/" . $name . "/"; $path = $this->getDataPath() . "worlds/" . $name . "/";
/** @var LevelProvider $providerClass */ /** @var LevelProvider $providerClass */
@ -1677,6 +1672,12 @@ class Server{
$this->network->registerInterface(new RakLibInterface($this)); $this->network->registerInterface(new RakLibInterface($this));
LevelProviderManager::init(); 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")){ if(extension_loaded("leveldb")){
$this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable")); $this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable"));
} }

View File

@ -32,6 +32,9 @@ use pocketmine\utils\Utils;
abstract class LevelProviderManager{ abstract class LevelProviderManager{
protected static $providers = []; protected static $providers = [];
/** @var string|LevelProvider */
private static $default = PMAnvil::class;
public static function init() : void{ public static function init() : void{
self::addProvider(Anvil::class); self::addProvider(Anvil::class);
self::addProvider(McRegion::class); self::addProvider(McRegion::class);
@ -39,6 +42,29 @@ abstract class LevelProviderManager{
self::addProvider(LevelDB::class); 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 * @param string $class
* *