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」文字列を取得する方法。
コードは次のように動作する必要があります:
Player type command /command target1 target2 - reason
then code:
Get target1 Get
target2
Get target3 しかし、target3 は「-」です。'-' の後のすべての引数は理由 (msg) です。(その後、プレーヤーを取得するためにループを中断する必要があります)
そして、理由(msg)でターゲット1をキックします。理由 (msg) で target2 をキックします。
ただし、プレイヤーが /command target1 target2... target999と入力
した場合は、デフォルトの理由でキックします。

4

1 に答える 1

0

まず第一に、この場合、引数を処理する方法が最適ではありません。for (String argument : args)代わりに使用してください。もう 1 つ: の後にループ内でコードを実行することはできませんbreak

今あなたの問題に。引数を調べて、そうである-かどうかを確認します。以降はすべて-a に追加する必要があり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 に答える