Java EventHander限制(时间)

时间:2016-05-15 10:02:20

标签: java minecraft bukkit

我的代码是关于游戏" 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秒执行一次。

有人为我提供解决方案吗?

非常感谢!

1 个答案:

答案 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();
    }
}

如果不起作用,请评论:)