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

Iterieren von YML-Dateien

_Baum_

Kuhfänger
Registriert
4 August 2013
Beiträge
66
Diamanten
0
Minecraft
PlueschAffe
Hallo Community,

im Rahmen einer Zusammenlegung meiner Plugins in ein großes benötige ich Hilfe bei einem Problem:

Die Spielerdaten sind in YML-Dateien gespeichert, eine Datei pro Spieler, bezeichnet mit der UUID, um 1.8 kompatibel zu sein.
Am Ende soll es dann so wie die Essentials-Spielerdaten aussehen.

Kann ich nun zB. alle YML-Dateien eines Ordners erhalten, damit ich Clans etc. abgleichen kann?

Theoretisch wäre es mit einer String-Liste der UUIDs in einer separaten Config möglich, die ich dann Iteriere und die zugehörige YML-Datei hole.
Aber ich würde es gerne "eleganter" lösen (Essentials macht das beim /baltop -Command auch irgendwie...).

Wenn ihr nicht verstanden habt, was ich will, fragt bitte ;)

Danke im Voraus

_Baum_
 

JoKer96

Redstoneengineer
Registriert
9 März 2014
Beiträge
40
Diamanten
302
Minecraft
JoKer96
Hallo _Baum_,
YML-Dateien sind nicht unbedingt die eleganteste Lösung!
Vielleicht hast du schon mal was von 'MySQL' gehört...
Das ist eine Datenbank, mit tabellarischem Aufbau.
Hier kannst du alles in eine Tabelle eintragen, was du möchtest, du kannst auch in einer Datenbank mehrere Tabellen anlegen!
Du könntest eine Spieler-Tabelle und, z.B. eine Clan-Tabelle anlegen und dort auf die gewünschten Daten zugreifen!

Doch kommt es darauf an, wo du das Plugin nutzen willst...
Nitrado-Server haben Standardmäßig eine MySQL-Datenbank integriert!
Gegebenenfalls musst du diese aber noch zubuchen...

# Edit #
Solltest du bei MySQL noch keine Erfahrung haben, bin ich gerne bereit, die das ganze zu erklären ;-)
 
Zuletzt bearbeitet:

_Baum_

Kuhfänger
Registriert
4 August 2013
Beiträge
66
Diamanten
0
Minecraft
PlueschAffe
Hi @Joans96 ,
danke für das Angebot :)
Leider steht mir derzeit (und wohl noch die nächten 4 Monate) keine MySQL-Datenbank zu Verfügung und ich habe auch keine Erfahrung im Umgang damit :/
Theoretisch könnte ich SQLight oder .db Dantenbanken nutzen, hier aber auch: Keine Ahnung von gar nichts.

Ein Tutorial in der Tutorial-Abteilung wäre sau geil und wird sicher gut ankommen, da soweit ich das jetzt durchgesehen habe, kein aktuelles Tutorial existiert :D

MfG
_Baum_
 

JoKer96

Redstoneengineer
Registriert
9 März 2014
Beiträge
40
Diamanten
302
Minecraft
JoKer96
Ich habe derzeit einen WebSpace Server bei Nitrado, da könnte ich dir eine DB zur verfügung stellen....

Was ein MySQL Tutorial angeht, wenn tatsächlich keines Existiert, kann ich ja eins machen, denn all zu schwer ist das ja nicht wirklich ;-)
Ich kann dir (heute noch, wenn du willst) auch ein 'privates' Tutorial geben, via Skype, oder TeamSpeak und TeamViewer...
Ich schätze hier die Dauer auf max 2h, dann hast du das drauf ;-)
 
Zuletzt bearbeitet von einem Moderator:

_Baum_

Kuhfänger
Registriert
4 August 2013
Beiträge
66
Diamanten
0
Minecraft
PlueschAffe
Ok das Problem hat sich erledigt:
Code:
Bukkit.getOfflinePlayer("name").getUniqueId();
So kann ich die UUID des Spielers bekommen, ohne alle Dateien durchzugehen.
Für die Clans muss ich sowieso ein weiteres Verzeichnis anlegen.

Zum Iterieren kann man mit
Code:
Bukkit.getOfflinePlayers()
arbeiten.

@Joans96 Ich hab derzeit wegen Beginn der Schule, wo ich mich jetzt irgendwie in die Oberstufe eingliedern muss, ein wenig Stress, ich komm auf dich zu wenn ich Zeit hab :)

MfG
_Baum_
 

JoKer96

Redstoneengineer
Registriert
9 März 2014
Beiträge
40
Diamanten
302
Minecraft
JoKer96
Das kann sein, aber ich finde MySQL deutlich übersichtlicher ale viele einzelne .yml dateien.

_Baum_ schrieb:
Die Spielerdaten sind in YML-Dateien gespeichert, eine Datei pro Spieler

Ergo hat man, wenn auf dem Server viele Spieler Spielen, hunderte oder gar tausende Spieler Dateien.
Bei MySQL hat man eine Tabelle, in die alles eingetragen wird, aber ich denke das weißt du. ;-)
 
X

|| xX [DEV][LP] Ms. DivaCraft Xx ||

Guest
Und was ist MySQL unter der Haube? Eine große Sammlung von tausenden von Daten - Richtig.

Wie kriegt man nun die einzelnen Dateien eines Ordners? - Man benutzt die Abstraktion von Java: File

Ein Ordner ist nichts anderes als ein File, also kann man die File Methoden benutzen:

http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()
Code:
for(File f:folder.listFiles()){
// Lade YML File.
}

Solange die Spieler-Daten im Arbeitsspeicher gehalten werden, solange der Spieler online(!) ist, ist kein großartiges Problem vorhanden-, sondern sollte ziemlich effektiv mit einer Map<UUID, PlayerData> arbeiten, sollte jedoch auch entladen werden. Ein Query hat hier viel mehr Komplikationen..
 
Oben