ServerPlugin Countdown nur bei dem ersten joinen starten [MiniGame]

Dieses Thema im Forum "Programmierung" wurde erstellt von Disk, 31. Januar 2015.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Disk
    Offline

    Disk

    Registriert seit:
    20. September 2014
    Beiträge:
    29
    Hey,
    ich bin gerade dabei ein MiniGame zu coden und möchte, dass wenn 2 Spieler online sind ein Countdown von 60-0 nach unten zählt. Jedoch hab ich bei meinen jetzigen Code das Problem, dass zwar wenn ein Spieler online ist (und die benötigte Spieleranzahl von 2 auf 1 gestellt wurde) alles optimal funktioniert, jedoch wenn ein zweiter Spieler joint Bugt der Countdown rum und es sind gleichzeitig zwei Countdowns welche beide sehr schnell Ablaufen.
    Ich hoffe ihr könnt mir helfen! Hier mein Code:
    Code (Text):
    1.  
    2.     if (Bukkit.getServer().getOnlinePlayers().length == 2) {
    3.        countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    4.  
    5.          @Override
    6.          public void run() {
    7.            for (Player u : Bukkit.getOnlinePlayers()) {
    8.              u.setExp(high/60*1.0F);
    9.              u.setLevel(high);
    10.            //if(high != 0) {
    11.            //   high--;
    12.            //}
    13.              high -= 1;
    14.            if(high == 0) {
    15.              Bukkit.broadcastMessage("§3Du wurdest geportet!");
    16.            }
    17.            if(high <= 0) {
    18.              Bukkit.getScheduler().cancelTask(countdown);
    19.            }
    20.            }
    21.        }
    22.      }, 0,20);
    23.      }
    24.  
    Vielen Dank schonmal für eure Hilfe!
     
    #1
  2. majo2702
    Offline

    majo2702

    Registriert seit:
    11. Juni 2012
    Beiträge:
    48
    Ich glaube du musst für die OnlinePlayers eine ArrayList erstellen.
     
    #2
  3. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Hallo Disk,

    du musst überprüfen, ob der Scheduler schon einmal läuft. Wenn musst du das erstellen des Schedulers überspringen.

    Am einfachsten setzt du einen Boolean ein, um das zu unterscheiden.

    Mfg,
    Thalion
     
    #3
    CraftingDiamond gefällt das.
  4. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Noch ein kleiner Tipp falls auch mehr als 2 Spieler spielen können solltest du das:
    Code (Text):
    1.  
    2. if (Bukkit.getServer().getOnlinePlayers().length == 2)
    3.  
    Durch das hier ersetzen:
    Code (Text):
    1.  
    2. if (Bukkit.getServer().getOnlinePlayers().length >= 2)
    3.  
     
    #4
  5. Disk
    Offline

    Disk

    Registriert seit:
    20. September 2014
    Beiträge:
    29
    Wie meinst du das mit dem Boolean genau? Soll ich einen Boolean in einer config.yml abspeichern oder was?

    Ich hab es jetzt mal mit GameStates versucht das schaut dann so aus:

    Im "onEnable" teil hab ich den GameState auf WAITING gesetzt jedoch funktioniert dies hier auch nicht. Ich hab mir als Hilfe die Nachrichten "Checkpoint1/2" ausgeben lassen "Checkpoint1" kommt immer bevor einer joint aber "Checkpoint2" kommt nicht und der Countdown startet auch nicht...


    Okey, danke hab ich geändert :)
     
    #5
  6. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Bin zwar kein Profi mit Plugins aber einen so großen unterschied gibt es zu forge nicht ^^

    Ich glaube mit dem Boolean meinte er etwas wie Countdown = false
    und das du nachdem du ihn gestartet hast ihn auf True stellst
    Und halt bevor du einen neuen machst überprüfst ob Countdown auf False ist
     
    #6
  7. Disk
    Offline

    Disk

    Registriert seit:
    20. September 2014
    Beiträge:
    29
    danke, ich weis aber wenn es so geht nicht wie der genaue code dafür ist, nur das ich irgendwie einen boolean nutzen soll :)

    #push
     
    #7
  8. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Ok bin mir zwar nicht sicher wie es bei Bukkit aussieht aber Probier mal das hier:
    Code (Text):
    1. int Countdown = 0;
    bzw.
    Code (Text):
    1. Boolean Countdownt = false;
    und dann den Coundown hierrein einbauen:
    Code (Text):
    1.  
    2. if(Countdown = 1){
    3.      
    4.     }
    5.     else{
    6.         Countdown = 1;
    7.         /* Hier Der Countdown Code*/
    8.     }
    9.  
    bzw wenn du den Boolean benutzt die 1 durch True ersetzen.
    Vergiss nicht den Countdown wieder auf 0 zu setzen wenn er wieder starten kann.

    P.s. die 1 Steht indem fall für True und eine 0 für False ich weiß nicht ob Booleans bei Bukkit effizienter ist
     
    #8
  9. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    "if(Countdown = 1){"

    Aus diesem Grund lernt man ERST Java und schreibt dann Plugins für andere Software. Dann verfasst man auch nicht irgendwelche beiträge, wo man total falsche Datentypen verwendet und komische Überlegungen zur Performance.

    Das selbe gilt auch für den Threadersteller. Jede Hilfe hier ist sinnfrei, solange sie nicht die komplette Lösung ist. Ohne das verständnis dafür, in welcher Reihenfolge Events ausgeführt werden und was ein Sichtbarkeitsbereich ist, wirst du nicht verstehen, warum du hier Fehler hast. Und das sind Java Grundlagen, die absolut nichts mit Bukkit zu tun haben.
     
    #9
  10. JTK222
    Online

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Das letzte mal als ich mit java gearbeitet habe war vor fast 3 Jahren und in anderen Programmier sprachen bevorzugen viele einen integer anstelle eines Booleans. Und das letze mal als ich java genutzt habe war es ohne Eclipse und ein Mod ohne Modloader oder Forge ^^
     
    #10
Status des Themas:
Es sind keine weiteren Antworten möglich.