我目前有一个延迟任务,只要点击一个按钮就会运行。 单击此按钮将布尔值切换为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);
}
}
}