2016-06-11 3 views
0

この問題は、カウントダウンタイマーがマイナスになり、 0 -1、-2、-3など は、私はこの問題を解決することができますどのように誰もが知っている、今、かなり長い時間のためにそれで苦労されて:ここではPBukkitカウントダウンタイマーは無限(2,1、-1、-2など)をカウントダウンし始めます。

は私のカウントダウンクラスです:

@Override 
public void run() { 
    if (timeUntilStart == 0) { 
     if (!Game.canStart()) { 
      if(Bukkit.getOnlinePlayers().size() <= 2) { 
      plugin.restartCountdown(); 
      ChatUtilities.broadcast(ChatColor.RED + "Not enough players to start. Countdown will"); 
      ChatUtilities.broadcast(ChatColor.RED + "restart."); 
      for (Player p : Bukkit.getOnlinePlayers()) p.playSound(p.getLocation(), Sound.ENDERDRAGON_WINGS, 5, 1); 
      return; 
     }else{ 
      if(Game.canStart()) { 
       if(Bukkit.getOnlinePlayers().size() >= 2) { 
      Game.start(); 
       } 
      } 
     } 

    } 

    } 
    boolean broadcast = false; 

    for (Player p : Bukkit.getOnlinePlayers()) { 
     p.setLevel(timeUntilStart); 

     if (timeUntilStart < 11 || timeUntilStart == 120 ||timeUntilStart == 60 || timeUntilStart == 30) { 
      p.playSound(p.getLocation(), Sound.ORB_PICKUP, 5, 0); 
      if (timeUntilStart == 1) p.playSound(p.getLocation(), Sound.ORB_PICKUP, 5, 1); 
      broadcast = true; 
     } 
    } 


    if (broadcast) ChatUtilities.broadcast(String.valueOf(timeUntilStart) + " §6Seconds until the game starts!");{ 

    } 
    { 
    timeUntilStart -= 1; 

} 
} 
} 
+0

のようなカウントダウンをキャンセルします。おそらく、この混乱を取り除くのに役立つだろう。 –

+0

'timeUntilStart = 0; {timeUntilStart = 0;;'の後に 'timeUntilStart - = 1;'を使用してゼロより下にならないようにするにはどうすればよいですか? –

+0

@AndrewMortonそれは動作しません、またはほとんど私たちは知らない。 run()メソッドは、BukkitRunnableまたはタスク内で実行されることに注意してください。したがって、timeUntilStartの値を0に設定すると、タスクはまだ実行されているので、変数に1を引きます。だから、彼は糸#停止や他の同様の方法を使用する必要があります。 – RoccoDev

答えて

0

メソッドが返され、timeUtilStartがデクリメントされない唯一のケースは、

timeUntilStart == 0 && !Game.canStart() && Bukkit.getOnlinePlayers().size() <= 2 
です。

コード内の最初の3つのブロックifで定義されています。
これは、3人以上のプレイヤーの周りにカウントダウンが止まらない理由を説明しています。

私はこの混乱が乱雑で起こったと信じています{}ブロックと字下げです。一歩踏み込んで、もう一度書き込んだコードをよく読んで、括弧やインデントを修正してください。

良いフォーマットは無意味な雑用ではなく、既に書いたものを理解するのに役立つ重要なツールです。

0

あなたはbukkitスケジューラを使ってみましたか?人々は、bukkitのAPIがカウントダウンをうまく処理できることを忘れてしまいがちです。ただ、実行可能な追加実装されていないメソッドを使用し、プラグインとしてのあなたのJavaPlugin拡張クラスを入れて、この

myInteger = Bukkit's.getScheduler.scheduleSyncRepeatingTask(plugin, new runnable(), 0L, 20L) 

でスケジューラを呼び出し、0Lが最初に実行する前にティックされ、20Lは、各実行の間ティックれます。

は不要 `{}`ブロックの多くは、特に終わりに向かって、あなたのコードであり、この

Bukkit's.getScheduler.cancelTask(myInteger) 
関連する問題