我有以下代码块(它是bukkit服务器的插件[我的游戏])
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”字符串
代码必须像以下一样工作:
播放器类型命令/命令target1 target2 - r e a s o n
然后代码:
获得目标1
获得目标2
获取target3但target3为' - '。然后' - '之后的每个args都是原因(msg)。 (然后我必须打破循环才能获得玩家)
并用原因(msg)踢target1。用目标(msg)踢target2。
但是如果玩家类型/命令target1 target2 ... target999
然后按默认原因踢它。
答案 0 :(得分: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,并删除字符串的默认值。否则(参数是消息的一部分)参数附加到字符串。
毕竟还有另一个循环,插件会通过添加到列表中的所有玩家,然后踢他们显示输入的消息。
干杯!