WorldProviders now accept Loggers

This commit is contained in:
Dylan K. Taylor 2023-05-02 15:41:11 +01:00
parent d0d263191d
commit f29e2f7110
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
9 changed files with 23 additions and 21 deletions

View File

@ -197,7 +197,7 @@ class WorldManager{
$providerClass = array_shift($providers);
try{
$provider = $providerClass->fromPath($path);
$provider = $providerClass->fromPath($path, new \PrefixedLogger($this->server->getLogger(), "World Provider: $name"));
}catch(CorruptedWorldException $e){
$this->server->getLogger()->error($this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_loadError(
$name,
@ -239,8 +239,10 @@ class WorldManager{
}
$this->server->getLogger()->notice($this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_conversion_start($name)));
$converter = new FormatConverter($provider, $this->providerManager->getDefault(), Path::join($this->server->getDataPath(), "backups", "worlds"), $this->server->getLogger());
$provider = $converter->execute();
$providerClass = $this->providerManager->getDefault();
$converter = new FormatConverter($provider, $providerClass, Path::join($this->server->getDataPath(), "backups", "worlds"), $this->server->getLogger());
$converter->execute();
$provider = $providerClass->fromPath($path, new \PrefixedLogger($this->server->getLogger(), "World Provider: $name"));
$this->server->getLogger()->notice($this->server->getLanguage()->translate(KnownTranslationFactory::pocketmine_level_conversion_finish($name, $converter->getBackupPath())));
}
@ -270,7 +272,7 @@ class WorldManager{
$path = $this->getWorldPath($name);
$providerEntry->generate($path, $name, $options);
$world = new World($this->server, $name, $providerEntry->fromPath($path), $this->server->getAsyncPool());
$world = new World($this->server, $name, $providerEntry->fromPath($path, new \PrefixedLogger($this->server->getLogger(), "World Provider: $name")), $this->server->getAsyncPool());
$this->worlds[$world->getId()] = $world;
$world->setAutoSave($this->autoSave);

View File

@ -41,7 +41,8 @@ abstract class BaseWorldProvider implements WorldProvider{
protected BlockStateSerializer $blockStateSerializer;
public function __construct(
protected string $path
protected string $path,
protected \Logger $logger
){
if(!file_exists($path)){
throw new WorldException("World does not exist");

View File

@ -67,7 +67,7 @@ class FormatConverter{
return $this->backupPath;
}
public function execute() : WritableWorldProvider{
public function execute() : void{
$new = $this->generateNew();
$this->populateLevelData($new->getWorldData());
@ -91,7 +91,6 @@ class FormatConverter{
}
$this->logger->info("Conversion completed");
return $this->newProvider->fromPath($path);
}
private function generateNew() : WritableWorldProvider{
@ -113,7 +112,7 @@ class FormatConverter{
->setDifficulty($data->getDifficulty())
);
return $this->newProvider->fromPath($convertedOutput);
return $this->newProvider->fromPath($convertedOutput, $this->logger);
}
private function populateLevelData(WorldData $data) : void{

View File

@ -24,7 +24,7 @@ declare(strict_types=1);
namespace pocketmine\world\format\io;
/**
* @phpstan-type FromPath \Closure(string $path) : WorldProvider
* @phpstan-type FromPath \Closure(string $path, \Logger $logger) : WorldProvider
*/
class ReadOnlyWorldProviderManagerEntry extends WorldProviderManagerEntry{
@ -36,5 +36,5 @@ class ReadOnlyWorldProviderManagerEntry extends WorldProviderManagerEntry{
parent::__construct($isValid);
}
public function fromPath(string $path) : WorldProvider{ return ($this->fromPath)($path); }
public function fromPath(string $path, \Logger $logger) : WorldProvider{ return ($this->fromPath)($path, $logger); }
}

View File

@ -41,13 +41,13 @@ final class WorldProviderManager{
private WritableWorldProviderManagerEntry $default;
public function __construct(){
$leveldb = new WritableWorldProviderManagerEntry(\Closure::fromCallable([LevelDB::class, 'isValid']), fn(string $path) => new LevelDB($path), \Closure::fromCallable([LevelDB::class, 'generate']));
$leveldb = new WritableWorldProviderManagerEntry(\Closure::fromCallable([LevelDB::class, 'isValid']), fn(string $path, \Logger $logger) => new LevelDB($path, $logger), \Closure::fromCallable([LevelDB::class, 'generate']));
$this->default = $leveldb;
$this->addProvider($leveldb, "leveldb");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([Anvil::class, 'isValid']), fn(string $path) => new Anvil($path)), "anvil");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([McRegion::class, 'isValid']), fn(string $path) => new McRegion($path)), "mcregion");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([PMAnvil::class, 'isValid']), fn(string $path) => new PMAnvil($path)), "pmanvil");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([Anvil::class, 'isValid']), fn(string $path, \Logger $logger) => new Anvil($path, $logger)), "anvil");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([McRegion::class, 'isValid']), fn(string $path, \Logger $logger) => new McRegion($path, $logger)), "mcregion");
$this->addProvider(new ReadOnlyWorldProviderManagerEntry(\Closure::fromCallable([PMAnvil::class, 'isValid']), fn(string $path, \Logger $logger) => new PMAnvil($path, $logger)), "pmanvil");
}
/**

View File

@ -46,5 +46,5 @@ abstract class WorldProviderManagerEntry{
* @throws CorruptedWorldException
* @throws UnsupportedWorldFormatException
*/
abstract public function fromPath(string $path) : WorldProvider;
abstract public function fromPath(string $path, \Logger $logger) : WorldProvider;
}

View File

@ -26,7 +26,7 @@ namespace pocketmine\world\format\io;
use pocketmine\world\WorldCreationOptions;
/**
* @phpstan-type FromPath \Closure(string $path) : WritableWorldProvider
* @phpstan-type FromPath \Closure(string $path, \Logger $logger) : WritableWorldProvider
* @phpstan-type Generate \Closure(string $path, string $name, WorldCreationOptions $options) : void
*/
final class WritableWorldProviderManagerEntry extends WorldProviderManagerEntry{
@ -43,8 +43,8 @@ final class WritableWorldProviderManagerEntry extends WorldProviderManagerEntry{
parent::__construct($isValid);
}
public function fromPath(string $path) : WritableWorldProvider{
return ($this->fromPath)($path);
public function fromPath(string $path, \Logger $logger) : WritableWorldProvider{
return ($this->fromPath)($path, $logger);
}
/**

View File

@ -102,9 +102,9 @@ class LevelDB extends BaseWorldProvider implements WritableWorldProvider{
]);
}
public function __construct(string $path){
public function __construct(string $path, \Logger $logger){
self::checkForLevelDBExtension();
parent::__construct($path);
parent::__construct($path, $logger);
try{
$this->db = self::createDB($path);

View File

@ -74,7 +74,7 @@ if(count($oldProviderClasses) > 1){
exit(1);
}
$oldProviderClass = array_shift($oldProviderClasses);
$oldProvider = $oldProviderClass->fromPath($inputPath);
$oldProvider = $oldProviderClass->fromPath($inputPath, new \PrefixedLogger(\GlobalLogger::get(), "Old World Provider"));
$converter = new FormatConverter($oldProvider, $writableFormats[$args["format"]], $backupPath, GlobalLogger::get());
$converter->execute();