• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Countdown nur bei dem ersten joinen starten [MiniGame]

Status
Für weitere Antworten geschlossen.

Disk

Minecrafter
Registriert
20 September 2014
Beiträge
29
Alter
39
Diamanten
300
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:
    if (Bukkit.getServer().getOnlinePlayers().length == 2) {
       countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {

         @Override
         public void run() {
           for (Player u : Bukkit.getOnlinePlayers()) {
             u.setExp(high/60*1.0F);
             u.setLevel(high);
           //if(high != 0) {
           //   high--;
           //}
             high -= 1;
           if(high == 0) {
             Bukkit.broadcastMessage("§3Du wurdest geportet!");
           }
           if(high <= 0) {
             Bukkit.getScheduler().cancelTask(countdown);
           }
           }
       }
     }, 0,20);
     }
Vielen Dank schonmal für eure Hilfe!
 

Thalion

Minecrafter
Registriert
22 Juli 2014
Beiträge
26
Diamanten
5
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
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Noch ein kleiner Tipp falls auch mehr als 2 Spieler spielen können solltest du das:
Code:
if (Bukkit.getServer().getOnlinePlayers().length == 2)
Durch das hier ersetzen:
Code:
if (Bukkit.getServer().getOnlinePlayers().length >= 2)
 

Disk

Minecrafter
Registriert
20 September 2014
Beiträge
29
Alter
39
Diamanten
300
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
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:

if (Bukkit.getServer().getOnlinePlayers().length >= 2) {
Bukkit.broadcastMessage("Checkpoint1");
if (this.state == GameState.WAITING) {
Bukkit.broadcastMessage("Checkpoint2");
countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {

@Override
public void run() {
main.setState = GameState.LOBBY;
for (Player u : Bukkit.getOnlinePlayers()) {
u.setExp(high/60*1.0F);
u.setLevel(high);
//if(high != 0) {
// high--;
//}
high -= 1;
if(high == 0) {
Bukkit.broadcastMessage("§3Du wurdest geportet!");
}
if(high <= 0) {
Bukkit.getScheduler().cancelTask(countdown);
}
}
}
}, 0,20);
}
}

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...


Noch ein kleiner Tipp falls auch mehr als 2 Spieler spielen können solltest du das:
Code:
if (Bukkit.getServer().getOnlinePlayers().length == 2)
Durch das hier ersetzen:
Code:
if (Bukkit.getServer().getOnlinePlayers().length >= 2)
Okey, danke hab ich geändert :)
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
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
 

Disk

Minecrafter
Registriert
20 September 2014
Beiträge
29
Alter
39
Diamanten
300
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
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
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Ok bin mir zwar nicht sicher wie es bei Bukkit aussieht aber Probier mal das hier:
Code:
int Countdown = 0;
bzw.
Code:
Boolean Countdownt = false;

und dann den Coundown hierrein einbauen:
Code:
if(Countdown = 1){
     
    }
    else{
        Countdown = 1;
        /* Hier Der Countdown Code*/
    }

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
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Ok bin mir zwar nicht sicher wie es bei Bukkit aussieht

"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.
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
"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 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 ^^
 
Status
Für weitere Antworten geschlossen.
Oben