首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建权限插件(aplugin.*) - Spigot/Bukkit - Java

创建权限插件(aplugin.*) - Spigot/Bukkit - Java
EN

Stack Overflow用户
提问于 2016-03-25 20:50:59
回答 1查看 3K关注 0票数 0

我试图创建一个类似于一个小权限插件的东西,但我的问题是,当我只给一个播放器权限aplugin.chataplugin.color时,我不知道如何给他权限aplugin.*。当然,如果注册了该权限,并且我可以检查来自Bukkit.getPluginManager().getPermissions()的每个权限,这是没有问题的。如果它没有注册,我如何解决它?在BungeeCord中有一个事件,我可以在那里看到所需的权限,但在Spigot/Bukkit中呢?

下面是我最新版本的设置权限的代码:

代码语言:javascript
复制
// setPerms
public static void setPerms(Player p) {
    try {
        PreparedStatement ps = MySQL.getConnection()
                .prepareStatement("SELECT Permission FROM Permissions WHERE Gruppe = ?");
        ps.setString(1, User.getPermGroup(p.getName()));
        ResultSet rs = ps.executeQuery();
        PermissionAttachment pa;
        if (main.perms.containsKey(p.getName())) {
            pa = main.perms.get(p.getName());
        } else {
            pa = p.addAttachment(plugin);
        }
        while (rs.next() == true) {
            String perm = rs.getString("Permission");
            boolean value = true;
            if (perm.startsWith("-")) {
                perm = perm.substring(1);
                value = false;
            }
            if (perm.endsWith("*")) {
                if (perm.equals("*")) {
                    for (Permission pe : Bukkit.getPluginManager().getPermissions()) {
                        pa.setPermission(pe, value);
                    }
                    pa.setPermission(perm, value);
                } else {
                    String search = perm.substring(0, perm.length() - 1);
                    for (Permission pe : Bukkit.getPluginManager().getPermissions()) {
                        if (pe.getName().startsWith(search)) {
                            pa.setPermission(pe, value);
                        }
                    }
                    pa.setPermission(perm, value);
                }
            }
            pa.setPermission(perm, value);
        }
        main.perms.replace(p.getName(), pa);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

谢谢你的帮助,为我糟糕的英语感到抱歉;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-02 21:45:52

您可以通过重写权限检查来创建此“*”权限。信息(点击我)

PermissionBase是您的类,它扩展了覆盖hasPermission方法的PermissibleBase。

只需使用线程中的反射将任何玩家的PermissibleBase设置为您的,允许您重写bukkit的权限检查。

这将覆盖bukkit,这意味着所有其他插件都将遵循您的PermissionBase(或您命名的)类中的相同规则。

For 'plugin.*' >

若要创建“plugin.‘”,请执行以下操作。您必须获得所有的权限,只有当检查的权限在上述插件中,并且用户有权限‘插件’时,才能访问该插件。

这只会让用户访问所有插件权限,只有当您的系统知道所述权限是所谓的插件权限,并且如果用户有权访问所有插件权限(“plugin.*”),则无论如何都允许访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36227822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档