From db6abfb227faf34c20e1f1b74c7266057f3800ce Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 11 May 2022 14:35:20 +0100 Subject: [PATCH] Stop the server if generators specified for new worlds are not valid I thought I did this already in eff856d8e513a1f01eca16ab55bacf6e83399527, but it looks like my brain slipped a gear. Without this change, it's possible to crash the server by specifying an invalid generator for the default world if it doesn't yet exist. --- src/Server.php | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Server.php b/src/Server.php index 7c4202f9e..f1643336b 100644 --- a/src/Server.php +++ b/src/Server.php @@ -1097,6 +1097,7 @@ class Server{ $generatorClass = $getGenerator($generatorName, $generatorOptions, $name); if($generatorClass === null){ + $anyWorldFailedToLoad = true; continue; } $creationOptions->setGeneratorClass($generatorClass); @@ -1133,16 +1134,19 @@ class Server{ $generatorName = $this->configGroup->getConfigString("level-type"); $generatorOptions = $this->configGroup->getConfigString("generator-settings"); $generatorClass = $getGenerator($generatorName, $generatorOptions, $default); - if($generatorClass !== null){ - $creationOptions = WorldCreationOptions::create() - ->setGeneratorClass($generatorClass) - ->setGeneratorOptions($generatorOptions); - $convertedSeed = Generator::convertSeed($this->configGroup->getConfigString("level-seed")); - if($convertedSeed !== null){ - $creationOptions->setSeed($convertedSeed); - } - $this->worldManager->generateWorld($default, $creationOptions); + + if($generatorClass === null){ + $this->getLogger()->emergency($this->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_defaultError())); + return false; } + $creationOptions = WorldCreationOptions::create() + ->setGeneratorClass($generatorClass) + ->setGeneratorOptions($generatorOptions); + $convertedSeed = Generator::convertSeed($this->configGroup->getConfigString("level-seed")); + if($convertedSeed !== null){ + $creationOptions->setSeed($convertedSeed); + } + $this->worldManager->generateWorld($default, $creationOptions); } $world = $this->worldManager->getWorldByName($default);