我的代码是关于游戏“Minecraft”的。我想要一个数组项目列表来删除随机项目,这很好用。
我正在尝试为事件处理程序设置一种调度程序。 我希望 EventHandler 每分钟只执行 5 次,或者每 12 秒执行一次。 如果我使用“Bukkit”“runTaskLater”函数,代码会延迟执行,但延迟后它会永久运行。
这里有我的原始代码,没有任何调度程序。
@EventHandler
public void on(PlayerMoveEvent e) {
Player p = e.getPlayer();
if(p.getLocation().getBlock().getType() == Material.STONE_PLATE) {
if(p.getLocation().subtract(0D, 1D, 0D).getBlock().getType() == Material.STAINED_CLAY) {
Block block = p.getLocation().getBlock();
Random ran = new Random();
int auswahl = ran.nextInt(2);
int zahl = ran.nextInt(main.Drops.size());
ItemStack itemstack = main.Drops.get(zahl);
block.getWorld().dropItemNaturally(p.getLocation(), itemstack);
}
}
}
现在这个处理程序应该每 12 秒执行一次。
有人可以帮我解决吗?
非常感谢!
最佳答案
据我了解,你想要有一个冷却时间。只需将最后一个事件的时间存储在变量中,然后检查当前时间是否比当前时间早 12 秒:
private long lastTime = System.currentTimeMillis();
@EventHandler
public void on(PlayerMoveEvent e) {
if (lastTime < System.currentTimeMillis() - 12000) {
Player p = e.getPlayer();
if(p.getLocation().getBlock().getType() == Material.STONE_PLATE) {
if(p.getLocation().subtract(0D, 1D, 0D).getBlock().getType() == Material.STAINED_CLAY) {
Block block = p.getLocation().getBlock();
Random ran = new Random();
int auswahl = ran.nextInt(2);
int zahl = ran.nextInt(main.Drops.size());
ItemStack itemstack = main.Drops.get(zahl);
block.getWorld().dropItemNaturally(p.getLocation(), itemstack);
}
}
lastTime = System.currentTimeMillis();
}
}
如果不起作用,请评论:)
关于Java EventHander 限制(时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236914/