diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index 769deb5e5..c316915bd 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -35,6 +35,8 @@ use pocketmine\permission\Permission; use pocketmine\Server; use pocketmine\timings\Timings; use pocketmine\timings\TimingsHandler; +use pocketmine\utils\MainLogger; +use pocketmine\utils\TextFormat; /** * Manages all the plugins, Permissions and Permissibles @@ -752,7 +754,17 @@ class PluginManager{ $ignoreCancelled = isset($tags["ignoreCancelled"]) && strtolower($tags["ignoreCancelled"]) === "true"; $parameters = $method->getParameters(); - if(count($parameters) === 1 and $parameters[0]->getClass() instanceof \ReflectionClass and is_subclass_of($parameters[0]->getClass()->getName(), Event::class)){ + try{ + $isHandler = count($parameters) === 1 && $parameters[0]->getClass() instanceof \ReflectionClass && is_subclass_of($parameters[0]->getClass()->getName(), Event::class); + }catch(\ReflectionException $e){ + if(isset($tags["softDepend"]) && !isset($this->plugins[$tags["softDepend"]])){ + MainLogger::getLogger()->debug("Not registering @softDepend listener " . get_class($listener) . "::" . $method->getName() . "(" . $parameters[0]->getType()->getName() . ") because plugin \"" . $tags["softDepend"] . "\" not found"); + continue; + } + + throw $e; + } + if($isHandler){ $class = $parameters[0]->getClass()->getName(); $this->registerEvent($class, $listener, $priority, new MethodEventExecutor($method->getName()), $plugin, $ignoreCancelled); }