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
    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.
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Ich glaub keiner wird dir weiterhelfen solange du den Code nicht in einen Code tag machst
     
    #2
    MichiPlaysYT und Verschraubt gefällt das.
  3. Verschraubt
    Offline

    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?
     
    #3
  4. Verschraubt
    Offline

    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.     }
     
    #4
  5. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    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?
     
    #5
  6. crafterjuli
    Offline

    crafterjuli

    Registriert seit:
    8. Mai 2015
    Beiträge:
    9
    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.
     
    #6
  7. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Rechnest du das "per Hand" um oder nutzt die das bereits von Java mitgebrachte Enum TimeUnit?
     
    #7
  8. Walfisch
    Offline

    Walfisch

    Registriert seit:
    23. Mai 2015
    Beiträge:
    23
    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.
     
    #8
    Microsamp gefällt das.
  9. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
     
    #9