Ich habe derzeit eine verzögerte Aufgabe, die ausgeführt wird, wenn ich auf eine Schaltfläche klicke. Durch Klicken auf die Schaltfläche wird ein Boolean auf true
umgeschaltet und nach 7 Sekunden wird die verzögerte Aufgabe wieder auf false
gesetzt.Abbrechen einer verzögerten Aufgabe, wenn eine andere Aufgabe erstellt wird
Wenn jedoch eine Person mehrmals auf die Schaltfläche klickt, wird der Boolesche Wert ein- und ausgeschaltet, ein- und ausgeschaltet usw., da sich die verzögerten Aufgaben häufen. Gibt es eine Möglichkeit, die verzögerte Aufgabe einfach zu verlängern, wenn die Schaltfläche mehrmals angeklickt wird, anstatt dass sich alle verzögerten Aufgaben aufeinander stapeln?
Nehmen wir an, dass die verzögerte Aufgabe 7 Sekunden warten würde, bevor der Boolesche Wert von true
zu false
gewechselt wird, sobald die Schaltfläche geklickt wird. Wie würde ich den Code ändern, wenn die Taste erneut gedrückt wird, während die verzögerte Aufgabe nicht ausgeführt wurde, löscht sie die vorherige und führt einfach die nächste verzögerte Aufgabe aus (ich benutze dies für einen Server, also kann die vorherige Aufgabe nicht abgebrochen werden bedeuten, dass es die eigentliche verzögerte Aufgabe war, aber eine andere Aufgabe)?
@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);
}
}
}