diff --git a/src/pocketmine/permission/PermissibleBase.php b/src/pocketmine/permission/PermissibleBase.php index 3bfc3fa7a..7307a07ae 100644 --- a/src/pocketmine/permission/PermissibleBase.php +++ b/src/pocketmine/permission/PermissibleBase.php @@ -166,9 +166,7 @@ class PermissibleBase implements Permissible{ public function clearPermissions(){ $permManager = PermissionManager::getInstance(); - foreach(array_keys($this->permissions) as $name){ - $permManager->unsubscribeFromPermission($name, $this->parent ?? $this); - } + $permManager->unsubscribeFromAllPermissions($this->parent ?? $this); $permManager->unsubscribeFromDefaultPerms(false, $this->parent ?? $this); $permManager->unsubscribeFromDefaultPerms(true, $this->parent ?? $this); diff --git a/src/pocketmine/permission/PermissionManager.php b/src/pocketmine/permission/PermissionManager.php index b1a701164..37860878a 100644 --- a/src/pocketmine/permission/PermissionManager.php +++ b/src/pocketmine/permission/PermissionManager.php @@ -160,6 +160,18 @@ class PermissionManager{ } } + /** + * @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 * diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index 5b406dbeb..b0bc7001e 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -475,6 +475,16 @@ class PluginManager{ PermissionManager::getInstance()->unsubscribeFromPermission($permission, $permissible); } + /** + * @deprecated + * @see PermissionManager::unsubscribeFromAllPermissions() + * + * @param Permissible $permissible + */ + public function unsubscribeFromAllPermissions(Permissible $permissible) : void{ + PermissionManager::getInstance()->unsubscribeFromAllPermissions($permissible); + } + /** * @deprecated * @see PermissionManager::getPermissionSubscriptions()