2016-05-22 5 views
0

Die Fliese beschreibt nicht richtig, so dass es im, es würde versuchen und beschreiben hier:Wie eine Timer serverweit setzen

Ich habe ein bukkit Plugin, es ist ein Mini-Spiel.

Es muss einen Code laufen für 10 Minuten und dann einen anderen Code ausführen, bis das Spiel

abgeschlossen Im Moment habe ich dies: Timer Timer = new Timer(); timer.schedule (neu Timertask() {

  public void run() { 

       // code for 10 minutes 

      } 

     }, 600000); 

// Code für die Zeit nach

Dennoch ist dies wirkt sich nur auf einen einzigen Spieler und nicht diese Welt. Also, wenn ein Spieler beitritt wird er 10 warten Minuten und dann laufen den anderen Teil des Codes und so weiter, wenn der Zweck ist die 10 Minuten Start Couting selbst, auch wenn es keinen Player gibt Danke

+0

Sie mehr Problem geben könnte? http://www.tutorialspoint.com/java/util/timer_schedule_period.htm – Rafal

Antwort

1

Ihr Problem wird wahrscheinlich verursacht, weil Ihr Code alle ausgelöst wird durch ein Ereignis? Bedeutung es wird nur jemals effe ct der Spieler, der das Ereignis ausgelöst hat.

Stattdessen benötigen Sie ein generisches Plugin, das nicht auf Ereignisse (außer Login) triggert, sondern stattdessen einen Timer verwendet und dann eine Liste aller Spieler ergreift und Ihren Code auf jedem/allen ausführt. Dann nach 10 Minuten wird es zu Ihrem anderen Code und führen Sie das für den Rest der Zeit.

Edit: grobes Beispiel:

import org.bukkit.plugin.java.JavaPlugin; 

    public final class {$PluginName} extends JavaPlugin { 
     @Override 
     public void onEnable() { //This should proberbly be done onCommand rather than onEnable 
      Thread thread = new Thread(new Runnable() { 

       @Override 
       public void run() { 
        long time = System.currentTimeMillis(); 
        while (some condition....){ 
         //load list of players 
         //now iterate through player list and do your code 
         //check if 10min has passed: 
         if ((System.currentTimeMillis() - time) > 600000){ 
          //now break the loop and run your other code for the rest of the minigame 
          break; 
         } 
        } 
        //code for the rest of the minigame 
        while (true){ 
         //load list of players 
         //now iterate through player list and do your code for the rest of the time 
        } 
       } 
      }); 
      thread.start();    
     } 
    } 
+0

Bearbeitet, um ein besseres Beispiel für Ihre Situation zu zeigen. – sorifiend

+0

Ja. Ich habe das irgendwann selbst herausgefunden, ich glaube ich war dumm. Jetzt habe ich noch ein kleines Problem. Wie starte ich eine andere Datei (gamestart.class) aus der Hauptdatei? Clearifiyng: Ich möchte den Code, den Sie mir in einer anderen Datei gegeben haben, aus der Hauptdatei starten. Vielen Dank! – hiperbolt

+0

@sorifiendsoz hat vergessen, dich zu identifizieren – hiperbolt