【问题标题】:Permission plugin bukkit always returns true权限插件 bukkit 总是返回 true
【发布时间】:2015-12-22 15:03:56
【问题描述】:

我还没有使用过字符串权限插件,但在使用它时遇到了一些麻烦:

public class MainPermission {

public static void givePlayerPermission(MainPlayer player){
    ServerRank rank = player.getServerRank();
    if(rank.equals(ServerRank.STONE)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("STONE"));
    }else if(rank.equals(ServerRank.COAL)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("COAL"));
    }else if(rank.equals(ServerRank.IRON)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("IRON"));
    }else if(rank.equals(ServerRank.GOLD)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("GOLD"));
    }else if(rank.equals(ServerRank.REDSTONE)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("REDSTONE"));
    }else if(rank.equals(ServerRank.EMERALD)){
        setPermission("ADD", player, DataFiles.PermissionConf.getStringList("EMERALD"));
    }else if(rank.equals(ServerRank.DIAMOND)){
        setPermission("ADD", player, DataFiles.PermissionConf.getString("DIAMOND"));
    }
}

public static void removePlayerPermission(MainPlayer player){
    setPermission("REMOVE", player, "*");
}

private static boolean setPermission(String type, MainPlayer player, String permission){
    if(type.equalsIgnoreCase("ADD")){
        PermissionAttachment attachment = player.getPlayer().addAttachment(MainClass.getInstance());
        attachment.setPermission(permission, true);

          //player.getPlayer().sendMessage(ChatColor.DARK_GREEN + "Permission " + permission + " given");

        return true;
    }else if(type.equalsIgnoreCase("REMOVE")){
        PermissionAttachment attachment = player.getPlayer().addAttachment(MainClass.getInstance());
        attachment.setPermission(permission, false);

          //player.getPlayer().sendMessage(ChatColor.DARK_GREEN + "Permission " + permission + " removed");

        return true;
    }
    return false;
}

private static boolean setPermission(String type, MainPlayer player, List<String> permission){
    for(String s : permission){
        setPermission(type, player, s);
    }
    return true;
}

