1.11 Java Spigot / Bukkit编程 - 将HashMap保存/加载到Config.yml中

时间:2017-03-28 15:16:28

标签: java plugins hashmap bukkit

我在每个玩家的HashMap中计算得分:

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

现在我想保存并加载HashMap并在Config.yml中。 Config已存在且正在使用其他变量。

这是我多次尝试解决问题的方法:

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

public void loadHash() 
{
}

但在配置中我只得到:

score:
 pscore: JackerNils

加载功能为空,因此加载时当然没有任何反应。保存和加载函数由onEnable()和onDisable()

控制

//编辑:

    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]));
     }
}

此方法现在运行正常,但请查看Config的功能:

PScore:
 - JackerNils:5
 - JackerNils:19

所以你看到了吗?它不是覆盖它,而是重复。

1 个答案:

答案 0 :(得分:0)

问题是saveConfig,它的作用是保存和覆盖每次循环执行后你正在做的当前文件,导致在循环结束后只有一个来自hashmap的值被保存。您可以做的是在设置所有值后保存配置,如下所示:

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

另请注意,您要将所有值添加到配置中的相同部分。改为保存数组。