From f29e2f7110e5490dfb6b0d1639669b100079e787 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 2 May 2023 15:41:11 +0100 Subject: [PATCH] WorldProviders now accept Loggers --- src/world/WorldManager.php | 10 ++++++---- src/world/format/io/BaseWorldProvider.php | 3 ++- src/world/format/io/FormatConverter.php | 5 ++--- .../format/io/ReadOnlyWorldProviderManagerEntry.php | 4 ++-- src/world/format/io/WorldProviderManager.php | 8 ++++---- src/world/format/io/WorldProviderManagerEntry.php | 2 +- .../format/io/WritableWorldProviderManagerEntry.php | 6 +++--- src/world/format/io/leveldb/LevelDB.php | 4 ++-- tools/convert-world.php | 2 +- 9 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/world/WorldManager.php b/src/world/WorldManager.php index 1124d513d..513cb527f 100644 --- a/src/world/WorldManager.php +++ b/src/world/WorldManager.php @@ -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); diff --git a/src/world/format/io/BaseWorldProvider.php b/src/world/format/io/BaseWorldProvider.php index a1ddb3c8f..7c881ef84 100644 --- a/src/world/format/io/BaseWorldProvider.php +++ b/src/world/format/io/BaseWorldProvider.php @@ -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"); diff --git a/src/world/format/io/FormatConverter.php b/src/world/format/io/FormatConverter.php index 5f93f3a7b..0a12432da 100644 --- a/src/world/format/io/FormatConverter.php +++ b/src/world/format/io/FormatConverter.php @@ -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{ diff --git a/src/world/format/io/ReadOnlyWorldProviderManagerEntry.php b/src/world/format/io/ReadOnlyWorldProviderManagerEntry.php index 2bbc11bf3..b9348179f 100644 --- a/src/world/format/io/ReadOnlyWorldProviderManagerEntry.php +++ b/src/world/format/io/ReadOnlyWorldProviderManagerEntry.php @@ -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); } } diff --git a/src/world/format/io/WorldProviderManager.php b/src/world/format/io/WorldProviderManager.php index 45229e213..8a30bcb57 100644 --- a/src/world/format/io/WorldProviderManager.php +++ b/src/world/format/io/WorldProviderManager.php @@ -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"); } /** diff --git a/src/world/format/io/WorldProviderManagerEntry.php b/src/world/format/io/WorldProviderManagerEntry.php index 96abcd1ea..c3439fd33 100644 --- a/src/world/format/io/WorldProviderManagerEntry.php +++ b/src/world/format/io/WorldProviderManagerEntry.php @@ -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; } diff --git a/src/world/format/io/WritableWorldProviderManagerEntry.php b/src/world/format/io/WritableWorldProviderManagerEntry.php index 2c5b501ed..873b02831 100644 --- a/src/world/format/io/WritableWorldProviderManagerEntry.php +++ b/src/world/format/io/WritableWorldProviderManagerEntry.php @@ -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); } /** diff --git a/src/world/format/io/leveldb/LevelDB.php b/src/world/format/io/leveldb/LevelDB.php index fa38bf4b8..e6ba569cc 100644 --- a/src/world/format/io/leveldb/LevelDB.php +++ b/src/world/format/io/leveldb/LevelDB.php @@ -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); diff --git a/tools/convert-world.php b/tools/convert-world.php index b079a7542..75483c6af 100644 --- a/tools/convert-world.php +++ b/tools/convert-world.php @@ -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();