Discord

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

Erledigt Liste aus Blöcken/ Block Locations in YAML Config abspeichern

SchmidiMC

Redstoneengineer
Mitglied seit
1 April 2014
Beiträge
33
Minecraft
SchmidiMC
Hallöschen lieber Leser,
ich möchte gerne wie schon im Titel genannt entweder Blöcke zu einer Liste hinzufügen und diese dann in einer YAMLConfig abspeichern, oder gegebenfalls die Block Locations, ich weiß nicht wirklich was die effektivste Variante wäre, da ich auch überprüfen muss ob genau dieser Block schon enthalten ist damit dieser nicht doppelt auftritt, da denke ich fast das sich Locations besser eignen bzw. ich darauf schneller zugreifen kann. Aber ich brauche eine Meinung dazu, da ich mir nicht wirklich sicher bin ob das nicht auch besser geht.
Zu dem weiß ich nicht wie ich dies umsetzen kann. Ich kann mir ja per "config.getConfigurationSection(...)", einen Berreich aus einer Config holen, welcher in dem Falle für die Blöcke gedacht wäre), nur diese Methode gibt ja ein String Set zurück und ich weiß nicht wie ich daraus wieder Blöcke machen kann?
Es tut mir leid wenn das jetzt etwas unübersichtlich, oder durcheinander geschrieben ist aber ich hoffe das es dennoch relativ Verständlich ist, ich danke euch für jede Hilfe.

LG Schmidi
 

Avankziar

Kuhfänger
Osterei Experte
Mitglied seit
12 Februar 2018
Beiträge
84
Alter
26
Minecraft
Avankziar
Nehmen wir an wir speichern erstmal einen Block, aka sein Material und seine Location.
Das kann man ziemlich leicht in einen String umsetzten:
Code:
Location loc = block.getlocation();
Material mat = block.getType();
String save = mat.name()+"|"+loc.getworld().getname()+"|"+loc.getX+"|"+loc.getY+"|"+loc.getZ;
//Dann speicherst du den String save in deiner Config.
So nun haben wir etwas abgespeichert nun holen wir uns das wieder:
Code:
String getsave = //Hier deine Config/Yaml mit deinem Pfad angeben.
//Jedoch reicht der String nicht, musst du daraus einen StringArray machen.
String[] getsave = <Yaml getString(..)>.split("|");
//Jetzt können wir aus dem String wieder einen Block machen:
Block block = new Location(Bukkit.getWorld(getsave[1])
                +Double.parseDouble(getsave[2])
                +Double.parseDouble(getsave[3])
                +Double.parseDouble(getsave[4])).getBlock();
block.setType(Material.getMaterial(getsave[0]));
Jo und das war es. Zumindest in einer sehr "einfachen" Form :D
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
155
Alter
19
Minecraft
DerFrZocker
Du kannst ganz einfach eine Liste mit locations per set Methode speichern. Und wenn du die Liste mit Location wieder haben willst, nutzt du einfach die getList Methode. Damit nur jeweils eine Location vorhanden ist kannst du entweder mit einem Set arbeiten oder bevor du die Location in die Liste machst mit contains über prüfen ob sie schon drinnen ist.

bsp.
Code:
//zum speichern mit einer list
List<Location> locations = new ArrayList<>();

if(!locations.contains(location))
    locations.add(location);

config.set("path", locations);


//zum holen
List<Location> locationList = (List<Location>) config.getList("path");



//oder mit einem set
Set<Location> set = new HashSet<>();

set.add(location);

config.set("path", new ArrayList<>(set));

// zum holen
Set<Location> locationSet = new HashSet<>((List<Location> config.getList("path")));
 

SchmidiMC

Redstoneengineer
Mitglied seit
1 April 2014
Beiträge
33
Minecraft
SchmidiMC
Ah alles klar, hätte ich auch draufkommen können, danke dir :)
 

BestPixelHD

Minecrafter
Mitglied seit
10 März 2016
Beiträge
9
Alter
29

ES-Henne

Redstoneengineer
Mitglied seit
3 Oktober 2017
Beiträge
41
Laut den JavaDocs ist die Location ConfigurationSerializable. Daher kann die Location einfach in der Config gespeichert werden. Hier ist auch nochmal ein Beispiel, von jemandem der ein ähnliches Problem hatte.

https://minecraft-server.eu/forum/threads/location-aus-config-auslesen.48913/
Dort hat jemand diesen Code Beispiel geschrieben.
Genau aus diesem Grund kann ich nur wiederholt betonen, wie sinnvoll es ist, einfach
Code:
config.set("path", location);
zum Speichern und
Code:
Location location = (Location) config.get("path");
zum Laden zu verwenden. Damit reduziert man die Fehlerquellen schon definitiv.
Edit: Sehe gerade, das DerFrZocker das auch in seinem Codebeispiel nutzt.
 

BestPixelHD

Minecrafter
Mitglied seit
10 März 2016
Beiträge
9
Alter
29
Ja, ich bevorzuge aber Location in nur einer Zeile zu speichern. Aber dies ist jeden seine Sache :)
 

SirYwell

Vorarbeiter
Osterei Experte
Mitglied seit
30 Juni 2017
Beiträge
266
Alter
20
Minecraft
SirYwell
Danke zunächst einmal an @ES-Henne , dass das Thema ConfigurationSerialization hier überhaupt mal erwähnt wird.

Zu dem Problem: Um dir sagen zu können, welche wirklich effizienter ist (oder ob es noch etwas effizienteres gibt, was dir bisher noch nicht in den Sinn kam), müsstest du uns genauer erläutern, was du vorhast. Du musst uns dein Problem also von einem entfernteren Standpunkt verdeutlichen.

Generell kannst du, um Objekte bequem zu speichern, immer auf das Interface ConfigurationSerializable zurückgreifen. Wenn du also beispielsweise das Material eines bestimmten Blocks an einer bestimmten Position abspeichern möchtest, machst du eine eigene Klasse mit den Objektattributen Material undLocation und implementierst ConfigurationSerializable entsprechend.

Hilfreich dabei könnte diese Anleitung sein.
 
Oben