Java EventHander 限制(时间)

标签 java minecraft bukkit

我的代码是关于游戏“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/

相关文章:

java - 从互联网下载文件并提取其中的一些内容

java - 如何将 expandablelistview 的默认扩展限制设置为 4?

java - 在 spring security 中禁用浏览器身份验证对话框

java - Minecraft 模组 ".bindTexture"不起作用

java - 重新初始化变量

Java - MySQL - 连接到 mysql 数据库时出错

Java 倒计时与线程

java - Minecraft Forge EntityJoinWorldEvent 返回错误的位置!错误

java - 自定义未经检查的异常不会导致抛出和调用方方法返回

Java/bukkit : Run "For" method 1 time in runnable?