我目前有一個延遲任務,只要點擊一個按鈕就會運行。 單擊此按鈕將布爾值切換爲true
,7秒後,延遲任務再次將其設置爲false
。創建另一個任務時取消延遲任務
但是,會發生什麼情況是,如果一個人多次單擊該按鈕,布爾值會打開和關閉,打開和關閉等等,因爲延遲的任務堆積如山。 如果多次單擊按鈕而不是將所有延遲的任務彼此堆疊在一起,是否有簡單延長延遲任務的方法?
因此,假設一旦點擊按鈕,延遲任務將等待7秒鐘,然後將布爾值從true
切換爲false
。 我該如何更改代碼,以便在延遲任務未執行時再次按下該按鈕時,它將取消上一個任務,並簡單地執行下一個延遲任務(我正在使用這個服務器,因此取消上一個任務可能不會這意味着這是實際的延遲任務,但其他任務)?
@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);
}
}
}