diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 603cffb58..fb785553d 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -363,7 +363,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 = GeneratorManager::getGenerator($this->provider->getLevelData()->getGenerator()); + $this->generator = GeneratorManager::getGenerator($this->provider->getLevelData()->getGenerator(), true); //TODO: validate generator options $this->folderName = $name; diff --git a/src/pocketmine/level/LevelManager.php b/src/pocketmine/level/LevelManager.php index bae08a0e1..2ec9322c2 100644 --- a/src/pocketmine/level/LevelManager.php +++ b/src/pocketmine/level/LevelManager.php @@ -33,6 +33,7 @@ use pocketmine\level\format\io\LevelProvider; use pocketmine\level\format\io\LevelProviderManager; use pocketmine\level\format\io\WritableLevelProvider; use pocketmine\level\generator\Generator; +use pocketmine\level\generator\GeneratorManager; use pocketmine\level\generator\normal\Normal; use pocketmine\Server; use pocketmine\timings\Timings; @@ -217,10 +218,16 @@ class LevelManager{ $providerClass = array_shift($providers); /** - * @var LevelProvider + * @var LevelProvider $provider * @see LevelProvider::__construct() */ $provider = new $providerClass($path); + try{ + GeneratorManager::getGenerator($provider->getLevelData()->getGenerator(), true); + }catch(\InvalidArgumentException $e){ + $this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.level.loadError", [$name, "Unknown generator \"" . $provider->getLevelData()->getGenerator() . "\""])); + return false; + } if(!($provider instanceof WritableLevelProvider)){ if(!$autoUpgrade){ throw new LevelException("World \"$name\" is in an unsupported format and needs to be upgraded"); diff --git a/src/pocketmine/level/generator/GeneratorManager.php b/src/pocketmine/level/generator/GeneratorManager.php index ee61cecd0..765499ab3 100644 --- a/src/pocketmine/level/generator/GeneratorManager.php +++ b/src/pocketmine/level/generator/GeneratorManager.php @@ -74,14 +74,19 @@ final class GeneratorManager{ * Returns a class name of a registered Generator matching the given name. * * @param string $name + * @param bool $throwOnMissing @deprecated this is for backwards compatibility only * * @return string|Generator Name of class that extends Generator (not an actual Generator object) + * @throws \InvalidArgumentException if the generator type isn't registered */ - public static function getGenerator(string $name){ + public static function getGenerator(string $name, bool $throwOnMissing = false){ if(isset(self::$list[$name = strtolower($name)])){ return self::$list[$name]; } + if($throwOnMissing){ + throw new \InvalidArgumentException("Alias \"$name\" does not map to any known generator"); + } return Normal::class; }