/** * @param Permission $perm * @param Permission $parent * * @return Permission */ public static function registerPermission(Permission $perm, Permission $parent = null) { if ($parent instanceof Permission) { $parent->getChildren()[$perm->getName()] = true; return self::registerPermission($perm); } Server::getInstance()->getPluginManager()->addPermission($perm); return Server::getInstance()->getPluginManager()->getPermission($perm->getName()); }
/** * @param Permission|string $name * * @return bool */ public function isPermissionSet($name) { return isset($this->permissions[$name instanceof Permission ? $name->getName() : $name]); }
/** * @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 string $name * @param array $data * @param string $default * @param array $output * * @return Permission * * @throws \Exception */ public static function loadPermission($name, array $data, $default = self::DEFAULT_OP, &$output = []) { $desc = null; $children = []; if (isset($data["default"])) { $value = Permission::getByName($data["default"]); if ($value !== null) { $default = $value; } else { throw new \InvalidStateException("'default' key contained unknown value"); } } if (isset($data["children"])) { if (is_array($data["children"])) { foreach ($data["children"] as $k => $v) { if (is_array($v)) { if (($perm = self::loadPermission($k, $v, $default, $output)) !== null) { $output[] = $perm; } } $children[$k] = true; } } else { throw new \InvalidStateException("'children' key is of wrong type"); } } if (isset($data["description"])) { $desc = $data["description"]; } return new Permission($name, $desc, $default, $children); }
/** * @param array $plugin * * @throws PluginException */ private function loadMap(array $plugin) { $this->name = preg_replace("[^A-Za-z0-9 _.-]", "", $plugin["name"]); if ($this->name === "") { throw new PluginException("Invalid PluginDescription name"); } $this->name = str_replace(" ", "_", $this->name); $this->version = $plugin["version"]; $this->main = $plugin["main"]; $this->api = !is_array($plugin["api"]) ? [$plugin["api"]] : $plugin["api"]; if (stripos($this->main, "BukkitPE\\") === 0) { throw new PluginException("Invalid PluginDescription main, cannot start within the BukkitPE namespace"); } if (isset($plugin["commands"]) and is_array($plugin["commands"])) { $this->commands = $plugin["commands"]; } if (isset($plugin["depend"])) { $this->depend = (array) $plugin["depend"]; } if (isset($plugin["softdepend"])) { $this->softDepend = (array) $plugin["softdepend"]; } if (isset($plugin["loadbefore"])) { $this->loadBefore = (array) $plugin["loadbefore"]; } if (isset($plugin["website"])) { $this->website = $plugin["website"]; } if (isset($plugin["description"])) { $this->description = $plugin["description"]; } if (isset($plugin["prefix"])) { $this->prefix = $plugin["prefix"]; } if (isset($plugin["load"])) { $order = strtoupper($plugin["load"]); if (!defined(PluginLoadOrder::class . "::" . $order)) { throw new PluginException("Invalid PluginDescription load"); } else { $this->order = constant(PluginLoadOrder::class . "::" . $order); } } $this->authors = []; if (isset($plugin["author"])) { $this->authors[] = $plugin["author"]; } if (isset($plugin["authors"])) { foreach ($plugin["authors"] as $author) { $this->authors[] = $author; } } if (isset($plugin["permissions"])) { $this->permissions = Permission::loadPermissions($plugin["permissions"]); } }