我的代码是关于游戏" Minecraft "。我想要一个数组项列表来删除随机项,什么工作正常。
我正在尝试为EventHandler设置一种调度程序。 我希望EventHandler每分钟只执行5次,或者每12秒执行一次。 如果我使用" Bukkit" " runTaskLater"函数,代码执行延迟,但延迟后它运行永久。
这里有没有任何Scheduler的原始代码。
@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秒执行一次。
有人为我提供解决方案吗?
非常感谢!
答案 0 :(得分:1)
据我所知,你想要一个冷却时间。只需将最后一个事件的时间存储在一个变量中,然后检查当前时间是否高出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();
}
}
如果不起作用,请评论:)