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

Reportsystem

SyntaxWolf

Redstoneengineer
Registriert
26 Oktober 2017
Beiträge
46
Diamanten
250
Hey,

Ich sitze seit heute an einem Reportsystem mit Login, aber der Login geht nicht und ich finde den fehler nicht.

Code:
package me.SyntaxWolf.ReportSystem.commands;

import me.SyntaxWolf.ReportSystem.Main;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;

public class CMD_Report_Login extends Command {

    public CMD_Report_Login(Main main) {
        super("report");
       
    }

    @Override
    public void execute(CommandSender sender, String[] args) {
        ProxiedPlayer p = (ProxiedPlayer) sender;
        if(sender instanceof ProxiedPlayer) {
            if(args.length == 1) {
                if(args[0].equalsIgnoreCase("login")) {
                    if(p.hasPermission("system.report.see")) {
                        if(!Main.login.contains(p)) {
                            p.sendMessage(Main.prefix + "Du hast dich erfolgreich in das Reportsystem §aeingeloggt§7!");
                            Main.login.add(p);
                            for (ProxiedPlayer all : ProxyServer.getInstance().getPlayers()) {
                                if(all.hasPermission("system.report.see")) {
                                    if(Main.login.contains(all)) {
                                        all.sendMessage(Main.prefix + ChatColor.RESET + p.getDisplayName() + "§7hat sich in das Reportsystem §aeingeloggt§7!");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    if(!(sender instanceof ProxiedPlayer)) {
                        sender.sendMessage("§cDu musst Spieler sein um diesen Befehl auszuführen!");
                    }
                }
            } else {
                if(p.hasPermission("system.report.see")) {
                    p.sendMessage("§c/report login");
                    p.sendMessage("§c/reports");
                    p.sendMessage("§c/report");
                    p.sendMessage("§c/report logout");
                }
            }
           
        } else {
            if(p.hasPermission("system.report.see")) {
                if(args[0].equalsIgnoreCase("login")) {
                    if(Main.login.contains(p)) {
                        p.sendMessage(Main.prefix + "§cDu bist bereits eingeloggt!");
                    }
                }
            }
        }
       
    }
}
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Die if-Abfragen sind recht durcheinander, das musst du neu sortieren. Du solltest zunächst die Permissions-Abfragen und die Abfrage ob es sich um einen Spieler handelt machen. Danach dann die Argumentanzahl in Verbindung mit der Abfrage der Argumente. Noch besser ist es, wenn du dem Befehl direkt die Permission zuweist bei super(...), so dass der Befehl ohne Permission erst gar nicht aufrufbar ist und nicht bei der Tabvervollständigung auftaucht. Ich hoffe, dass es sich bei Main.login um ein ConcurrentSet handelt. Wichtig ist hier auch, die UUID der Spieler statt ProxiedPlayer zu verwenden, um kein Speicherleck zu erzeugen.

Davon abgesehen sollte zumindest "login" funktionieren und dem aufrufenden Spieler zwei Meldungen anzeigen.
 

Baba43

Ehem. Teammitglied
Ehem. Teammitglied
Registriert
5 November 2012
Beiträge
869
Diamanten
60
Minecraft
baba43
Was soll denn "Der Login geht nicht" heißen?

Wenn du dein Programm verstehen willst, baue Textausgaben ein und dann findest du sehr wahrscheinlich auch den Fehler.

Schon die erste if-Anweisung ist übrigens sinnlos.
 
Zuletzt bearbeitet:

Baba43

Ehem. Teammitglied
Ehem. Teammitglied
Registriert
5 November 2012
Beiträge
869
Diamanten
60
Minecraft
baba43
Ist mir schon klar habe ich auch schon probiert, aber wenn nichts in der Konsole ausgegeben wird, was soll ich denn machen?
Als erstes kannst du genau das dann in deine Problembeschreibung schreiben ;-)

Du erzeugst da also ein Command, aber wird das auch registriert, so wie im Tutorial beschrieben?
 

Baba43

Ehem. Teammitglied
Ehem. Teammitglied
Registriert
5 November 2012
Beiträge
869
Diamanten
60
Minecraft
baba43
Eine Klasse in Java macht sich nicht selbstständig. Wenn du kein Objekt der Klasse erzeugst und damit irgendwas machst, dann passiert logischerweise nichts. Da du den dafür relevanten Code nicht gepostet hast, legt das die Vermutung nahe, dass dieser schlichtweg nicht existiert.

Also guck dir das verlinkte Tutorial an und versuch es noch mal.
 
F

Figz

Guest
Ich würde dir ja gerne helfen, jedoch ist dein Code scheinbar nicht mehr verfügbar.

Das Problem ist dass der Befehl nicht funktioniert. Was soll ich mehr davon sagen?
Die Frage die hier zu klären wäre, ist ob der Command garnicht oder nur zu einer bestimmten Stelle ausgeführt wird.
Wir haben nicht vor, dir deinen Code hier komplett funktionsfähig zur Verfügung zu stellen. Entweder du nimmst unsere Hilfe an oder du lässt es sein. Stinkig zu werden und auf unsere Fragen NICHT einzugehen hilft dir nicht weiter.

Du kannst dich glücklich schätzen, dass die Leute hier Spaß daran haben anderen zu Helfen und zum Teil auf sowelche Ratespielchen stehen ;)

  • ProxiedPlayer p = (ProxiedPlayer) sender;
if(sender instanceof ProxiedPlayer) {
In dieser Reihenfolge völlig sinnfrei.

Du hast schon einige Verbesserungsvorschläge erhalten. Wieso setzt du diese nicht erstmal um?
Noch besser ist es, wenn du dem Befehl direkt die Permission zuweist bei super(...), so dass der Befehl ohne Permission erst gar nicht aufrufbar ist

Dies zum Beispiel würde deinen Code erheblich verbessern und übersichtlicher machen.

Zeig uns, dass du wirklich Interesse hast dein Problem zu lösen.
 
Oben