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

Spigot Rangsystem

Firnen

Minecrafter
Registriert
25 Mai 2019
Beiträge
25
Diamanten
300
Hey ich sitze im Moment an einem Rangsystem. Dies Funktioniert und der Server nimmt das Plugin auch an. Die Ränge existieren ebenso. Über die Textdatei kann ich an einzelne Spieler Ränge verteilen. Bei dem Versuch einen Rang im Spiel zu vergeben kommen allerdings immer folgende Fehlermeldungen:

-Der Befehl /rank Spieler Rang wird von dem Server nicht erkannt, trotzdem kommt die Fehlermeldung.
-Der (Spieler) ist nicht online und dann noch das der Rang nicht existiert.

Vielleicht habe ich nur etwas beim schreiben vertauscht. Finde den Fehler allerdings nicht und weiß nicht was ich noch verändern kann, damit es funktioniert .
Ich hoffe das Ihr mir weiter helfen könnt.

Ps: Falls Ihr mir verraten könnt, wie ich einzelnen Klassen auch noch einzelne Permissions zuweisen kann, wäre ich euch echt dankbar.

Hier ein Teil des Codes:
Rang.PNG
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Ok, dachte es läge daran.

JoinListener() ist aber eine Klasse mit einem implementierten Listener. Deswegen regestrierst du eine klasse mit Listener, und nicht nur einen Listener^^

Aber wenn eclipse rummeckert muss ich sagen, das ich dann von meinem entfernten standpunkt aus, ratlos bin^^
 

SirYwell

PlotSquared Entwickler
Registriert
30 Juni 2017
Beiträge
540
Diamanten
488
Minecraft
SirYwell
Nee, da sehe ich keine Fehler,
was mir aber komisch vorkommt sind die Zeilen in der Main Klasse
Code:
    FileHandler FileHander = new FileHandler();
    PlayerHandler PlayerHandler = new PlayerHandler();
    Events Events = new Events(PlayerHandler);
    getServer().getPluginManager().registerEvents(Events, this);

vorallem die letzte Zeile, normalerweise registriert man so:
Code:
getServer().getPluginManager().registerEvents(new Events(), this);
im Übrigen, würde ich eine Listenerklasse niemals einfach nur Events nennen ;)
Sein Code an dieser Stelle ist zwar nicht unbedingt sauber (großgeschriebene Variable, ...), aber vollkommen legitim, was die Funktionalität betrifft.

Auszug aus den Javadocs zur getCommand-Methode:
Returns: the plugin command if found, otherwise null

Wenn der Fehler also tatsächlich dadurch ausgelöst wird, würde ich mal überprüfen, ob der Inhalt der plugin.yml mit dem Code zusammenpasst.
 

Firnen

Minecrafter
Registriert
25 Mai 2019
Beiträge
25
Diamanten
300
Habe den Konsolenfehler inzwischen gefunden. Da gibt es keine Beschwerden mehr. Allerdings meckert nun Minecraft rum. Kommt nun wieder die Fehlermeldung mit:

Fehler: (Spieler) ist nicht online und Fehler: (Rang) ist kein Rang!
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Naja, der Server erkennt es nicht als Command, da du hier ein EVENT nutzt!
Die Fehlermeldung dass, der Spieler nicht existiert, kommt, da das Event trotzdem getriggert wird...
Und der Spieler existiert nicht, weil du bei "target!=null" dadrunter auch eine Nachricht ausgibst, dass der Spieler nicht online ist... Also richtig blöd...
Und der Warum es nicht funktioniert ist, weil du beim rankName toLowerCase , aka Kleinschreibung machst, und danach nach einem bspw. "Admin" vergleichst. jedoch wird es wenn dann nur "admin" sein, was bei einer equal als falsch ausgegeben wird.
Also entweder equalsignoreCase verwenden, oder to lowercase nicht nehmen^^

P.S.: Beim nächsten mal bitte als Code reinschreiben^^ (So kann man bestimmte Stellen zitieren, ist leichter)
P.P.S.: Command einrichten nicht vergessen^^

Wie ich schon geschrieben habe, das Event mal rausholen^^ und als Command machen
Weil der fehler liegt hier:
Code:
 if(target.isOnline()) {
                    int rankValue = 0;                 
                    p.sendMessage("§cFehler:" + targetName + "§cist nicht online!"); <= Das muss raus.
                    String RankName = args[2].toLowerCase(); //Hier wird alles in Kleinbuchstaben angegeben
                    if(RankName.equals("Admin")) { //aber hier wird "Admin" abgefragt
                        rankValue = PlayerHandler.ADMIN;
                    }else if(RankName.equals("Developer")) {
                        rankValue = PlayerHandler.DEVELOPER;
                    }else if(RankName.equals("Supporter")) {
                        rankValue = PlayerHandler.SUPPORTER;
                    } else if(RankName.equals("Bürger")) {
                        rankValue = PlayerHandler.BÜRGER;
                    }else if(RankName.equals("Spieler")) {
                        rankValue = PlayerHandler.SPIELER; //Deshalb wird das getriggert
                    }else {
                        rankValue = -1;
                    }
                    if(rankValue >= 0) { //Und da du bei -1 bist geht das hier nicht rein
                        if(rankValue < rank) {
                            if(PlayerHandler.getRank(target) < rank) {
                                if(PlayerHandler.setRank(target, rankValue)) {
                                    p.sendMessage(target.getName() + " §ahat erfolgreich den" + RankName +"§aRang erhalten!"); 
                                    target.sendMessage("§aDein Rang neuer Rang ist nun der " + RankName + "§aRang!");
                                    PlayerHandler.refreshRanks();
                                }
                                }else {
                                p.sendMessage("§cAchtung! Du kannst keine Ränge verändern, die höher pder gleich zu deinem sind.");
                            }
                        }else {
                            p.sendMessage("§c Achtung! Du kannst keine Ränge vergeben die gleich oder höher sind als deiner!");
                        }
                    }else {
                        p.sendMessage("§CFehler: " + RankName + "  §cist kein Rang!");
                    }
 

Firnen

Minecrafter
Registriert
25 Mai 2019
Beiträge
25
Diamanten
300
Wie ändere ich das mit dem Event am besten um? Nutze ja gerade
Code:
public void onCommand(PlayerCommandPreprocessEvent e)

Soll ich für den ganzen Abschnitt nun einen CommandExecutor aufsetzen bzw. dies in die Command Klasse umschreiben?
 
Oben