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

标签 java permissions minecraft bukkit

我尝试创建一些类似于小权限插件的东西,但我的问题是我不知道如何为播放器提供权限,例如权限aplugin.chataplugin.color 当我只给他权限 aplugin.* 时。当然,如果权限已注册,就没有问题,我可以从 Bukkit.getPluginManager().getPermissions() 检查每个权限。如果没有注册如何解决?在 BungeeCord 中有一个事件,我可以在其中看到所需的权限,但是在 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();
    }
}

感谢您的帮助,并对我的英语不好表示歉意;)

最佳答案

您可以通过覆盖权限检查来创建此“*”权限。 Info(Click me)

PermissionBase 是扩展 PermissibleBase 的类,它重写了 hasPermission 方法。

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

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

对于 '插件。*'>

要创建“插件”权限。您必须获得该“插件”的所有权限,只有在检查的权限位于该插件中且该用户拥有“插件”权限时才启用访问。” .

仅当您的系统知道所述权限是所述插件权限并且用户有权访问所有插件权限('plugin.*')时,这将简单地授予用户访问所有插件权限的权限('plugin.*')无论如何都允许访问.

关于java - 创建权限插件 (aplugin.*) - Spigot/Bukkit - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227822/

相关文章:

c++ - 在 Webview Blackberry 10 Cascades Beta 3 SDK Dev Alpha Simulator 中获取不正确的权限屏幕

amazon-web-services - Quicksight - Snowflake 数据源为 "No tables found"

java - 光泽度错误

minecraft - OpenJDK的JDK位置

java - 动态方法调度

java - 我的 android xxxhdpi 模拟器显示黑屏

java - 电费/能源账单计算器 : Java

macos - 如何在 mac os x 上安装自定义 man(手册)页

java - VetoSet NullPointerException

networking - 我应该为我的 Minecraft 风格的游戏使用 UDP 还是 TCP?