public static void initFile(){
    if(!DataFiles.PermissionsFile.exists()){
        try {
            DataFiles.PermissionsFile.createNewFile();

            ArrayList<String> STONE = new ArrayList<>();
            STONE.add("bukkit.command.version");
            STONE.add("bukkit.command.plugins");
            STONE.add("bukkit.command.help");
            STONE.add("bukkit.command.tell");

            ArrayList<String> COAL = new ArrayList<>();
            COAL.add("bukkit.command.version");
            COAL.add("bukkit.command.plugins");
            COAL.add("bukkit.command.help");
            COAL.add("bukkit.command.tell");
            COAL.add("bukkit.command.list");

            ArrayList<String> IRON = new ArrayList<>();
            IRON.add("bukkit.command.version");
            IRON.add("bukkit.command.plugins");
            IRON.add("bukkit.command.help");
            IRON.add("bukkit.command.tell");
            IRON.add("bukkit.command.list");

            ArrayList<String> GOLD = new ArrayList<>();
            GOLD.add("bukkit.command.version");
            GOLD.add("bukkit.command.plugins");
            GOLD.add("bukkit.command.help");
            GOLD.add("bukkit.command.tell");
            GOLD.add("bukkit.command.list");

            ArrayList<String> REDSTONE = new ArrayList<>();
            REDSTONE.add("bukkit.command.version");
            REDSTONE.add("bukkit.command.plugins");
            REDSTONE.add("bukkit.command.help");
            REDSTONE.add("bukkit.command.tell");
            REDSTONE.add("bukkit.command.list");
            REDSTONE.add("bukkit.command.banlist");
            REDSTONE.add("bukkit.command.kick");
            REDSTONE.add("bukkit.command.kill");
            REDSTONE.add("bukkit.command.me");
            REDSTONE.add("bukkit.command.says");
            REDSTONE.add("bukkit.command.seed");
            REDSTONE.add("bukkit.command.tellraw");
            REDSTONE.add("bukkit.command.tp");
            REDSTONE.add("MainPlugin.command.entity");
            REDSTONE.add("MainPlugin.command.permission");

            ArrayList<String> EMERALD = new ArrayList<>();
            EMERALD.add("bukkit.command.version");
            EMERALD.add("bukkit.command.plugins");
            EMERALD.add("bukkit.command.help");
            EMERALD.add("bukkit.command.tell");
            EMERALD.add("bukkit.command.list");
            EMERALD.add("bukkit.command.banlist");
            EMERALD.add("bukkit.command.kick");
            EMERALD.add("bukkit.command.kill");
            EMERALD.add("bukkit.command.me");
            EMERALD.add("bukkit.command.say");
            EMERALD.add("bukkit.command.seed");
            EMERALD.add("bukkit.command.tellraw");
            EMERALD.add("bukkit.command.tp");
            EMERALD.add("bukkit.command.achievement");
            EMERALD.add("bukkit.command.ban");
            EMERALD.add("bukkit.command.ban-ip");
            EMERALD.add("bukkit.command.clear");
            EMERALD.add("bukkit.command.debug");
            EMERALD.add("bukkit.command.difficulty");
            EMERALD.add("bukkit.command.effect");
            EMERALD.add("bukkit.command.enchant");
            EMERALD.add("bukkit.command.gamemode");
            EMERALD.add("bukkit.command.give");
            EMERALD.add("bukkit.command.pardon");
            EMERALD.add("bukkit.command.pardon-ip");
            EMERALD.add("bukkit.command.playsound");
            EMERALD.add("bukkit.command.scoreboard");
            EMERALD.add("bukkit.command.setblock");
            EMERALD.add("bukkit.command.setidletimeout");
            EMERALD.add("bukkit.command.summon");
            EMERALD.add("bukkit.command.testfor");
            EMERALD.add("bukkit.command.testforblock");
            EMERALD.add("bukkit.command.time");
            EMERALD.add("bukkit.command.toggledownfall");
            EMERALD.add("bukkit.command.weather");
            EMERALD.add("bukkit.command.xp");
            EMERALD.add("MainPlugin.command.entity");
            EMERALD.add("MainPlugin.command.permission");


            DataFiles.PermissionConf.set("STONE", STONE);
            DataFiles.PermissionConf.set("COAL", COAL);
            DataFiles.PermissionConf.set("IRON", IRON);
            DataFiles.PermissionConf.set("GOLD", GOLD);
            DataFiles.PermissionConf.set("REDSTONE", REDSTONE);
            DataFiles.PermissionConf.set("EMERALD", EMERALD);
            DataFiles.PermissionConf.set("DIAMOND", "*");

            DataFiles.PermissionConf.save(DataFiles.PermissionsFile);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

一切正常,权限已授予玩家(在调试时看到),但每当我询问玩家是否有特定权限时,它总是返回 true,即使排名不授予您权限。

每个玩家加入时都会加载权限,MainPlayer是一个自己的类,用于从不同方面控制玩家,问题不是来自这个类。

【问题讨论】:

  • 这可能与权限插件或您使用它的方式有关,在这种情况下,我会在该插件的 Bukkit 开发页面上询问或指定插件。
  • 这是我自己写的插件,可惜没人问
  • 我发现了问题,我忘了自己de-op。感谢您的每一个帮助!

标签: java plugins permissions bukkit


【解决方案1】:

在为 bukkit 制作权限插件时可能会出错,例如:

忘记去操作自己

当你是一个操作者时,你基本上拥有所有权限,除了那些将默认定义为其他东西的权限。

要删除自己的操作状态,请输入 ingame /deop @p

忘记打电话给player.recalculatePermissions()

如果您使用在玩家生命周期内发生变化的权限,您需要确保调用player.recalculatePermissions() 来更新权限。

权限中有拼写错误

您应该仔细检查损坏的权限是否拼写正确,有时甚至可能在插件的文档中出现错误

您正在尝试设置* 权限

bukkit 权限系统中没有* 权限的概念,* 权限的概念来自旧式权限系统,* 表示所有权限,这在过去造成了一些问题它与权限删除冲突,因此 bukkit 决定使用 op/not-op 系统,而不是引入有风险的*。一些权限插件决定继续使用*权限,并引入了代码来获取所有注册的权限,但它仍然有它的错误。

【讨论】:

    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2017-05-10
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多