Discord

  • 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
Mitglied seit
30 Juni 2017
Beiträge
41
Alter
21
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
Mitglied seit
18 Dezember 2016
Beiträge
296
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
Mitglied seit
5 September 2013
Beiträge
1.144
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
 
Oben