WorldManager: Check generator options of worlds before loading them, too

This commit is contained in:
Dylan K. Taylor 2021-10-11 17:44:38 +01:00
parent 34f54750c8
commit 8fd475f87b
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D

View File

@ -38,6 +38,7 @@ use pocketmine\world\format\io\FormatConverter;
use pocketmine\world\format\io\WorldProviderManager;
use pocketmine\world\format\io\WritableWorldProvider;
use pocketmine\world\generator\GeneratorManager;
use pocketmine\world\generator\InvalidGeneratorOptionsException;
use Webmozart\PathUtil\Path;
use function array_keys;
use function array_shift;
@ -221,13 +222,27 @@ class WorldManager{
return false;
}
if(GeneratorManager::getInstance()->getGenerator($provider->getWorldData()->getGenerator()) === null){
$generatorEntry = GeneratorManager::getInstance()->getGenerator($provider->getWorldData()->getGenerator());
if($generatorEntry === null){
$this->server->getLogger()->error($this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_loadError(
$name,
KnownTranslationFactory::pocketmine_level_unknownGenerator($provider->getWorldData()->getGenerator())
)));
return false;
}
try{
$generatorEntry->validateGeneratorOptions($provider->getWorldData()->getGeneratorOptions());
}catch(InvalidGeneratorOptionsException $e){
$this->server->getLogger()->error($this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_loadError(
$name,
KnownTranslationFactory::pocketmine_level_invalidGeneratorOptions(
$provider->getWorldData()->getGeneratorOptions(),
$provider->getWorldData()->getGenerator(),
$e->getMessage()
)
)));
return false;
}
if(!($provider instanceof WritableWorldProvider)){
if(!$autoUpgrade){
throw new UnsupportedWorldFormatException("World \"$name\" is in an unsupported format and needs to be upgraded");