diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 1b5ad2351..c54708068 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -148,6 +148,7 @@ use pocketmine\network\SourceInterface; use pocketmine\permission\PermissibleBase; use pocketmine\permission\PermissionAttachment; use pocketmine\permission\PermissionAttachmentInfo; +use pocketmine\permission\PermissionManager; use pocketmine\plugin\Plugin; use pocketmine\resourcepacks\ResourcePack; use pocketmine\tile\ItemFrame; @@ -639,8 +640,9 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ } public function recalculatePermissions(){ - $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this); - $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); + $permManager = PermissionManager::getInstance(); + $permManager->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this); + $permManager->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); if($this->perm === null){ return; @@ -649,10 +651,10 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->perm->recalculatePermissions(); if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){ - $this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this); + $permManager->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this); } if($this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){ - $this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); + $permManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); } if($this->spawned){ @@ -1020,10 +1022,10 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->sendPlayStatus(PlayStatusPacket::PLAYER_SPAWN); if($this->hasPermission(Server::BROADCAST_CHANNEL_USERS)){ - $this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this); + PermissionManager::getInstance()->subscribeToPermission(Server::BROADCAST_CHANNEL_USERS, $this); } if($this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){ - $this->server->getPluginManager()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); + PermissionManager::getInstance()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); } $this->server->getPluginManager()->callEvent($ev = new PlayerJoinEvent($this, @@ -3373,8 +3375,8 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $this->interface->close($this, $notify ? $reason : ""); $this->sessionAdapter = null; - $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this); - $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); + PermissionManager::getInstance()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this); + PermissionManager::getInstance()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this); $this->stopSleep(); diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 7d7a69c8a..3ee7a1e04 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -82,6 +82,7 @@ use pocketmine\network\rcon\RCON; use pocketmine\network\upnp\UPnP; use pocketmine\permission\BanList; use pocketmine\permission\DefaultPermissions; +use pocketmine\permission\PermissionManager; use pocketmine\plugin\PharPluginLoader; use pocketmine\plugin\Plugin; use pocketmine\plugin\PluginLoadOrder; @@ -1624,7 +1625,7 @@ class Server{ $this->resourceManager = new ResourcePackManager($this->getDataPath() . "resource_packs" . DIRECTORY_SEPARATOR, $this->logger); $this->pluginManager = new PluginManager($this, $this->commandMap, ((bool) $this->getProperty("plugins.legacy-data-dir", true)) ? null : $this->getDataPath() . "plugin_data" . DIRECTORY_SEPARATOR); - $this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender); + PermissionManager::getInstance()->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender); $this->profilingTickRate = (float) $this->getProperty("settings.profile-report-trigger", 20); $this->pluginManager->registerInterface(new PharPluginLoader($this->autoloader)); $this->pluginManager->registerInterface(new ScriptPluginLoader()); @@ -1733,7 +1734,7 @@ class Server{ if(!is_array($recipients)){ /** @var Player[] $recipients */ $recipients = []; - foreach($this->pluginManager->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ + foreach(PermissionManager::getInstance()->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ if($permissible instanceof Player and $permissible->hasPermission(self::BROADCAST_CHANNEL_USERS)){ $recipients[spl_object_hash($permissible)] = $permissible; // do not send messages directly, or some might be repeated } @@ -1759,7 +1760,7 @@ class Server{ /** @var Player[] $recipients */ $recipients = []; - foreach($this->pluginManager->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ + foreach(PermissionManager::getInstance()->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ if($permissible instanceof Player and $permissible->hasPermission(self::BROADCAST_CHANNEL_USERS)){ $recipients[spl_object_hash($permissible)] = $permissible; // do not send messages directly, or some might be repeated } @@ -1789,7 +1790,7 @@ class Server{ /** @var Player[] $recipients */ $recipients = []; - foreach($this->pluginManager->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ + foreach(PermissionManager::getInstance()->getPermissionSubscriptions(self::BROADCAST_CHANNEL_USERS) as $permissible){ if($permissible instanceof Player and $permissible->hasPermission(self::BROADCAST_CHANNEL_USERS)){ $recipients[spl_object_hash($permissible)] = $permissible; // do not send messages directly, or some might be repeated } @@ -1814,7 +1815,7 @@ class Server{ /** @var CommandSender[] $recipients */ $recipients = []; foreach(explode(";", $permissions) as $permission){ - foreach($this->pluginManager->getPermissionSubscriptions($permission) as $permissible){ + foreach(PermissionManager::getInstance()->getPermissionSubscriptions($permission) as $permissible){ if($permissible instanceof CommandSender and $permissible->hasPermission($permission)){ $recipients[spl_object_hash($permissible)] = $permissible; // do not send messages directly, or some might be repeated } diff --git a/src/pocketmine/command/Command.php b/src/pocketmine/command/Command.php index 09231ffe4..e23af9ada 100644 --- a/src/pocketmine/command/Command.php +++ b/src/pocketmine/command/Command.php @@ -28,6 +28,7 @@ namespace pocketmine\command; use pocketmine\lang\TextContainer; use pocketmine\lang\TranslationContainer; +use pocketmine\permission\PermissionManager; use pocketmine\Server; use pocketmine\timings\TimingsHandler; use pocketmine\utils\TextFormat; @@ -293,7 +294,7 @@ abstract class Command{ $m = clone $message; $result = "[" . $source->getName() . ": " . ($source->getServer()->getLanguage()->get($m->getText()) !== $m->getText() ? "%" : "") . $m->getText() . "]"; - $users = $source->getServer()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); + $users = PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $colored = TextFormat::GRAY . TextFormat::ITALIC . $result; $m->setText($result); @@ -301,7 +302,7 @@ abstract class Command{ $m->setText($colored); $colored = clone $m; }else{ - $users = $source->getServer()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); + $users = PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $result = new TranslationContainer("chat.type.admin", [$source->getName(), $message]); $colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . "%chat.type.admin", [$source->getName(), $message]); } diff --git a/src/pocketmine/event/player/PlayerChatEvent.php b/src/pocketmine/event/player/PlayerChatEvent.php index 32957457e..4ebddecdd 100644 --- a/src/pocketmine/event/player/PlayerChatEvent.php +++ b/src/pocketmine/event/player/PlayerChatEvent.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\event\player; use pocketmine\event\Cancellable; +use pocketmine\permission\PermissionManager; use pocketmine\Player; use pocketmine\Server; @@ -55,7 +56,7 @@ class PlayerChatEvent extends PlayerEvent implements Cancellable{ $this->format = $format; if($recipients === null){ - $this->recipients = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS); + $this->recipients = PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS); }else{ $this->recipients = $recipients; } diff --git a/src/pocketmine/permission/DefaultPermissions.php b/src/pocketmine/permission/DefaultPermissions.php index 01dc8b4c3..9ddb3b376 100644 --- a/src/pocketmine/permission/DefaultPermissions.php +++ b/src/pocketmine/permission/DefaultPermissions.php @@ -23,8 +23,6 @@ declare(strict_types=1); namespace pocketmine\permission; -use pocketmine\Server; - abstract class DefaultPermissions{ public const ROOT = "pocketmine"; @@ -40,9 +38,9 @@ abstract class DefaultPermissions{ return self::registerPermission($perm); } - Server::getInstance()->getPluginManager()->addPermission($perm); + PermissionManager::getInstance()->addPermission($perm); - return Server::getInstance()->getPluginManager()->getPermission($perm->getName()); + return PermissionManager::getInstance()->getPermission($perm->getName()); } public static function registerCorePermissions(){ diff --git a/src/pocketmine/permission/PermissibleBase.php b/src/pocketmine/permission/PermissibleBase.php index bec0fab46..3bfc3fa7a 100644 --- a/src/pocketmine/permission/PermissibleBase.php +++ b/src/pocketmine/permission/PermissibleBase.php @@ -25,7 +25,6 @@ namespace pocketmine\permission; use pocketmine\plugin\Plugin; use pocketmine\plugin\PluginException; -use pocketmine\Server; use pocketmine\timings\Timings; class PermissibleBase implements Permissible{ @@ -92,7 +91,7 @@ class PermissibleBase implements Permissible{ return $this->permissions[$name]->getValue(); } - if(($perm = Server::getInstance()->getPluginManager()->getPermission($name)) !== null){ + if(($perm = PermissionManager::getInstance()->getPermission($name)) !== null){ $perm = $perm->getDefault(); return $perm === Permission::DEFAULT_TRUE or ($this->isOp() and $perm === Permission::DEFAULT_OP) or (!$this->isOp() and $perm === Permission::DEFAULT_NOT_OP); @@ -147,13 +146,14 @@ class PermissibleBase implements Permissible{ Timings::$permissibleCalculationTimer->startTiming(); $this->clearPermissions(); - $defaults = Server::getInstance()->getPluginManager()->getDefaultPermissions($this->isOp()); - Server::getInstance()->getPluginManager()->subscribeToDefaultPerms($this->isOp(), $this->parent ?? $this); + $permManager = PermissionManager::getInstance(); + $defaults = $permManager->getDefaultPermissions($this->isOp()); + $permManager->subscribeToDefaultPerms($this->isOp(), $this->parent ?? $this); foreach($defaults as $perm){ $name = $perm->getName(); $this->permissions[$name] = new PermissionAttachmentInfo($this->parent ?? $this, $name, null, true); - Server::getInstance()->getPluginManager()->subscribeToPermission($name, $this->parent ?? $this); + $permManager->subscribeToPermission($name, $this->parent ?? $this); $this->calculateChildPermissions($perm->getChildren(), false, null); } @@ -165,13 +165,13 @@ class PermissibleBase implements Permissible{ } public function clearPermissions(){ - $pluginManager = Server::getInstance()->getPluginManager(); + $permManager = PermissionManager::getInstance(); foreach(array_keys($this->permissions) as $name){ - $pluginManager->unsubscribeFromPermission($name, $this->parent ?? $this); + $permManager->unsubscribeFromPermission($name, $this->parent ?? $this); } - $pluginManager->unsubscribeFromDefaultPerms(false, $this->parent ?? $this); - $pluginManager->unsubscribeFromDefaultPerms(true, $this->parent ?? $this); + $permManager->unsubscribeFromDefaultPerms(false, $this->parent ?? $this); + $permManager->unsubscribeFromDefaultPerms(true, $this->parent ?? $this); $this->permissions = []; } @@ -182,11 +182,12 @@ class PermissibleBase implements Permissible{ * @param PermissionAttachment|null $attachment */ private function calculateChildPermissions(array $children, bool $invert, ?PermissionAttachment $attachment){ + $permManager = PermissionManager::getInstance(); foreach($children as $name => $v){ - $perm = Server::getInstance()->getPluginManager()->getPermission($name); + $perm = $permManager->getPermission($name); $value = ($v xor $invert); $this->permissions[$name] = new PermissionAttachmentInfo($this->parent ?? $this, $name, $attachment, $value); - Server::getInstance()->getPluginManager()->subscribeToPermission($name, $this->parent ?? $this); + $permManager->subscribeToPermission($name, $this->parent ?? $this); if($perm instanceof Permission){ $this->calculateChildPermissions($perm->getChildren(), !$value, $attachment); diff --git a/src/pocketmine/permission/Permission.php b/src/pocketmine/permission/Permission.php index 70c7b88b0..cacd3b2f2 100644 --- a/src/pocketmine/permission/Permission.php +++ b/src/pocketmine/permission/Permission.php @@ -27,8 +27,6 @@ declare(strict_types=1); namespace pocketmine\permission; -use pocketmine\Server; - /** * Represents a permission */ @@ -217,13 +215,13 @@ class Permission{ * @return Permissible[] */ public function getPermissibles() : array{ - return Server::getInstance()->getPluginManager()->getPermissionSubscriptions($this->name); + return PermissionManager::getInstance()->getPermissionSubscriptions($this->name); } public function recalculatePermissibles(){ $perms = $this->getPermissibles(); - Server::getInstance()->getPluginManager()->recalculatePermissionDefaults($this); + PermissionManager::getInstance()->recalculatePermissionDefaults($this); foreach($perms as $p){ $p->recalculatePermissions(); @@ -243,10 +241,10 @@ class Permission{ $name->recalculatePermissibles(); return null; }else{ - $perm = Server::getInstance()->getPluginManager()->getPermission($name); + $perm = PermissionManager::getInstance()->getPermission($name); if($perm === null){ $perm = new Permission($name); - Server::getInstance()->getPluginManager()->addPermission($perm); + PermissionManager::getInstance()->addPermission($perm); } $this->addParent($perm, $value); diff --git a/src/pocketmine/permission/PermissionManager.php b/src/pocketmine/permission/PermissionManager.php new file mode 100644 index 000000000..5812cce01 --- /dev/null +++ b/src/pocketmine/permission/PermissionManager.php @@ -0,0 +1,215 @@ +permissions[$name] ?? null; + } + + /** + * @param Permission $permission + * + * @return bool + */ + public function addPermission(Permission $permission) : bool{ + if(!isset($this->permissions[$permission->getName()])){ + $this->permissions[$permission->getName()] = $permission; + $this->calculatePermissionDefault($permission); + + return true; + } + + return false; + } + + /** + * @param string|Permission $permission + */ + public function removePermission($permission){ + if($permission instanceof Permission){ + unset($this->permissions[$permission->getName()]); + }else{ + unset($this->permissions[$permission]); + } + } + + /** + * @param bool $op + * + * @return Permission[] + */ + public function getDefaultPermissions(bool $op) : array{ + if($op){ + return $this->defaultPermsOp; + }else{ + return $this->defaultPerms; + } + } + + /** + * @param Permission $permission + */ + public function recalculatePermissionDefaults(Permission $permission){ + if(isset($this->permissions[$permission->getName()])){ + unset($this->defaultPermsOp[$permission->getName()]); + unset($this->defaultPerms[$permission->getName()]); + $this->calculatePermissionDefault($permission); + } + } + + /** + * @param Permission $permission + */ + private function calculatePermissionDefault(Permission $permission){ + Timings::$permissionDefaultTimer->startTiming(); + if($permission->getDefault() === Permission::DEFAULT_OP or $permission->getDefault() === Permission::DEFAULT_TRUE){ + $this->defaultPermsOp[$permission->getName()] = $permission; + $this->dirtyPermissibles(true); + } + + if($permission->getDefault() === Permission::DEFAULT_NOT_OP or $permission->getDefault() === Permission::DEFAULT_TRUE){ + $this->defaultPerms[$permission->getName()] = $permission; + $this->dirtyPermissibles(false); + } + Timings::$permissionDefaultTimer->startTiming(); + } + + /** + * @param bool $op + */ + private function dirtyPermissibles(bool $op){ + foreach($this->getDefaultPermSubscriptions($op) as $p){ + $p->recalculatePermissions(); + } + } + + /** + * @param string $permission + * @param Permissible $permissible + */ + public function subscribeToPermission(string $permission, Permissible $permissible){ + if(!isset($this->permSubs[$permission])){ + $this->permSubs[$permission] = []; + } + $this->permSubs[$permission][spl_object_hash($permissible)] = $permissible; + } + + /** + * @param string $permission + * @param Permissible $permissible + */ + public function unsubscribeFromPermission(string $permission, Permissible $permissible){ + if(isset($this->permSubs[$permission])){ + unset($this->permSubs[$permission][spl_object_hash($permissible)]); + if(count($this->permSubs[$permission]) === 0){ + unset($this->permSubs[$permission]); + } + } + } + + /** + * @param string $permission + * + * @return array|Permissible[] + */ + public function getPermissionSubscriptions(string $permission) : array{ + return $this->permSubs[$permission] ?? []; + } + + /** + * @param bool $op + * @param Permissible $permissible + */ + public function subscribeToDefaultPerms(bool $op, Permissible $permissible){ + if($op){ + $this->defSubsOp[spl_object_hash($permissible)] = $permissible; + }else{ + $this->defSubs[spl_object_hash($permissible)] = $permissible; + } + } + + /** + * @param bool $op + * @param Permissible $permissible + */ + public function unsubscribeFromDefaultPerms(bool $op, Permissible $permissible){ + if($op){ + unset($this->defSubsOp[spl_object_hash($permissible)]); + }else{ + unset($this->defSubs[spl_object_hash($permissible)]); + } + } + + /** + * @param bool $op + * + * @return Permissible[] + */ + public function getDefaultPermSubscriptions(bool $op) : array{ + if($op){ + return $this->defSubsOp; + } + + return $this->defSubs; + } + + /** + * @return Permission[] + */ + public function getPermissions() : array{ + return $this->permissions; + } +} diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index 7b720d4d8..f68d4f2b8 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -34,13 +34,13 @@ use pocketmine\event\plugin\PluginEnableEvent; use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\permission\Permissible; use pocketmine\permission\Permission; +use pocketmine\permission\PermissionManager; use pocketmine\Server; -use pocketmine\timings\Timings; use pocketmine\timings\TimingsHandler; use pocketmine\utils\Utils; /** - * Manages all the plugins, Permissions and Permissibles + * Manages all the plugins */ class PluginManager{ private const MAX_EVENT_CALL_DEPTH = 50; @@ -61,36 +61,6 @@ class PluginManager{ */ protected $enabledPlugins = []; - /** - * @var Permission[] - */ - protected $permissions = []; - - /** - * @var Permission[] - */ - protected $defaultPerms = []; - - /** - * @var Permission[] - */ - protected $defaultPermsOp = []; - - /** - * @var Permissible[][] - */ - protected $permSubs = []; - - /** - * @var Permissible[] - */ - protected $defSubs = []; - - /** - * @var Permissible[] - */ - protected $defSubsOp = []; - /** * @var PluginLoader[] */ @@ -431,166 +401,137 @@ class PluginManager{ } /** + * @deprecated + * @see PermissionManager::getPermission() + * * @param string $name * * @return null|Permission */ public function getPermission(string $name){ - return $this->permissions[$name] ?? null; + return PermissionManager::getInstance()->getPermission($name); } /** + * @deprecated + * @see PermissionManager::addPermission() + * * @param Permission $permission * * @return bool */ public function addPermission(Permission $permission) : bool{ - if(!isset($this->permissions[$permission->getName()])){ - $this->permissions[$permission->getName()] = $permission; - $this->calculatePermissionDefault($permission); - - return true; - } - - return false; + return PermissionManager::getInstance()->addPermission($permission); } /** + * @deprecated + * @see PermissionManager::removePermission() + * * @param string|Permission $permission */ public function removePermission($permission){ - if($permission instanceof Permission){ - unset($this->permissions[$permission->getName()]); - }else{ - unset($this->permissions[$permission]); - } + PermissionManager::getInstance()->removePermission($permission); } /** + * @deprecated + * @see PermissionManager::getDefaultPermissions() + * * @param bool $op * * @return Permission[] */ public function getDefaultPermissions(bool $op) : array{ - if($op){ - return $this->defaultPermsOp; - }else{ - return $this->defaultPerms; - } + return PermissionManager::getInstance()->getDefaultPermissions($op); } /** + * @deprecated + * @see PermissionManager::recalculatePermissionDefaults() + * * @param Permission $permission */ public function recalculatePermissionDefaults(Permission $permission){ - if(isset($this->permissions[$permission->getName()])){ - unset($this->defaultPermsOp[$permission->getName()]); - unset($this->defaultPerms[$permission->getName()]); - $this->calculatePermissionDefault($permission); - } - } - - /** - * @param Permission $permission - */ - private function calculatePermissionDefault(Permission $permission){ - Timings::$permissionDefaultTimer->startTiming(); - if($permission->getDefault() === Permission::DEFAULT_OP or $permission->getDefault() === Permission::DEFAULT_TRUE){ - $this->defaultPermsOp[$permission->getName()] = $permission; - $this->dirtyPermissibles(true); - } - - if($permission->getDefault() === Permission::DEFAULT_NOT_OP or $permission->getDefault() === Permission::DEFAULT_TRUE){ - $this->defaultPerms[$permission->getName()] = $permission; - $this->dirtyPermissibles(false); - } - Timings::$permissionDefaultTimer->startTiming(); - } - - /** - * @param bool $op - */ - private function dirtyPermissibles(bool $op){ - foreach($this->getDefaultPermSubscriptions($op) as $p){ - $p->recalculatePermissions(); - } + PermissionManager::getInstance()->recalculatePermissionDefaults($permission); } /** + * @deprecated + * @see PermissionManager::subscribeToPermission() + * * @param string $permission * @param Permissible $permissible */ public function subscribeToPermission(string $permission, Permissible $permissible){ - if(!isset($this->permSubs[$permission])){ - $this->permSubs[$permission] = []; - } - $this->permSubs[$permission][spl_object_hash($permissible)] = $permissible; + PermissionManager::getInstance()->subscribeToPermission($permission, $permissible); } /** + * @deprecated + * @see PermissionManager::unsubscribeFromPermission() + * * @param string $permission * @param Permissible $permissible */ public function unsubscribeFromPermission(string $permission, Permissible $permissible){ - if(isset($this->permSubs[$permission])){ - unset($this->permSubs[$permission][spl_object_hash($permissible)]); - if(count($this->permSubs[$permission]) === 0){ - unset($this->permSubs[$permission]); - } - } + PermissionManager::getInstance()->unsubscribeFromPermission($permission, $permissible); } /** + * @deprecated + * @see PermissionManager::getPermissionSubscriptions() + * * @param string $permission * * @return array|Permissible[] */ public function getPermissionSubscriptions(string $permission) : array{ - return $this->permSubs[$permission] ?? []; + return PermissionManager::getInstance()->getPermissionSubscriptions($permission); } /** + * @deprecated + * @see PermissionManager::subscribeToDefaultPerms() + * * @param bool $op * @param Permissible $permissible */ public function subscribeToDefaultPerms(bool $op, Permissible $permissible){ - if($op){ - $this->defSubsOp[spl_object_hash($permissible)] = $permissible; - }else{ - $this->defSubs[spl_object_hash($permissible)] = $permissible; - } + PermissionManager::getInstance()->subscribeToDefaultPerms($op, $permissible); } /** + * @deprecated + * @see PermissionManager::unsubscribeFromDefaultPerms() + * * @param bool $op * @param Permissible $permissible */ public function unsubscribeFromDefaultPerms(bool $op, Permissible $permissible){ - if($op){ - unset($this->defSubsOp[spl_object_hash($permissible)]); - }else{ - unset($this->defSubs[spl_object_hash($permissible)]); - } + PermissionManager::getInstance()->unsubscribeFromDefaultPerms($op, $permissible); } /** + * @deprecated + * @see PermissionManager::getDefaultPermSubscriptions() + * * @param bool $op * * @return Permissible[] */ public function getDefaultPermSubscriptions(bool $op) : array{ - if($op){ - return $this->defSubsOp; - } - - return $this->defSubs; + return PermissionManager::getInstance()->getDefaultPermSubscriptions($op); } /** + * @deprecated + * @see PermissionManager::getPermissions() + * * @return Permission[] */ public function getPermissions() : array{ - return $this->permissions; + return PermissionManager::getInstance()->getPermissions(); } /** @@ -610,8 +551,9 @@ class PluginManager{ try{ $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.enable", [$plugin->getDescription()->getFullName()])); + $permManager = PermissionManager::getInstance(); foreach($plugin->getDescription()->getPermissions() as $perm){ - $this->addPermission($perm); + $permManager->addPermission($perm); } $plugin->getScheduler()->setEnabled(true); $plugin->setEnabled(true); @@ -706,8 +648,9 @@ class PluginManager{ } $plugin->getScheduler()->shutdown(); HandlerList::unregisterAll($plugin); + $permManager = PermissionManager::getInstance(); foreach($plugin->getDescription()->getPermissions() as $perm){ - $this->removePermission($perm); + $permManager->removePermission($perm); } } }