2017-03-28 3 views
0

zählte ich eine Punktzahl in einer HashMap für jeden Spieler:1.11 Java Spigot/Bukkit Programmierung - Speichern/Laden HashMap in config.yml

public Map<String, Integer> PScore = new HashMap<String, Integer>(); 

Jetzt möchte ich die HashMap und in einer Config speichern und laden .yml. Die Konfiguration ist vorhanden und wird für andere Varibales verwendet.

Dies waren meine viele Versuche, das Problem zu lösen:

public void saveHash() 
{ 
    for (String string : PScore.keySet()) 
    { 
     this.getConfig().set("score.pscore", string); 
     this.saveConfig(); 
    } 
} 

public void loadHash() 
{ 
} 

Aber in der Config erhalte ich nur:

score: 
pscore: JackerNils 

Die Ladefunktion ist leer, so geschieht nichts natürlich beim Laden. Die speichern und Ladefunktionen werden durch die onEnable() und der EinschSperre()

// EDIT gesteuert:

public Map<String, Integer> PScore = new HashMap<String, Integer>(); 

public void saveHash() 
{ 
    List<String> s = this.getConfig().getStringList("PScore"); 

    for(String str : PScore.keySet()) 
    { 
     s.add(str + ":" + PScore.get(str)); 
    } 
    this.getConfig().set("PScore", s); 
    this.saveConfig(); 
} 

public void loadHash() 
{ 
    List<String> s = this.getConfig().getStringList("PScore"); 

    for(String str: s) 
    { 
     String words[] = str.split(":"); 
     PScore.put(words[0], Integer.parseInt(words[1])); 
    } 
} 

Diese Methode funktioniert gut jetzt, aber schauen, was die Config tut:

PScore: 
- JackerNils:5 
- JackerNils:19 

Sie sehen also? Anstatt es zu überschreiben, wiederholt es sich.

Antwort

0

Problem ist die saveConfig, was es ist zu speichern und überschreibt die aktuelle Datei, die Sie nach jeder Ausführung der Schleife tun, was dazu führt, dass nur ein Wert von der hashmap gespeichert wird, nachdem die Schleife beendet ist. Was Sie tun können, ist die Config speichern, nachdem alle Werte einstellen, wie folgt aus:

for (String string : PScore.keySet()) 
    { 
     this.getConfig().set("score.pscore", string); 
    } 
this.saveConfig(); 

Auch im Auge behalten Sie hinzufügen alle Werte in den gleichen Abschnitt in der Config. Speichern Sie stattdessen ein Array.

+0

Werfen Sie einen Blick auf meine Bearbeitung! In diesem Beispiel funktioniert alles ganz gut, nur das Speichern ist ein bisschen falsch. – JackerNils

+0

Versuchen Sie, eine neue Arraylist zu erstellen, anstatt getStringList zu verwenden. Jetzt erhalten Sie die Liste und fügen alle Werte in der Liste erneut zur Liste hinzu, was zu Duplikaten führt. Versuchen Sie 'List s = neue ArrayList ();' – Squiddie

+1

Joop, der für mich arbeitete! ;) Danke fürs Helfen! – JackerNils