Level: __construct() now accepts a LevelProvider object instead of string, string

This is made possible by the removal of LevelProvider dependence on their Levels, and furthers the goal of #2024.
This commit is contained in:
Dylan K. Taylor
2018-05-01 18:43:11 +01:00
parent 53c35aaa1d
commit 2e7db552dc
2 changed files with 13 additions and 22 deletions

View File

@ -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();