diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index e4cdb7450..f2ab9819b 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -50,6 +50,7 @@ use pocketmine\lang\Language; use pocketmine\lang\LanguageNotFoundException; use pocketmine\lang\TextContainer; use pocketmine\level\biome\Biome; +use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\format\io\LevelProvider; use pocketmine\level\format\io\LevelProviderManager; use pocketmine\level\generator\Generator; @@ -1044,8 +1045,13 @@ class Server{ } $providerClass = array_shift($providers); - /** @see LevelProvider::__construct() */ - $level = new Level($this, $name, new $providerClass($path)); + try{ + /** @see LevelProvider::__construct() */ + $level = new Level($this, $name, new $providerClass($path)); + }catch(UnsupportedLevelFormatException $e){ + $this->logger->error($this->language->translateString("pocketmine.level.loadError", [$name, $e->getMessage()])); + return false; + } $this->levels[$level->getId()] = $level; diff --git a/src/pocketmine/level/format/io/data/BedrockLevelData.php b/src/pocketmine/level/format/io/data/BedrockLevelData.php index 320d101a5..175aafe78 100644 --- a/src/pocketmine/level/format/io/data/BedrockLevelData.php +++ b/src/pocketmine/level/format/io/data/BedrockLevelData.php @@ -23,10 +23,10 @@ declare(strict_types=1); namespace pocketmine\level\format\io\data; +use pocketmine\level\format\io\exception\UnsupportedLevelFormatException; use pocketmine\level\generator\Flat; use pocketmine\level\generator\GeneratorManager; use pocketmine\level\Level; -use pocketmine\level\LevelException; use pocketmine\nbt\LittleEndianNBTStream; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; @@ -103,7 +103,7 @@ class BedrockLevelData extends BaseNbtLevelData{ if($levelData instanceof CompoundTag){ $version = $levelData->getInt("StorageVersion", INT32_MAX, true); if($version > self::CURRENT_STORAGE_VERSION){ - throw new LevelException("Specified LevelDB world format version ($version) is not supported by " . \pocketmine\NAME); + throw new UnsupportedLevelFormatException("Specified LevelDB world format version ($version) is not supported by " . \pocketmine\NAME); } return $levelData; @@ -125,9 +125,9 @@ class BedrockLevelData extends BaseNbtLevelData{ $this->compoundTag->setString("generatorOptions", ""); break; case self::GENERATOR_LIMITED: - throw new LevelException("Limited worlds are not currently supported"); + throw new UnsupportedLevelFormatException("Limited worlds are not currently supported"); default: - throw new LevelException("Unknown LevelDB world format type, this level cannot be loaded"); + throw new UnsupportedLevelFormatException("Unknown LevelDB world format type, this level cannot be loaded"); } }else{ $this->compoundTag->setString("generatorName", "default"); diff --git a/src/pocketmine/level/format/io/exception/UnsupportedLevelFormatException.php b/src/pocketmine/level/format/io/exception/UnsupportedLevelFormatException.php new file mode 100644 index 000000000..4e0dc310c --- /dev/null +++ b/src/pocketmine/level/format/io/exception/UnsupportedLevelFormatException.php @@ -0,0 +1,28 @@ +