2

我有以下代码块(它是 bukkit 服务器的插件 [minecraft 游戏])

            msg = lang.getString("Kick", "null"); //default msg.
            msg = msg.replace("\\n", "\n");
            int i = 0;
            Player target = null;
            for (i = 0; i < args.length; i++) {
                if (args[i].equalsIgnoreCase("-")){
                    StringBuilder sb = new StringBuilder();
                    for (int ii = i+1; ii < args.length; ii++) {
                            sb.append(args[ii]).append(" ");
                    }
                    msg = sb.toString().trim(); // - that msg I need
                    break;
                } 
                target = (Bukkit.getServer().getPlayer(args[i]));
                target.kickPlayer(msg); // <--- here

如何从循环中获取“msg”字符串。
代码必须像这样工作:
播放器类型命令 /command target1 target2 - 原因
然后代码:
Get target1
Get target2
Get target3 但 target3 是“-”。那么'-'之后的每个参数都是原因(msg)。(然后我必须打破循环以获取玩家)
并用原因(msg)踢目标1。用原因(msg)踢目标2。
但是如果玩家输入 /command target1 target2... target999
然后用默认原因踢它。

4

1 回答 1

0

首先,在这种情况下,您通过论点的方式并不是最好的。改为使用for (String argument : args)。还有一件事:你不能在break.

现在到你的问题。您想检查参数并检查是否-存在。之后的所有-内容都应添加到String. 该字符串具有默认值。如果有一个-默认值应该被删除,该值应该是之后的所有内容-

boolean read = false;
String msg = "default message";
List<String> players = new ArrayList<String>();

for (String argument : args) {
    if (!read && !argument.equalsIgnoreCase("-")) {
        players.add(argument);
    } else if (!read && argument.equalsIgnoreCase("-")) {
        read = true;
        msg = "";
    } else {
        msg += argument;
    }
}

for (String player : players) {
    Player target = Bukkit.getServer().getPlayer(player);
    target.kickPlayer(msg);
}

为此,您需要一个布尔值、消息字符串和一个应保存所有目标名称的列表。此代码遍历所有参数。

如果布尔值为 false 且参数不是-,则参数将保存在玩家列表中。否则,如果布尔值为 false,但参数为-布尔值,则布尔值被设置为 true,并且字符串的默认值被删除。否则(参数是消息的一部分)参数附加到字符串。

毕竟还有另一个循环,插件会遍历添加到列表中的所有玩家并踢他们向他们显示输入的消息。

干杯!

于 2013-04-06T16:11:30.213 回答