diff --git a/src/pocketmine/permission/PermissionParser.php b/src/pocketmine/permission/PermissionParser.php index 811554eb4..dd625d2e7 100644 --- a/src/pocketmine/permission/PermissionParser.php +++ b/src/pocketmine/permission/PermissionParser.php @@ -124,4 +124,39 @@ class PermissionParser{ return new Permission($name, $desc, $default, $children); } + + /** + * @param Permission[] $permissions + * + * @return array + */ + public static function emitPermissions(array $permissions) : array{ + $result = []; + foreach($permissions as $permission){ + $result[$permission->getName()] = self::emitPermission($permission); + } + ksort($result); + return $result; + } + + private static function emitPermission(Permission $permission) : array{ + $result = [ + "description" => $permission->getDescription(), + "default" => $permission->getDefault() + ]; + $children = []; + foreach($permission->getChildren() as $name => $bool){ + //TODO: really? wtf??? this system is so overengineered it makes my head hurt... + $child = PermissionManager::getInstance()->getPermission($name); + if($child === null){ + throw new \UnexpectedValueException("Permission child should be a registered permission"); + } + $children[$name] = self::emitPermission($child); + } + if(!empty($children)){ + ksort($children); + $result["children"] = $children; + } + return $result; + } }