• 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

Lapura

Kuhfänger
Registriert
28 Dezember 2014
Beiträge
73
Alter
26
Diamanten
314
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
 

Thalion

Minecrafter
Registriert
22 Juli 2014
Beiträge
26
Diamanten
5
Minecraft
Spartaner_v1
Benutz am besten eine Datenbank. Dort kannst du als column einen timestamp nehmen:

Code:
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:
SELECT * FROM punishment WHERE msb='~' AND lsb='~' AND timestamp < UNIX_TIMESTAMP(NOW());

Zum eintragen ( time = Bannzeit in Sekunden )
Code:
INSERT INTO punishment (msb, lsb, timestamp) VALUES ('~', '~', (UNIX_TIMESTAMP(NOW()) + [time]));

Jeweils die ~ -Zeichen gegen den Bytewert (LONG) tauschen.

Mfg,
Thalion
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
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.
 
Zuletzt bearbeitet:

Luxh

Minecrafter
Registriert
25 Dezember 2014
Beiträge
2
Alter
25
Diamanten
0
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
 
Oben