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

crafterjuli

Minecrafter
Registriert
8 Mai 2015
Beiträge
10
Diamanten
300
Minecraft
crafterjuli
Hey,

ich habe ein Problem beim Programmieren eines BanSystems. Wenn ich jemanden 2 Stunde bannen will, kommen Rechenprobleme auf.

Hier mal mein Code meiner Methode:
Code:
    public static void ban(String playername, String uuid, String reason, int seconds) {
        long end = 0;
        if (seconds == -1) {
            end = -1;
            cfg.set("Bans." + uuid + ".End", end);
            cfg.set("Bans." + uuid + ".Reason", reason);
            cfg.set("Bans." + uuid + ".Playername", playername);
            try {
                cfg.save(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (Bukkit.getPlayer(playername) != null) {
                Bukkit.getPlayer(playername)
                        .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
                                + "§cGebannt bis: §4permanent" + "\n" + "\n"
                                + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
            }
            return;
        }
        long current = System.currentTimeMillis();
        long millis = seconds * 1000;
        end = current + millis;
        cfg.set("Bans." + uuid + ".End", end);
        cfg.set("Bans." + uuid + ".Reason", reason);
        cfg.set("Bans." + uuid + ".Playername", playername);
        try {
            cfg.save(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (Bukkit.getPlayer(playername) != null) {
            Bukkit.getPlayer(playername)
                    .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
                            + "§cGebannt bis: : §e" + getRemainingTime(uuid) + "\n" + "\n"
                            + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
        }
    }
Und hier wie ich sie anwende:
Code:
try

    {
        int seconds = Integer.parseInt(args[1]);
        String timeUnit = args[2];
        if (seconds == -1) {
            if (p.hasPermission("banmanager.permaban")) {
                BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
                p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
                p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
                return true;
            } else {
                p.sendMessage("§7[§cBan§7] §cDu hast keine Rechte, Spieler permanent zu bannen!");
            }
        }
        if (timeUnit.equalsIgnoreCase("sec")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
        } else if (timeUnit.equalsIgnoreCase("min")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60);
        } else if (timeUnit.equalsIgnoreCase("hour")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60 * 60);
        } else if (timeUnit.equalsIgnoreCase("day")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 24 * 60 * 60);
        } else {
            p.sendMessage("§7[§cBan§7] §cUnbekannte Zeiteinheit!");
            return true;
        }
        p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
        p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    } catch(

    NumberFormatException e)

    {
        p.sendMessage("§7[§cBan§7] §cBitte gebe nur Zahlen an!");
        p.sendMessage("§7[§cBan§7] §6Vewende: §7/ban <Spielername> <Zahl> <Zeiteinheit> <Grund>");
    }

Jetzt meine Frage:

Habe ich dort irgendwelche Rechenfehler drin oder wie? Ich weiss nicht, was ich falsch mache.
Beispiel als Fehler:

Ich banne jemanden am 6.11.2015 für 30 tage und er wird dann nur bis zum 18.11.2015 gebannt.
 
V

Verschraubt

Guest
Code:
        long current = System.currentTimeMillis();
        long millis = seconds * 1000;
        end = current + millis;
        cfg.set("Bans." + uuid + ".End", end);
        cfg.set("Bans." + uuid + ".Reason", reason);
        cfg.set("Bans." + uuid + ".Playername", playername);

Wenn ich richtig sehe, wir die Bannzeit in Millisekunden angegeben. Welchen Zweck hat das?

Ich banne jemanden am 6.11.2015 für 30 tage und er wird dann nur bis zum 18.11.2015 gebannt.
Wo steht denn, wie lange die Person gebannt ist? Ist da noch eine Abfrage beim einloggen, oder bezieht sich das auf die Bestätigung, die du bekommst, nachdem du einen gebannt hast?

Code:
        if (Bukkit.getPlayer(playername) != null) {
            Bukkit.getPlayer(playername).kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + "getReason(uuid)" + "\n"
                            + "§cGebannt bis: : §e" + getRemainingTime(uuid + "\n" + "\n"
                            + "§aDu kannst auf §e*SNIP* §aeinen Entbannungsantrag stellen.");
        }
getRemainingTime() und getReason() Wo hast du das denn her? Und vor allem welche Funktion hat diese Methode?
 
Zuletzt bearbeitet von einem Moderator:
V

Verschraubt

Guest
@GPSforLEGENDS Ich schon :p Hab ja sonst nichts zu tun...

Hier nochmal zur Übersicht die Codes:

Code:
    public static void ban(String playername, String uuid, String reason, int seconds) {
        long end = 0;
        if (seconds == -1) {
            end = -1;
            cfg.set("Bans." + uuid + ".End", end);
            cfg.set("Bans." + uuid + ".Reason", reason);
            cfg.set("Bans." + uuid + ".Playername", playername);
            try {
                cfg.save(file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (Bukkit.getPlayer(playername) != null) {
                Bukkit.getPlayer(playername)
                        .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
                                + "§cGebannt bis: §4permanent" + "\n" + "\n"
                                + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
            }
            return;
        }
        long current = System.currentTimeMillis();
        long millis = seconds * 1000;
        end = current + millis;
        cfg.set("Bans." + uuid + ".End", end);
        cfg.set("Bans." + uuid + ".Reason", reason);
        cfg.set("Bans." + uuid + ".Playername", playername);
        try {
            cfg.save(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (Bukkit.getPlayer(playername) != null) {
            Bukkit.getPlayer(playername)
                    .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
                            + "§cGebannt bis: : §e" + getRemainingTime(uuid) + "\n" + "\n"
                            + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
        }
    }

Code:
try

    {
        int seconds = Integer.parseInt(args[1]);
        String timeUnit = args[2];
        if (seconds == -1) {
            if (p.hasPermission("banmanager.permaban")) {
                BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
                p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
                p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
                return true;
            } else {
                p.sendMessage("§7[§cBan§7] §cDu hast keine Rechte, Spieler permanent zu bannen!");
            }
        }
        if (timeUnit.equalsIgnoreCase("sec")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
        } else if (timeUnit.equalsIgnoreCase("min")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60);
        } else if (timeUnit.equalsIgnoreCase("hour")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60 * 60);
        } else if (timeUnit.equalsIgnoreCase("day")) {
            BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 24 * 60 * 60);
        } else {
            p.sendMessage("§7[§cBan§7] §cUnbekannte Zeiteinheit!");
            return true;
        }
        p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
        p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    } catch(

    NumberFormatException e)

    {
        p.sendMessage("§7[§cBan§7] §cBitte gebe nur Zahlen an!");
        p.sendMessage("§7[§cBan§7] §6Vewende: §7/ban <Spielername> <Zahl> <Zeiteinheit> <Grund>");
    }
 
Zuletzt bearbeitet von einem Moderator:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Solnge du deinen Code nicht sauber formatierst in Code Tags packst werd ich da auch nicht durchwühlen. Das einzige was ich mich nur Frage ist woher du überhaupt weist, wie lange ein Spieler gebannt ist? Hast du das von Hand nachgerechnet?

Und eine Vermutung wo dein Problem liegen könnte (ohne dass ich geguckt hab): Nutzt du auch überall long oder nur int?
 

crafterjuli

Minecrafter
Registriert
8 Mai 2015
Beiträge
10
Diamanten
300
Minecraft
crafterjuli
Also: Ich gebe einen wert als int an, wieviele tage z.b er gebannt werden soll, z.b 30 Tage. Dann ist 30 der int. Den Rechne ich in Millisekunden um und addiere das auf die currentTimeMillis. Aber ich denke, dass da ein Rechenfehler vorliegt.
 
Oben