我应该在哪里进行许可检查?

时间:2016-01-04 17:12:55

标签: java minecraft bukkit

如果用户有权限,我想执行命令。

我在哪里将permission check放在我的插件命令代码中?

public class wingsOff implements CommandExecutor {

    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

        if(label.equalsIgnoreCase("disableflight")) {
            if (!(sender instanceof Player)) {
                sender.sendMessage("Sorry! Only players can do this.");
                return false;
            }

            Player player = (Player) sender;
            player.sendMessage(ChatColor.GOLD + "Flight mode disabled!");
            player.setAllowFlight(false);

            return true;       
        }

        return false;
    }   
}

2 个答案:

答案 0 :(得分:0)

您可以在任何可能的地方进行权限检查。如果您的命令是通过plugin.yml注册的,并且您已经为其分配了权限,则会在命令处理程序实际被调用之前调用Command#testPermission(CommandSender)

如果你的示例代码很短,那么使用StackOverflow的代码标签来节省双方的时间是值得的。

答案 1 :(得分:0)

与Connor一样,您基本上可以在代码中的任何位置放置权限检查。

以下是有关如何实施权限检查的示例:

if(label.equalsIgnoreCase("disableflight")) {
    if (!(sender instanceof Player)) {
        sender.sendMessage("Sorry! Only players can do this.");
        return false;
    }

    Player player = (Player) sender;

    if(player.hasPermission("flight.use")) {
        // execute code like normal
        player.sendMessage(ChatColor.GOLD + "Flight mode disabled!");
        player.setAllowFlight(false);
    } else {
        // notify player or whatever you'd like
        player.sendMessage(ChatColor.RED + "You don't have permission!");            
    }

    return true;       
}

基本上只需检查播放器是否拥有player.hasPermission()的权限,并确保在plugin.yml中注册。