私は現在、ボタンをクリックするたびに実行される遅延タスクを持っています。 ボタンをクリックするとブール値がtrue
に切り替わり、7秒後に遅延タスクによってfalse
に再び設定されます。他のタスクが作成されたときに遅延タスクをキャンセルする
しかし、人がボタンを何回かクリックすると、遅延タスクが積み重なっているため、ブール値のオン/オフやオン/オフなどの切り替えが行われます。 すべての遅延タスクをお互いに積み重ねるのではなく、ボタンを何度もクリックすると、単に遅延したタスクを延長する方法はありますか?
遅延タスクは、ボタンをクリックするとブール値をtrue
からfalse
に切り替える前に7秒間待機するとします。 遅延したタスクが実行されていないときにボタンを再度押すと、直前のタスクをキャンセルし、単に次の遅延タスクを実行するようにコードを変更します(私はこれをサーバーに使用しています。それは実際に遅延されたタスクであったが、他のタスクであったことを意味する)?イベントは、コードが実行する必要がある場合は、検証するisDamaged
変数を使用することができ、同じダメージイベントの回目以降を実行していないことを確実にするために
@EventHandler
public void damage (EntityDamageEvent event) {
Entity victim = event.getEntity();
if (event instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent edbeEvent = (EntityDamageByEntityEvent) event;
if(edbeEvent.getDamager() instanceof Player && victim instanceof Player) {
EntityDamageByEntityEvent edbeEvent1 = (EntityDamageByEntityEvent) event;
Entity attacker = edbeEvent1.getDamager();
//Checks if both players are humans and not NPCS.
final Player player = (Player) victim;
final Player player2 = (Player) attacker;
//Saving the players as the variable Player.
Damagelist.add(player);
Damagelist.add(player2);
//Adds both players to the hashmap to be used by other classes.
isDamaged = true;
//Toggles the boolean to true.
int delay = plugin.getConfig().getInt("StunDuration") * 20;
//The above line gets the delay time from the config.yml file.
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
Damagelist.remove(player);
Damagelist.remove(player2);
//After an x amount of time, removes players from hashmap.
isDamaged = false;
playeradd = true;
//Toggles the booleans around.
}
}, delay);
}
}
}