mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 08:44:01 +00:00
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:
parent
53c35aaa1d
commit
2e7db552dc
@ -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();
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user