java - 我想使用 3 个参数 该命令应该是这样的 :/event pop on

标签 java minecraft bukkit

正如我在标题中所说,我想执行以下 2 个命令:/event pvp on

和/event 弹出 它不工作。请帮助我。 顺便说一句,我是 Java 编码新手

这是我的代码:

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

    Player player = (Player) sender;
    if(label.equalsIgnoreCase("event")) {
        if(args.length == 0) {
            player.sendMessage("Syntax: /event (Event) on/off");
            return true;
        } else if(args.length == 1) {
            String mode = args[0];
            if(mode.equalsIgnoreCase("pvp")) {
                if(arg2.length() == 1) {
                    String Modus = arg2;
                    if(Modus.equalsIgnoreCase("on")) {


               new PlayerRDEvent(this);


                for(Player onps : Bukkit.getOnlinePlayers()){
                    onps.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD +  "PvP" + ChatColor.YELLOW + "Event" + ChatColor.DARK_GRAY + "]" + ChatColor.GRAY + "Das PvP Event hat begonnen!");
                     onps.playSound(onps.getLocation(), Sound.ARROW_HIT, 2, 0);
                }}}
                return true;
            } else if(mode.equalsIgnoreCase("off")) {
                 for(Player onps2 : Bukkit.getOnlinePlayers()){
                    onps2.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD +  "PvP" + ChatColor.YELLOW + "Event" + ChatColor.DARK_GRAY + "]" + ChatColor.GRAY + "Das PvP Event ist zu ende!");
                     onps2.playSound(onps2.getLocation(), Sound.ARROW_HIT, 2, 0);}
                HandlerList.unregisterAll();




                return true;
            } else {
                player.sendMessage("Use: /event (event) on/off");

            }
        }
    }
    return false;
}

最佳答案

您将模式用作args[0]的变量,并且没有使用它来检查它是否已打开。要检查关闭/打开字符串,请将 mode 等同于 args[1] (数组中的第二个元素,因为第一个元素是 pvp)并在条件之前检查 if args[0] 等于 pvp

此外,如果您要重写 JavaPlugin 中的方法,则无法添加参数 String arg2 - 因此只需使用方法 onCommand 的默认参数, 请参阅:OnCommand Bukkit method

代码:

 Player player = (Player) sender;
    if (label.equalsIgnoreCase("event")) {
        if (args[0].equals("pvp")) { //check if args[0] is pvp, you can add an else statement to send an error message if it is not pvp, or manipulate it differently
            if (args.length != 2) { //if it does not contain both [pvp] and [off/on]
                player.sendMessage("Syntax: /event (Event) on/off");
                return true;
            } else { //if args length = 2
                String mode = args[1]; //[off/on]
                if (mode.equalsIgnoreCase("on")) { //if args[1] is "on"


                    for (Player onps : Bukkit.getOnlinePlayers()) {
                        onps.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "PvP" + ChatColor.YELLOW + "Event" + ChatColor.DARK_GRAY + "]" + ChatColor.GRAY + "Das PvP Event hat begonnen!");
                        onps.playSound(onps.getLocation(), Sound.ARROW_HIT, 2, 0);
                    }
                    return true;


                } else if (mode.equalsIgnoreCase("off")) { //if args[1] is "off"
                    for (Player onps2 : Bukkit.getOnlinePlayers()) {
                        onps2.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "PvP" + ChatColor.YELLOW + "Event" + ChatColor.DARK_GRAY + "]" + ChatColor.GRAY + "Das PvP Event ist zu ende!");
                        onps2.playSound(onps2.getLocation(), Sound.ARROW_HIT, 2, 0);
                    }
                    HandlerList.unregisterAll();
                    return true;


                } else {
                    player.sendMessage("Use: /event (event) on/off");
                }
            }
        }
    }

    return false;
}
}

我真的建议您在不久的将来实现某种命令监听器,而不是检查 onCommand 方法上的每个命令,因为它使您的代码更干净且更易于阅读

关于java - 我想使用 3 个参数 该命令应该是这样的 :/event pop on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54541201/

相关文章:

java - 在 Java 中包含大量常量的最佳方式?

java - 将 Map<String, Object> 转换为 byte[] 并返回

java - 如何从Oracle连接到Java程序

Java - 测量方法执行时间

java - 尝试检测玩家在我的 Minecraft mod 的库存中是否有特定元素

linux - 停止脚本 |龙头 |重新连接到分离的 screen

java - 取消伤害动画

java - 使用插件将消息从 Bukkit 服务器传输到 IRC

java - Bukkit 等待/延迟帮助(Bukkit Runnable)

java - 为什么我看不到 GC 根?