2016-05-15 74 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