diff --git a/src/pocketmine/level/format/io/LevelProviderManager.php b/src/pocketmine/level/format/io/LevelProviderManager.php index b79184716..1b42a5eda 100644 --- a/src/pocketmine/level/format/io/LevelProviderManager.php +++ b/src/pocketmine/level/format/io/LevelProviderManager.php @@ -44,9 +44,18 @@ abstract class LevelProviderManager{ * @throws \InvalidArgumentException */ public static function addProvider(string $class){ - if(!is_subclass_of($class, LevelProvider::class)){ - throw new \InvalidArgumentException("Class is not a subclass of LevelProvider"); + try{ + $reflection = new \ReflectionClass($class); + }catch(\ReflectionException $e){ + throw new \InvalidArgumentException("Class $class does not exist"); } + if(!$reflection->implementsInterface(LevelProvider::class)){ + throw new \InvalidArgumentException("Class $class does not implement " . LevelProvider::class); + } + if(!$reflection->isInstantiable()){ + throw new \InvalidArgumentException("Class $class cannot be constructed"); + } + /** @var LevelProvider $class */ self::$providers[strtolower($class::getProviderName())] = $class; }