예제 #1
0
 /**
  * @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());
 }
예제 #2
0
 /**
  * @param Permission|string $name
  *
  * @return bool
  */
 public function isPermissionSet($name)
 {
     return isset($this->permissions[$name instanceof Permission ? $name->getName() : $name]);
 }
예제 #3
0
 /**
  * @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();
 }
예제 #4
0
 /**
  * @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);
 }
예제 #5
0
 /**
  * @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"]);
     }
 }