2016-05-15 15 views
0

マイコードは、ゲーム「Minecraft」に関するものです。私はArray項目リストにランダムな項目を落として、うまくいくようにしたい。Java EventHander制限(時間)

私はEventHandler用の一種のスケジューラーを設定しようとしています。 EventHandlerを1分に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

関連する問題