*/ protected $providers = []; 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'])); $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"); } /** * Returns the default format used to generate new worlds. */ public function getDefault() : WritableWorldProviderManagerEntry{ return $this->default; } public function setDefault(WritableWorldProviderManagerEntry $class) : void{ $this->default = $class; } public function addProvider(WorldProviderManagerEntry $providerEntry, string $name, bool $overwrite = false) : void{ $name = strtolower($name); if(!$overwrite && isset($this->providers[$name])){ throw new \InvalidArgumentException("Alias \"$name\" is already assigned"); } $this->providers[$name] = $providerEntry; } /** * Returns a WorldProvider class for this path, or null * * @return WorldProviderManagerEntry[] * @phpstan-return array */ public function getMatchingProviders(string $path) : array{ $result = []; foreach(Utils::stringifyKeys($this->providers) as $alias => $providerEntry){ if($providerEntry->isValid($path)){ $result[$alias] = $providerEntry; } } return $result; } /** * @return WorldProviderManagerEntry[] * @phpstan-return array */ public function getAvailableProviders() : array{ return $this->providers; } /** * Returns a WorldProvider by name, or null if not found */ public function getProviderByName(string $name) : ?WorldProviderManagerEntry{ return $this->providers[trim(strtolower($name))] ?? null; } }