当前位置: 首页 > 知识库问答 >
问题:

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

逑何平
2023-03-14

我试图创建一个类似于权限插件的东西,但我的问题是我不知道如何给一个玩家权限,例如< code>aplugin.chat和< code>aplugin.color,当我只给他权限< code>aplugin时。*。当然,如果许可是注册的,这没有问题,我可以从< code>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();
    }
}

谢谢你的帮助,很抱歉我的英语不好;)

共有1个答案

冯星阑
2023-03-14

您可以通过覆盖权限检查来创建此“*”权限。信息(单击我)

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

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

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

对于“plugin.*”

要创建“插件”权限,您必须获得所述“插件”的所有权限,只有在选中的权限在所述插件中并且所述用户具有权限“插件”时才启用访问权限。

这将简单地给用户访问所有的插件权限只有当您的系统知道所述权限是所述插件权限,如果用户有权访问所有的插件权限('plugin.*')允许无论如何访问。

 类似资料:
  • 我想制作一个插件,允许玩家自定义他们的盔甲模型和纹理。我希望服务器上的其他玩家能够看到这些自定义设置。 由于我从未在插件中做过纹理覆盖,我不知道这是否可行,我也无法在网上找到任何相关的东西。我知道你可以让积木看起来和其他积木一样,但是盔甲不行。 我必须给在线玩家发送一个数据包,还是有其他方法可以做到这一点?如果这是可能的,是否有一个地方记录了如何做到这一点?

  • 我目前正在为我的服务器网络编写自己的GUI商店,我面临着两个奇怪的问题。 第一个问题是,每当我想获得两个带有项目ID 161和两个不同元ID(0和1)的树叶时,我只得到一个元ID 2。 这是我在调试中尝试获取项目数据时得到的内容:问题 1 这就是我在库存中得到的:问题 1 但它应该是这个(例如):161/0 或 161/1 我从Spigot/Bukkit自己那里得到了这个物品Meta,所以我无论如

  • 我正在尝试创建一个菜单,我想确保所有玩家都有加入的指南针。 我的代码不起作用——如果你的库存中有一个没有命名的指南针,它就不能给你指南针。如果我没有检查这些,我的代码会给出一个带有上述条件的。 Eclipse不显示错误。我做错了什么?

  • 为什么它不起作用?它阻塞每个命令。我希望它阻止除config中的命令外的所有命令

  • 当我试图在我的bukkit服务器中加载插件时,我遇到了NullPointerExc的问题,但在Eclipse中没有错误。我的插件是Rush插件,很多东西没有使用/丢失。错误是这样的: 以下是我的代码: