2016-05-15 68 views
0

我的代码是关于游戏“Minecraft”。我想要一个数组项目列表来放弃随机项目,什么工作正常。Java EventHander限制(时间)

我正在尝试为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秒执行一次。

有没有人有我的解决方案?

非常感谢!

回答

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

如果它不能正常工作,请评论:)

+0

做工精细,非常感谢! – iCarnagy