Iterieren von YML-Dateien

Dieses Thema im Forum "Programmierung" wurde erstellt von _Baum_, 15. September 2014.

  1. _Baum_
    Offline

    _Baum_

    Registriert seit:
    4. August 2013
    Beiträge:
    66
    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_
     
    #1
  2. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    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 ;-)
     
    #2
  3. _Baum_
    Offline

    _Baum_

    Registriert seit:
    4. August 2013
    Beiträge:
    66
    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_
     
    #3
  4. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    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 ;-)
     
    #4
  5. _Baum_
    Offline

    _Baum_

    Registriert seit:
    4. August 2013
    Beiträge:
    66
    Minecraft:
    PlueschAffe
    Ok das Problem hat sich erledigt:
    Code (Text):
    1. 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 (Text):
    1. 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_
     
    #5
  6. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    Freut mich für dich, dass du es geschafft hast!

    Ich arbeite derzeit ein etwas unfangreicheres MySQL Tutorial aus, welches ich dann hier publizieren möchte, danke übrigens für die Idee ;-)
     
    #6
    MrPyro13 gefällt das.
  7. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    MySQL ist fuer seine Zwecke fast etwas zu aufwendig.
     
    #7
  8. Joans96
    Offline

    Joans96

    Registriert seit:
    9. März 2014
    Beiträge:
    37
    Minecraft:
    Joans96
    Das kann sein, aber ich finde MySQL deutlich übersichtlicher ale viele einzelne .yml dateien.

    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. ;-)
     
    #8
  9. 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 (Text):
    1. for(File f:folder.listFiles()){
    2. // Lade YML File.
    3. }
    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..
     
    #9
  10. _Baum_
    Offline

    _Baum_

    Registriert seit:
    4. August 2013
    Beiträge:
    66
    Minecraft:
    PlueschAffe
    Danke @manf, das war genau das, was ich gesucht habe ^^
    Jetzt kann auf die Daten zugreifen, ohne einen Umweg über die OfflinePlayers zu gehen
     
    #10