diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 898656ef4..908f978d6 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1000,16 +1000,16 @@ class Server{ $path = $this->getDataPath() . "worlds/" . $name . "/"; - $provider = LevelProviderManager::getProvider($path); + $providerClass = LevelProviderManager::getProvider($path); - if($provider === null){ + if($providerClass === null){ $this->logger->error($this->getLanguage()->translateString("pocketmine.level.loadError", [$name, "Cannot identify format of world"])); return false; } try{ - $level = new Level($this, $name, $path, $provider); + $level = new Level($this, $name, new $providerClass($path)); }catch(\Throwable $e){ $this->logger->error($this->getLanguage()->translateString("pocketmine.level.loadError", [$name, $e->getMessage()])); @@ -1053,16 +1053,16 @@ class Server{ $generator = Generator::getGenerator($this->getLevelType()); } - if(($provider = LevelProviderManager::getProviderByName($this->getProperty("level-settings.default-format", "pmanvil"))) === null){ - $provider = LevelProviderManager::getProviderByName("pmanvil"); + if(($providerClass = LevelProviderManager::getProviderByName($this->getProperty("level-settings.default-format", "pmanvil"))) === null){ + $providerClass = LevelProviderManager::getProviderByName("pmanvil"); } try{ $path = $this->getDataPath() . "worlds/" . $name . "/"; - /** @var LevelProvider $provider */ - $provider::generate($path, $name, $seed, $generator, $options); + /** @var LevelProvider $providerClass */ + $providerClass::generate($path, $name, $seed, $generator, $options); - $level = new Level($this, $name, $path, (string) $provider); + $level = new Level($this, $name, new $providerClass($path)); $this->levels[$level->getId()] = $level; $level->initLevel(); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 77186ce90..80cba0f6b 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -317,27 +317,18 @@ class Level implements ChunkManager, Metadatable{ /** * Init the default level data * - * @param Server $server - * @param string $name - * @param string $path - * @param string $provider Class that extends LevelProvider - * - * @throws \Exception + * @param Server $server + * @param string $name + * @param LevelProvider $provider */ - public function __construct(Server $server, string $name, string $path, string $provider){ + public function __construct(Server $server, string $name, LevelProvider $provider){ $this->blockStates = BlockFactory::getBlockStatesArray(); $this->levelId = static::$levelIdCounter++; $this->blockMetadata = new BlockMetadataStore($this); $this->server = $server; $this->autoSave = $server->getAutoSave(); - /** @var LevelProvider $provider */ - - if(is_subclass_of($provider, LevelProvider::class, true)){ - $this->provider = new $provider($path); - }else{ - throw new LevelException("Provider is not a subclass of LevelProvider"); - } + $this->provider = $provider; $this->displayName = $this->provider->getName(); $this->worldHeight = $this->provider->getWorldHeight();