0
私は真剣な助けが必要です。ForループでBukkitタスクが完了するまで待つ
ここに私のコードがあります。
for (String line : commandStrings) {
line = line.trim();
line = line.replaceAll("\\{PLAYERNAME\\}", target.getName());
util.log(line);
char[] lineArray = line.toCharArray();
if (lineArray.length > 1) {
if (lineArray[0] == '/') {
String command = util.removeElt(lineArray, 0);
util.log(command);
if (!(config.getBoolean("Command Strings." + args[2] + ".delay.firstExecuteDelay")) && count == 0) {
consoleExecuteTask = getTask(command);
BukkitTask task = scheduler.runTask(this.plugin, consoleExecuteTask);
continue;
} else {
consoleExecuteTask = getTask(command);
BukkitTask task = scheduler.runTaskLater(this.plugin, consoleExecuteTask, (delay * 20L));
util.log("ran later");
continue;
}
} else {
util.log("Invalid Command : \" " + String.valueOf(lineArray) + " \" in Command String: " + args[2]);
continue;
}
} else {
continue;
}
}
sender.sendMessage(prefix + ChatColor.GREEN + "Command String : " + args[2] + "Executed.");
return true;
これは、実行するコマンドとそれぞれの間に遅延がある設定から文字列リストを取得することです。私は第2の設定のためのコマンドを実行すると はここで、
preset2:
delay:
global_delay: true
global_delayString: "10s"
firstExecuteDelay: true
commands:
- "/effect {PLAYERNAME} speed 30 5"
- "/effect {PLAYERNAME} 16 30 5"
その部分の設定です。問題は、最初のコマンドが実行されるのを待ってから、forループ内の2番目のコマンドラインに移ることではないということです。メインスレッドを凍らせずに最初のコマンドを待つようにするにはどうすればいいですか?実行可能ファイルの重要なセクションは次のとおりです。
public consoleExecuteTask(CommandStrings plugin, String command) {
this.plugin = plugin;
this.command = command;
plugin.getLogger().info("called");
running = true;
}
public void run() {
plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(),command);
running = false;
plugin.getLogger().info("ran " + command);
}
私はこの方法でタスクを取得しています。
public static consoleExecuteTask getTask(String line) {
if (consoleExecuteTask == null) {
consoleExecuteTask = new consoleExecuteTask(plugin, line);
}
return consoleExecuteTask;
}
それでは、どのよう私も実行可能にコマンドのすべてを取得するのでしょうか? forループを新しい実行可能ファイルに移動するだけですか?また、問題は、コードの他の半分ではコマンド間の遅延が異なるため、遅延の異なるループを実行するたびに実行可能ファイルを作成する必要があることです。 –