1. 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

Dieses Thema im Forum "Programmierung" wurde erstellt von crafterjuli, 7. November 2015.


  1. crafterjuli
    Offline

    crafterjuli

    Registriert seit:
    8. Mai 2015
    Beiträge:
    9
    Geschlecht:
    männlich
    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 (Text):
    1.  
    2.     public static void ban(String playername, String uuid, String reason, int seconds) {
    3.         long end = 0;
    4.         if (seconds == -1) {
    5.             end = -1;
    6.             cfg.set("Bans." + uuid + ".End", end);
    7.             cfg.set("Bans." + uuid + ".Reason", reason);
    8.             cfg.set("Bans." + uuid + ".Playername", playername);
    9.             try {
    10.                 cfg.save(file);
    11.             } catch (IOException e) {
    12.                 e.printStackTrace();
    13.             }
    14.             if (Bukkit.getPlayer(playername) != null) {
    15.                 Bukkit.getPlayer(playername)
    16.                         .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
    17.                                 + "§cGebannt bis: §4permanent" + "\n" + "\n"
    18.                                 + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
    19.             }
    20.             return;
    21.         }
    22.         long current = System.currentTimeMillis();
    23.         long millis = seconds * 1000;
    24.         end = current + millis;
    25.         cfg.set("Bans." + uuid + ".End", end);
    26.         cfg.set("Bans." + uuid + ".Reason", reason);
    27.         cfg.set("Bans." + uuid + ".Playername", playername);
    28.         try {
    29.             cfg.save(file);
    30.         } catch (IOException e) {
    31.             e.printStackTrace();
    32.         }
    33.         if (Bukkit.getPlayer(playername) != null) {
    34.             Bukkit.getPlayer(playername)
    35.                     .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
    36.                             + "§cGebannt bis: : §e" + getRemainingTime(uuid) + "\n" + "\n"
    37.                             + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
    38.         }
    39.     }
    40.  
    Und hier wie ich sie anwende:
    Code (Text):
    1.  
    2. try
    3.  
    4.     {
    5.         int seconds = Integer.parseInt(args[1]);
    6.         String timeUnit = args[2];
    7.         if (seconds == -1) {
    8.             if (p.hasPermission("banmanager.permaban")) {
    9.                 BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
    10.                 p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
    11.                 p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    12.                 return true;
    13.             } else {
    14.                 p.sendMessage("§7[§cBan§7] §cDu hast keine Rechte, Spieler permanent zu bannen!");
    15.             }
    16.         }
    17.         if (timeUnit.equalsIgnoreCase("sec")) {
    18.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
    19.         } else if (timeUnit.equalsIgnoreCase("min")) {
    20.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60);
    21.         } else if (timeUnit.equalsIgnoreCase("hour")) {
    22.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60 * 60);
    23.         } else if (timeUnit.equalsIgnoreCase("day")) {
    24.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 24 * 60 * 60);
    25.         } else {
    26.             p.sendMessage("§7[§cBan§7] §cUnbekannte Zeiteinheit!");
    27.             return true;
    28.         }
    29.         p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
    30.         p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    31.     } catch(
    32.  
    33.     NumberFormatException e)
    34.  
    35.     {
    36.         p.sendMessage("§7[§cBan§7] §cBitte gebe nur Zahlen an!");
    37.         p.sendMessage("§7[§cBan§7] §6Vewende: §7/ban <Spielername> <Zahl> <Zeiteinheit> <Grund>");
    38.     }
    39.  
    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.
     
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    289
    Minecraft:
    GPSforLEGENDS
    Ich glaub keiner wird dir weiterhelfen solange du den Code nicht in einen Code tag machst
     
    • Gefällt mir Gefällt mir x 2
  3. Verschraubt
    Online

    Verschraubt

    Code (Text):
    1.  
    2.         long current = System.currentTimeMillis();
    3.         long millis = seconds * 1000;
    4.         end = current + millis;
    5.         cfg.set("Bans." + uuid + ".End", end);
    6.         cfg.set("Bans." + uuid + ".Reason", reason);
    7.         cfg.set("Bans." + uuid + ".Playername", playername);
    Wenn ich richtig sehe, wir die Bannzeit in Millisekunden angegeben. Welchen Zweck hat das?

    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 (Text):
    1.         if (Bukkit.getPlayer(playername) != null) {
    2.             Bukkit.getPlayer(playername).kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + "getReason(uuid)" + "\n"
    3.                             + "§cGebannt bis: : §e" + getRemainingTime(uuid + "\n" + "\n"
    4.                             + "§aDu kannst auf §e*SNIP* §aeinen Entbannungsantrag stellen.");
    5.         }
    getRemainingTime() und getReason() Wo hast du das denn her? Und vor allem welche Funktion hat diese Methode?
     
    Zuletzt von einem Moderator bearbeitet: 7. November 2015
  4. Verschraubt
    Online

    Verschraubt

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

    Hier nochmal zur Übersicht die Codes:

    Code (Text):
    1.     public static void ban(String playername, String uuid, String reason, int seconds) {
    2.         long end = 0;
    3.         if (seconds == -1) {
    4.             end = -1;
    5.             cfg.set("Bans." + uuid + ".End", end);
    6.             cfg.set("Bans." + uuid + ".Reason", reason);
    7.             cfg.set("Bans." + uuid + ".Playername", playername);
    8.             try {
    9.                 cfg.save(file);
    10.             } catch (IOException e) {
    11.                 e.printStackTrace();
    12.             }
    13.             if (Bukkit.getPlayer(playername) != null) {
    14.                 Bukkit.getPlayer(playername)
    15.                         .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
    16.                                 + "§cGebannt bis: §4permanent" + "\n" + "\n"
    17.                                 + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
    18.             }
    19.             return;
    20.         }
    21.         long current = System.currentTimeMillis();
    22.         long millis = seconds * 1000;
    23.         end = current + millis;
    24.         cfg.set("Bans." + uuid + ".End", end);
    25.         cfg.set("Bans." + uuid + ".Reason", reason);
    26.         cfg.set("Bans." + uuid + ".Playername", playername);
    27.         try {
    28.             cfg.save(file);
    29.         } catch (IOException e) {
    30.             e.printStackTrace();
    31.         }
    32.         if (Bukkit.getPlayer(playername) != null) {
    33.             Bukkit.getPlayer(playername)
    34.                     .kickPlayer("§cDu wurdest gebannt!" + "\n" + "\n" + "§aGrund: §e" + getReason(uuid) + "\n"
    35.                             + "§cGebannt bis: : §e" + getRemainingTime(uuid) + "\n" + "\n"
    36.                             + "§aDu kannst auf §eendercake.com §aeinen Entbannungsantrag stellen.");
    37.         }
    38.     }

    Code (Text):
    1. try
    2.  
    3.     {
    4.         int seconds = Integer.parseInt(args[1]);
    5.         String timeUnit = args[2];
    6.         if (seconds == -1) {
    7.             if (p.hasPermission("banmanager.permaban")) {
    8.                 BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
    9.                 p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
    10.                 p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    11.                 return true;
    12.             } else {
    13.                 p.sendMessage("§7[§cBan§7] §cDu hast keine Rechte, Spieler permanent zu bannen!");
    14.             }
    15.         }
    16.         if (timeUnit.equalsIgnoreCase("sec")) {
    17.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds);
    18.         } else if (timeUnit.equalsIgnoreCase("min")) {
    19.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60);
    20.         } else if (timeUnit.equalsIgnoreCase("hour")) {
    21.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 60 * 60);
    22.         } else if (timeUnit.equalsIgnoreCase("day")) {
    23.             BanMethods.ban(target.getName(), target.getUniqueId().toString(), reason, seconds * 24 * 60 * 60);
    24.         } else {
    25.             p.sendMessage("§7[§cBan§7] §cUnbekannte Zeiteinheit!");
    26.             return true;
    27.         }
    28.         p.sendMessage("§7[§cBan§7] §6Spieler gebannt!");
    29.         p.playSound(p.getLocation(), Sound.WITHER_DEATH, 3, 2);
    30.     } catch(
    31.  
    32.     NumberFormatException e)
    33.  
    34.     {
    35.         p.sendMessage("§7[§cBan§7] §cBitte gebe nur Zahlen an!");
    36.         p.sendMessage("§7[§cBan§7] §6Vewende: §7/ban <Spielername> <Zahl> <Zeiteinheit> <Grund>");
    37.     }
     
    Zuletzt von einem Moderator bearbeitet: 7. November 2015
  5. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    738
    Geschlecht:
    weiblich
    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?
     
  6. crafterjuli
    Offline

    crafterjuli

    Registriert seit:
    8. Mai 2015
    Beiträge:
    9
    Geschlecht:
    männlich
    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.
     
  7. SasukeKawaii
    Offline

    SasukeKawaii Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    1.006
    Geschlecht:
    männlich
    Rechnest du das "per Hand" um oder nutzt die das bereits von Java mitgebrachte Enum TimeUnit?
     
    Zuletzt bearbeitet: 7. November 2015
  8. Walfisch
    Offline

    Walfisch

    Registriert seit:
    23. Mai 2015
    Beiträge:
    26
    Geschlecht:
    männlich
    Minecraft:
    Walfisch
    Also soweit ich weiß hat ein Int ein relativ niedriges Maximum bzw. Max value. Da, du aber die Zeit in Millisekunden umrechnest ist warscheinlich das Limits des Int's schnell erreicht. Benutze lieber einen long.
     
    • Gefällt mir Gefällt mir x 1
  9. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    738
    Geschlecht:
    weiblich
     
    • Gefällt mir Gefällt mir x 3