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

时间:2016-03-25 20:50:59

标签: java permissions minecraft bukkit

我尝试创建类似于一个小权限插件的内容,但我的问题是我不知道如何给予播放器例如权限aplugin.chataplugin.color他是权限aplugin.*。当然,如果注册了Permission并且我可以从Bukkit.getPluginManager().getPermissions()检查每个权限,那就没问题了。如果没有注册,我该如何解决?在BungeeCord中有一个事件,我可以看到所需的Permission,但是在Spigot / Bukkit中?

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

// 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();
    }
}

感谢您的帮助,抱歉我的英语不好;)

1 个答案:

答案 0 :(得分:1)

你可以创建这个' *'通过覆盖权限检查的权限。 Info(Click me)

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

只需使用线程中的反射将任何玩家的PermissibleBase设置为你的允许你覆盖bukkit的权限检查。

这将覆盖bukkit,这意味着所有其他插件将遵循PermissionBase中的相​​同规则(或者无论你怎么命名)类。

'插件。*' >

创建一个&#39;插件。&#39;如果被检查的权限在所述插件中并且所述用户具有权限插件,则必须获得所述“插件”的所有权限才允许访问权限。&#39;。< / p>

如果您的系统知道所说的权限是插件权限,并且用户有权访问所有插件权限,那么这只会让用户访问所有插件权限(&#39;插件。*&#39; )无论如何都允许访问。