• 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!

/start Command bei BedWars Plugin

D

deleted183638

Guest
Hey, ich habe ein plugin für meinen server gemacht, es ist ein Spielmodus der fast fertig ist. Dieser nennt sich BedWars. Das Prinzip kennt sicherlich jeder.
Ich bin mit allem fertig bis auf den /start für YT / Admins. Ich habe schon versucht den Wert i auf 5 zu setzen aber ich habe es nicht geschafft, deshalb brauche ich eure Hilfe? Wie kann ich das machen?

Code:
General:
Main Klasse wo der Countdown steht:

    publicvoidCD(){

      

        task=Bukkit.getScheduler().runTaskTimer(this,newRunnable(){

          

            @Override

            publicvoidrun(){

              

                if(Bukkit.getOnlinePlayers().size()==2){

                    i--;

                    for(Playerp:Bukkit.getOnlinePlayers()){

                      

                        p.setLevel(i);

                      

                    }

                    if(i==90||i==60||i==45||i==30||i==20||i==10||i==5||i==4||i==3||i==2||i==1){

                      

                        Bukkit.broadcastMessage(pr+"Das Spiel startet in "+a+i+n+" Sekunde(n).");

                      

                    }else if( i == 0){

                        GameManager.setState(GameManager.GAME);

                        for(Playerp:Bukkit.getOnlinePlayers()){

                          

                            if(Methods.hasTeam(p)){



                            }else{

                              

                                if(blau.size()<=Lila.size()&&blau.size()<=rot.size()&&blau.size()<=gelb.size()){

                                    blau.add(p.getName());

                                }elseif(Lila.size()<=blau.size()&&Lila.size()<=rot.size()&&Lila.size()<=gelb.size()){

                                    Lila.add(p.getName());

                                }elseif(rot.size()<=blau.size()&&rot.size()<=Lila.size()&&rot.size()<=gelb.size()){

                                    rot.add(p.getName());

                                }elseif(gelb.size()<=blau.size()&&gelb.size()<=Lila.size()&&gelb.size()<=rot.size()){

                                    gelb.add(p.getName());

                                }

                              

                            }

                            Stringteam=Methods.getExactTeam(p).toLowerCase();

                            p.teleport(LocationAPI.getLocation("Spawn."+team));

                            SQLStats.addPlayed(p.getUniqueId().toString(),1);

                        }

                      

                        Spawner.StartSpawning();

                        Methods.SetupGame();

                    }

                  

                }else{

                    i = 31;

                }

              

            }

        }, 0, 20);

      

    }






Der Code von dem GameManager:



package utils;











publicenumGameManager{



  

    LOBBY(),GAME(),Restart();

  



  

    privatestaticGameManagercurrentstate;

  

  

  

    publicstaticvoidsetState(GameManagerstate){

      

        GameManager.currentstate=state;

      

    }

  

    publicstaticbooleanisState(GameManagerstate){

      

        returnGameManager.currentstate==state;

    }

  

  

    publicstaticGameManagergetState(){

      

      

        returncurrentstate;

    }

  

    publicstaticStringgetStatus(){

        Strings="";

      

        if(isState(GameManager.LOBBY)){

            s="§7→ §aLobby§7 ←";



        }elseif(isState(GameManager.GAME)){



            s="§7→ §4Ingame§7 ←";

                  

        }elseif(isState(GameManager.Restart)){



            s="§7→ §bRestart§7 ←";

                  

        }

        returns;

      

      

    }

  

}
 
Zuletzt bearbeitet von einem Moderator:

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Es ist leider nicht lesbarer geworden. Dies liegt vor allem daran, dass in einigen Zeilen die Leerzeichen fehlen und dass du alle Dateien hintereinander schreibst. Bitte verwende für jede Quelldatei einen eigenen CODE-Abschnitt und kopiere die Zeilen neu mit allen Leerzeichen.
 

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Hallo @SAQTV!
Versuche, möglichst objektorientiert zu programmieren und nicht deine ganze Logik in eine Methode zu stopfen! Der Code und dessen Funktion ist meistens viel übersichtlicher und verständlicher für Dich selbst und auch für andere Programmierer. Dein Problem löst du zum Beispiel, indem du die verbleibenden Sekunden als Attribut in deiner Klasse setzt. So kannst Du dessen wert von fast allen Methoden deiner Klasse beliebig ändern. Hier ein Vorschlag für eine Struktur:
Code:
import com.google.common.collect.Sets;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask;

import java.util.Set;

/**
* Created by sandro on 13.05.17.
*/
public class CountdownMachine {

    private int remainingSeconds;
    private final JavaPlugin javaPlugin;
    private BukkitTask schedulerTask;

    private static final Set<Integer> TIMER_BROADCAST_VALUES = Sets.newHashSet(90, 60, 45, 30, 20, 10, 5, 4, 3, 2, 1);

    public CountdownMachine(final JavaPlugin javaPlugin, int seconds) {
        this.remainingSeconds = seconds;
        this.javaPlugin = javaPlugin;
    }

    public void start() {
        Runnable runnable = this.getRunnable();
        this.scheduleRunnable(runnable);
    }

    public void setRemainingSeconds(int seconds) {
        this.remainingSeconds = seconds;
    }


    private void scheduleRunnable(Runnable runnable) {
        this.schedulerTask = Bukkit.getScheduler().runTaskTimer(this.javaPlugin, runnable, 20, this.remainingSeconds * 20);
    }


    private Runnable getRunnable() {
        return () -> {
            this.remainingSeconds--;
            if (this.remainingSeconds <= 0) {
                this.schedulerTask.cancel();
                this.setupGame();
            }
            this.broadcastRemainingSeconds();
            //Deine Logic

        };
    }

    private void broadcastRemainingSeconds() {
        int seconds = this.remainingSeconds;
        if (TIMER_BROADCAST_VALUES.contains(seconds)) {
            Bukkit.broadcastMessage("Das Spiel startet in " + seconds + " Sekunde(n).");
        }
    }

    private void setupGame() {
        //...
    }
}

Besten Gruß,
Sandro
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
@PrimitiverTyp getRunnable() ist aber auch kein besonders schöner Code. Du könntest entweder BukkitRunnable verwenden oder die Methoden umbenennen und umformen. Ein besserer Name wäre z.B. "countdown()". Und den Inhalt des Lambdas dort direkt ausführen. Der Rückgabetyp wäre entsprechend "void". Diese Methode kannst du dann direkt als Runnable verwenden mittels "this::countdown".
 
Oben