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

Tempban funktioniert nicht

ausgebildet

Redstoneengineer
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
38
Alter
20
Minecraft
ausgebildet
Hey, ich entwickle gerade ein BanSystem und irgendwie funktioniert der Tempban nicht. Also der Spieler wird gebannt aber für 0 Tage 0 Stunden usw. Also die Zeit wird nicht übernommen.

Code:
    BanSystem plugin;

    public CMD_Tempban(BanSystem plugin) {
        super("tempban");
        this.plugin = plugin;
    }

    public void execute(CommandSender commandsender, String[] args) {
        if (!(commandsender instanceof ProxiedPlayer)) {
            commandsender
                    .sendMessage(new TextComponent(plugin.getBanPrefix() + "§c§lDu musst ein ProxiedPlayer sein!"));
            return;
        }
        ProxiedPlayer sender = (ProxiedPlayer) commandsender;
        if (!(args.length == 4)) {
            sender.sendMessage(
                    new TextComponent(plugin.getBanPrefix() + "§c/tempban <Player> <Reason> <Time> <TimeUni>"));
            return;
        }
        if (!(sender.hasPermission("bansystem.tempban"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§c§lDazu hast du keine Berechtigung!"));
            return;
        }
        ProxiedPlayer target = BungeeCord.getInstance().getPlayer(args[0]);
        if (target.hasPermission("bansystem.bypass")) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§c§lDu kannst diesen Spieler nicht bannen!"));
            return;
        }
        if (plugin.getBanManager().isBanned(args[0])) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§c§lDieser Spieler ist bereits gebannt!"));
            return;
        }
        String TimeUnit = args[3];
        String message = "";
        for (int i = 3; i < args.length; i++) {
            message = message + args[i] + " ";
        }
        long Time = Integer.parseInt(args[2]);
        if ((TimeUnit.equalsIgnoreCase("sec")) || (TimeUnit.equalsIgnoreCase("s")) || (TimeUnit.equalsIgnoreCase("sek"))
                || (TimeUnit.equalsIgnoreCase("sekunden")) || (TimeUnit.equalsIgnoreCase("secs"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§7Du hast §e" + args[0] + " §7zeitlich gebannt!"));
            plugin.getBanManager().ban(args[0], args[1], sender.getName(), Time * 1);
        } else if ((TimeUnit.equalsIgnoreCase("min")) || (TimeUnit.equalsIgnoreCase("minuten"))
                || (TimeUnit.equalsIgnoreCase("m")) || (TimeUnit.equalsIgnoreCase("mins"))
                || (TimeUnit.equalsIgnoreCase("minute"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§7Du hast §e" + args[0] + " §7zeitlich gebannt!"));
            plugin.getBanManager().ban(args[0], args[1], sender.getName(), Time * 60);
        } else if ((TimeUnit.equalsIgnoreCase("h")) || (TimeUnit.equalsIgnoreCase("hour"))
                || (TimeUnit.equalsIgnoreCase("hours"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§7Du hast §e" + args[0] + " §7zeitlich gebannt!"));
            plugin.getBanManager().ban(args[0], args[1], sender.getName(), Time * 60 * 60);
        } else if ((TimeUnit.equalsIgnoreCase("d")) || (TimeUnit.equalsIgnoreCase("day"))
                || (TimeUnit.equalsIgnoreCase("t")) || (TimeUnit.equalsIgnoreCase("tage"))
                || (TimeUnit.equalsIgnoreCase("tag")) || (TimeUnit.equalsIgnoreCase("days"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§7Du hast §e" + args[0] + " §7zeitlich gebannt!"));
            plugin.getBanManager().ban(args[0], args[1], sender.getName(), Time * 60 * 60 * 24);
        } else if ((TimeUnit.equalsIgnoreCase("w")) || (TimeUnit.equalsIgnoreCase("week"))
                || (TimeUnit.equalsIgnoreCase("woche")) || (TimeUnit.equalsIgnoreCase("wochen"))
                || (TimeUnit.equalsIgnoreCase("weeks"))) {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§7Du hast §e" + args[0] + " §7zeitlich gebannt!"));
            plugin.getBanManager().ban(args[0], args[1], sender.getName(), Time * 60 * 60 * 24 * 7);
        } else {
            sender.sendMessage(new TextComponent(plugin.getBanPrefix() + "§csec, min, hours, day, weeks"));
        }
        return;
    }
Hier der BanManager

Code:
public void ban(String playername, String reason, String banner, long time) {
        long end = 0L;
        if (time == -1L) {
            end = -1L;
        } else {
            long current = System.currentTimeMillis();
            long millis = time * 1000L;
            end = current + millis;
        }
        plugin.getMySQL().update("INSERT INTO bannedplayers (Playername, Reason, Ende, Banner) VALUES ('" + playername + "', ' " + reason + "', '" + time + "', '" + banner + "')");
        new Runnable() {
            public void run() {
                if(BungeeCord.getInstance().getPlayer(playername) != null) {
                    BungeeCord.getInstance().getPlayer(playername).disconnect(new TextComponent(
                            "§7Du wurdest vom Netzwerk §c§lgebannt! \n \n §3Grund §8: §e" + reason + "\n §9Zuständiger §8: §7" + banner + "\n §cEnde §8: " + getRemainingTime(playername)));
                }
            }
        }.run();
    }
Ich verstehe den Fehler echt nicht , vielleicht kann mir wer helfen.

Und ich weiß das man mit UUID bannen sollte. Das mit Spielernamen ist extra.
 

BlackHole

Workaholic
Mitglied seit
1 Juli 2012
Beiträge
749
Minecraft
BlackHole
Ich glaube es wäre günstiger, wenn du den Grund nach hinten schiebst. Dann könnte man dort auch mehrere Wörter angeben. Du solltest eine Prüfung einbauen, ob der Spieler auch existiert, ansonsten wird eine NullPointerException ausgelöst.

Bei der SQL-Abfrage solltest du Parameter verwenden. Derzeit wäre es ein Leichtes eine SQL Injection durchzuführen.
Die Berechnung der Endzeit ist richtig, du fügst allerdings die aktuelle Zeit in die Datenbank ein.
 

JOO200

Vorarbeiter
Osterei Experte
Mitglied seit
18 Dezember 2016
Beiträge
254
1. Bitte verwende bei deiner MySQL Verbindung PreparedStatements.
2. Hast du schonmal bei deiner Methode vom BanManager$ban(....) eine System.out.println()-Ausgabe eingefügt und geschaut, was für Werte da ankommen?
3. Du errechnest dir da ein "end"-long-Wert. Warum benutzt du zum einen nicht den Timestamp, welcher in Java vorhanden ist und warum tust du dies danach nicht in die MySQL-Tabelle einfügen?
4. Deine ganzen if-Abfragen würde ich vielleicht angenehmer gestalten. Wie wärs mit einer Liste, die du per Config einliest und danach die if-Abfrage mit if(list.contains(args[3]) machst? So ist das auf jeden fall sehr erschlagend.

Verdammt, @BlackHole war schneller :(
 

JTK222

Threadripper
Osterei Experte
Mitglied seit
5 September 2013
Beiträge
1.128
Minecraft
JTK222
4. Deine ganzen if-Abfragen würde ich vielleicht angenehmer gestalten. Wie wärs mit einer Liste, die du per Config einliest und danach die if-Abfrage mit if(list.contains(args[3]) machst? So ist das auf jeden fall sehr erschlagend.

Verdammt, @BlackHole war schneller :(
Seit Java 8 gibt es Switch Case statements mit Strings, wäre evtl. noch eine nummer performanter jedoch fällt dann die config weg.
Und ob bei einem ban befehl wirklich so auf performance geachtet werden muss :p
 

Twitter

Allgemein
Hilfe Benutzer
  • Kroseida Kroseida:
    eklig
  • Kroseida Kroseida:
    und auch wenn ich mir den src von forge angucke, bzw. das gesamte Konzept
  • Kroseida Kroseida:
    Keine Wrapper, nutzer wird direkt auf die API geworfen
  • Kroseida Kroseida:
    und jede Model-Datei muss immer wieder neu erstellt werden
  • maybeto maybeto:
    Das Leben ist nun mal kein Ponyhof.....
  • Kroseida Kroseida:
    trozdem kann man das ordentlich machen
  • Kroseida Kroseida:
    z.B steht in der Doku das 3D Model's für Entities gehen, dachte mir da "geil"
  • Kroseida Kroseida:
    suche im Forum, man muss den Renderer.. selber implementieren
  • iTz_Proph3t iTz_Proph3t:
    Sagte doch gestern im Stream, mach n besseres Forge :p
  • Kroseida Kroseida:
    Ich überlege es wirklich
  • Kroseida Kroseida:
    aber als solo-project ist das viel, vorallem wenn ich alles Dokumentieren muss
  • iTz_Proph3t iTz_Proph3t:
    Das wenn du machst und es
    auch läuft und danach auch besser ist, dann respekt :p
  • Kroseida Kroseida:
    näää, da wäre eigene Server Side Software interessanter
  • Kroseida Kroseida:
    oder eigenes Spiel,
  • maybeto maybeto:
    Forge ist eben schon uralt...
  • Kroseida Kroseida:
    Denoch, es ist ein Grundlegend falsches Konzept
  • Kroseida Kroseida:
    API Nutzer in Minecraft kommen zu direkt in Kontakt
  • ❤️可愛いちゃん️❤️ ❤️可愛いちゃん️❤️:
    Modding ist aber auch ne hässliche Sache. Das kann man fast nicht idiotensicher machen.
  • Kroseida Kroseida:
    meh
  • iTz_Proph3t iTz_Proph3t:
    Heute gibts Wochenend-Abend-Live-Support-Stream :p
    Bei Fragen und Problemen einfach im Chat melden ;)
    Vlt. ist Dean ja auch am Start
  • Matthias Matthias:
    Guten Morgen
  • Stern☆ Stern☆:
    Morgen
  • maybeto maybeto:
    guten Morgen
    maybeto maybeto: guten Morgen
    Oben