Java EventHander 限制(时间)
Java EventHander limitation (Time)
我的代码是关于游戏“Minecraft”的。我想要一个数组项目列表来丢弃随机项目,这很好用。
我正在尝试为 EventHandler 设置一种调度程序。
我希望 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();
}
}
如果还不行,请评论:)
我的代码是关于游戏“Minecraft”的。我想要一个数组项目列表来丢弃随机项目,这很好用。
我正在尝试为 EventHandler 设置一种调度程序。 我希望 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();
}
}
如果还不行,请评论:)