mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-10-19 04:15:04 +00:00
Convert WorldProviderManager to singleton
This commit is contained in:
@@ -23,6 +23,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace pocketmine\world\format\io;
|
||||
|
||||
use pocketmine\utils\SingletonTrait;
|
||||
use pocketmine\utils\Utils;
|
||||
use pocketmine\world\format\io\leveldb\LevelDB;
|
||||
use pocketmine\world\format\io\region\Anvil;
|
||||
@@ -31,20 +32,22 @@ use pocketmine\world\format\io\region\PMAnvil;
|
||||
use function strtolower;
|
||||
use function trim;
|
||||
|
||||
abstract class WorldProviderManager{
|
||||
final class WorldProviderManager{
|
||||
use SingletonTrait;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
* @phpstan-var array<string, class-string<WorldProvider>>
|
||||
*/
|
||||
protected static $providers = [];
|
||||
protected $providers = [];
|
||||
|
||||
/**
|
||||
* @var string
|
||||
* @phpstan-var class-string<WritableWorldProvider>
|
||||
*/
|
||||
private static $default = LevelDB::class;
|
||||
private $default = LevelDB::class;
|
||||
|
||||
public static function init() : void{
|
||||
public function __construct(){
|
||||
self::addProvider(Anvil::class, "anvil");
|
||||
self::addProvider(McRegion::class, "mcregion");
|
||||
self::addProvider(PMAnvil::class, "pmanvil");
|
||||
@@ -56,8 +59,8 @@ abstract class WorldProviderManager{
|
||||
*
|
||||
* @phpstan-return class-string<WritableWorldProvider>
|
||||
*/
|
||||
public static function getDefault() : string{
|
||||
return self::$default;
|
||||
public function getDefault() : string{
|
||||
return $this->default;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,25 +71,25 @@ abstract class WorldProviderManager{
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public static function setDefault(string $class) : void{
|
||||
public function setDefault(string $class) : void{
|
||||
Utils::testValidInstance($class, WritableWorldProvider::class);
|
||||
|
||||
self::$default = $class;
|
||||
$this->default = $class;
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-param class-string<WorldProvider> $class
|
||||
*/
|
||||
public static function addProvider(string $class, string $name, bool $overwrite = false) : void{
|
||||
public function addProvider(string $class, string $name, bool $overwrite = false) : void{
|
||||
Utils::testValidInstance($class, WorldProvider::class);
|
||||
|
||||
$name = strtolower($name);
|
||||
if(!$overwrite and isset(self::$providers[$name])){
|
||||
if(!$overwrite and isset($this->providers[$name])){
|
||||
throw new \InvalidArgumentException("Alias \"$name\" is already assigned");
|
||||
}
|
||||
|
||||
/** @var WorldProvider $class */
|
||||
self::$providers[$name] = $class;
|
||||
$this->providers[$name] = $class;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,9 +98,9 @@ abstract class WorldProviderManager{
|
||||
* @return string[]
|
||||
* @phpstan-return array<string, class-string<WorldProvider>>
|
||||
*/
|
||||
public static function getMatchingProviders(string $path) : array{
|
||||
public function getMatchingProviders(string $path) : array{
|
||||
$result = [];
|
||||
foreach(self::$providers as $alias => $provider){
|
||||
foreach($this->providers as $alias => $provider){
|
||||
if($provider::isValid($path)){
|
||||
$result[$alias] = $provider;
|
||||
}
|
||||
@@ -109,8 +112,8 @@ abstract class WorldProviderManager{
|
||||
* @return string[]
|
||||
* @phpstan-return array<string, class-string<WorldProvider>>
|
||||
*/
|
||||
public static function getAvailableProviders() : array{
|
||||
return self::$providers;
|
||||
public function getAvailableProviders() : array{
|
||||
return $this->providers;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,7 +121,7 @@ abstract class WorldProviderManager{
|
||||
*
|
||||
* @phpstan-return class-string<WorldProvider>|null
|
||||
*/
|
||||
public static function getProviderByName(string $name) : ?string{
|
||||
return self::$providers[trim(strtolower($name))] ?? null;
|
||||
public function getProviderByName(string $name) : ?string{
|
||||
return $this->providers[trim(strtolower($name))] ?? null;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user