TempBan

Dieses Thema im Forum "Programmierung" wurde erstellt von Lapura, 27. September 2015.

  1. Lapura
    Offline

    Lapura

    Registriert seit:
    28. Dezember 2014
    Beiträge:
    59
    Guten Tag,
    ich bin gerade dabei ein TempBan Plugin zu programmieren, aber mir ist aufgefallen das das mit der zeit nicht so einfach ist.
    Das kam mir schon von anfang an komisch rüber mit der zeit. ich lasse ja die zeit immer weiter runter zählen, aber was ist wenn ich denn Server
    stoppe, oder neustartete? wird das trozdem weiter gezählt?
    LG, Lukas
     
    #1
  2. JTK222
    Offline

    JTK222

    Registriert seit:
    5. September 2013
    Beiträge:
    665
    Ort:
    Planet Erde
    Minecraft:
    JTK222
    Speichere am besten die Uhrzeit wann er entbannt wird. Wenn derjenige joinen möchte überprüfst du ob die zeit (und eventuell) Datum um sind und entbannst ihn ist die Ressourcen sparsamste Methode.
     
    #2
  3. Thalion
    Offline

    Thalion

    Registriert seit:
    22. Juli 2014
    Beiträge:
    25
    Ort:
    Berlin
    Minecraft:
    Spartaner_v1
    Benutz am besten eine Datenbank. Dort kannst du als column einen timestamp nehmen:

    Code (Text):
    1. CREATE TABLE punishment (id INT AUTO_INCREMENT PRIMARY KEY, msb LONG, lsb LONG, timestamp long);
    msb -> Most significant Byte ( von UUID )
    lsb -> Least significant Byte ( von UUID )
    timestamp -> als Unixtimestamp

    Zum überprüfen ( wenn player xy nicht gebannt ist, bekommt man nichts zurück )
    Code (Text):
    1. SELECT * FROM punishment WHERE msb='~' AND lsb='~' AND timestamp < UNIX_TIMESTAMP(NOW());
    Zum eintragen ( time = Bannzeit in Sekunden )
    Code (Text):
    1. INSERT INTO punishment (msb, lsb, timestamp) VALUES ('~', '~', (UNIX_TIMESTAMP(NOW()) + [time]));
    Jeweils die ~ -Zeichen gegen den Bytewert (LONG) tauschen.

    Mfg,
    Thalion
     
    #3
  4. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    657
    Der Trick ist, gar nicht zu bannen. Du kickst ihn einfach in jedem Join Event, sonst muss du deine Banliste mit der Banliste des Servers synchronisieren und das macht keinen Sinn.

    Erstmal musst du verstehen was Unix Timestamps sind.

    Du nimmst einfach die aktuelle Zeit, addierst die Banndauer und speicherst diesen Wert zusammen mit der UUID des Spielers und kickst ihn. Immer wenn jemand Joint prüfst du, ob ein Baneintrag vorliegt und der Spieler noch einen aktiven Ban hat. Wenn dies der Fall ist fliegt er wieder vom Server, wenn nicht, lässt du ihn joinen.
     
    #4
  5. Lapura
    Offline

    Lapura

    Registriert seit:
    28. Dezember 2014
    Beiträge:
    59
    Dannke an alle!
     
    #5
  6. Luxh
    Offline

    Luxh

    Registriert seit:
    25. Dezember 2014
    Beiträge:
    2
    Du könntest, sobald der Spieler gebannt wird von einem "Calendar" die aktuelle Zeit in Millisekunden in einer File speichern.
    Nun überprüfst du im PlayerLoginEvent ob die aktuelle Zeit (In Millisekunden) größer ist, als die, die in der File angegeben ist.
    Sollte der Wert in der File größer sein cancelst du einfach das Event.
    Optional könntest du noch die Differenz der beiden Werte ausrechnen lassen, und diese dem Spieler anzeigen lassen. (Dann aber natürlich in Tagen, Stunden und Minuten umgerechnet!)

    ~ Luxh
     
    #6