diff --git a/src/pocketmine/permission/PermissibleBase.php b/src/pocketmine/permission/PermissibleBase.php index bec0fab46..a41da057f 100644 --- a/src/pocketmine/permission/PermissibleBase.php +++ b/src/pocketmine/permission/PermissibleBase.php @@ -166,9 +166,7 @@ class PermissibleBase implements Permissible{ public function clearPermissions(){ $pluginManager = Server::getInstance()->getPluginManager(); - foreach(array_keys($this->permissions) as $name){ - $pluginManager->unsubscribeFromPermission($name, $this->parent ?? $this); - } + $pluginManager->unsubscribeFromAllPermissions($this->parent ?? $this); $pluginManager->unsubscribeFromDefaultPerms(false, $this->parent ?? $this); $pluginManager->unsubscribeFromDefaultPerms(true, $this->parent ?? $this); diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index df0e3afb9..e11af6efe 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -534,6 +534,18 @@ class PluginManager{ } } + /** + * @param Permissible $permissible + */ + public function unsubscribeFromAllPermissions(Permissible $permissible) : void{ + foreach($this->permSubs as $permission => &$subs){ + unset($subs[spl_object_hash($permissible)]); + if(empty($subs)){ + unset($this->permSubs[$permission]); + } + } + } + /** * @param string $permission *