Frage von pinguin5202004, 68

Daten in config.yml abspeichern?

Ich porgrammiere momentan ein OsterEier Plugin. Ich habe schon viele Fragen gestellt aber hier nochmal: Ich möchte, das wenn man ein Ei spawnt, dass das Ei gespawnt wird und die Kordinaten und eine einzigartige ID in die config eingefügt wird. Aber es werden nur die Kordinaten eingespeichert und man kann auch nur 1 Ei abspeichern. Am besten sollte die Config dann so aussehen:

1: 
    world: meineWelt
    x: 109320.0
    Y: 100.0
    Z: 8390.0
    ID: 1
2: 
    world: meine2teWelt
    x: 17820.0
    Y: 12.0
    Z: 90.0
    ID: 2
3: 
    world: meine3teWelt
    x: 346.0
    Y: 133.0
    Z: 435.0
    ID: 3

Code:

public void SpawnEgg(Player p) {
    String world = p.getWorld().getName();
    double x = p.getLocation().getX();
    double y = p.getLocation().getY();
    double z = p.getLocation().getZ();
    
    FileConfiguration cfg = getConfig();
    cfg.set("World", world);
    cfg.set("X", x);
    cfg.set("Y", y);
    cfg.set("Z", z);
    saveConfig();
Antwort
von Hendrik2708, 46

Hallo,

zu erstmal würde ich dir empfehlen, dir die Java Conventions zu Herzen zu nehmen, denn dein Code Stil ist nicht der übersichtlichste :D. Nun zu deiner Frage: Ich würde folgenden Code empfehlen (ungetestet! :))

private final Random random = new Random();


public void spawnEgg(Player p) {
String world = p.getWorld().getName();
double x = p.getLocation().getX();
double y = p.getLocation().getY();
double z = p.getLocation().getZ();
int id = random.nextInt(999); // Random ID generieren, ACHTUNG: könnte mehrmals die gleiche ID raus kommen!

getConfig().set(id + ".World", world);
getConfig().set(id + ".X", x);
getConfig().set(id + ".Y", y);
getConfig().set(id + ".Z", z);
saveConfig();
}
Kommentar von Tschoo ,

Was soll an deinem Code-Style besser sein, als bei dem des Fragestellers???? (nur dass du hier ein paar Leerzeilen reingemacht hast)

Kommentar von Hendrik2708 ,

Ja, die Leerzeichen hat gf reingeschmuggelt :D Ich meinte nur, das man Methodennamen in Camel Case schreibt und denke, es sei Ressourcen schonender, wenn man nicht extra och eine Neue Verknüpfung zum Objekt FileConfiguration macht. Ist nur meine Meinung ;)

Kommentar von pinguin5202004 ,

Das ist eine super Idee! Ich möchte nur, dass jede id einzigartig ist. Ich wollte das so machen, dass ich mir die id vom letzten ei hole und das dann +1 nehme. Hast du da einen Vorschlag wie ich das machen könnte?

Kommentar von Hendrik2708 ,

Ja ich würde vorschlagen mit 0 anzufangen, und dann in ner Schleife zu schauen, ob eine ID schon belegt ist, wenn nicht, diese nehmen. Codebeispiel:

public void spawnEgg(Player p) {

String world = p.getWorld().getName();
double x = p.getLocation().getX();
double y = p.getLocation().getY();
double z = p.getLocation().getZ();
int id = 0;

for (int i = 0; i < Integer.MAX_VALUE; i++) { // Schleife bis abbruch/fund durchgehen
if (getConfig().getString(i + ".World") == null) { // Prüfen ob unter ID nichts gespeichert ist (= null)
id = i; // Wenn ja, id setzen
break; // Und Schleife abbrechen
} // Falls nicht id erhöhen und nochmal probieren
}

getConfig().set(id + ".World", world);
getConfig().set(id + ".X", x);
getConfig().set(id + ".Y", y);
getConfig().set(id + ".Z", z);
saveConfig();
}
Kommentar von pinguin5202004 ,

Danke, werde ich gleich sofort ausprobieren 

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten