Java 在同一文件中保存/加载两个哈希映射

Java 在同一文件中保存/加载两个哈希映射,java,bukkit,Java,Bukkit,我很想知道如何保存和加载两个HashMap,我一直在尝试使用我自己的方法,但我什么都想不出来,因为一个正在覆盖另一个 这是我的主课 package me.core.UPTest; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin{ public final Sub sub = new Sub(this); public void onEnable(){ getLogger(

我很想知道如何保存和加载两个HashMap,我一直在尝试使用我自己的方法,但我什么都想不出来,因为一个正在覆盖另一个

这是我的主课

package me.core.UPTest;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{

public final Sub sub = new Sub(this);

public void onEnable(){
    getLogger().info("Ultimate Plugin is now enabled.");
    getServer().getPluginManager().registerEvents(sub, this);
    sub.loadPoints();
    sub.loadCommandUsed
}

public void onDisable(){
    getLogger().info("Ultimate Plugin is now disabled.");
    sub.savePoints();
    sub.saveCommandUsed();
}
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){

    Player player = (Player) sender;

    if(cmd.getName().equalsIgnoreCase("points")){
        if(args.length == 0){
            player.sendMessage("You have " + sub.points.get(player.getName().toLowerCase()) + " points.");
            return true;

        }else if(args.length > 0){
            player.sendMessage(ChatColor.GRAY + "Too many arguments.");
            return true;
        }
    }

    if(cmd.getName().equalsIgnoreCase("vote")){
        if(args.length == 0){
            if(sub.commandused.get(player.getName().toLowerCase()) == false){
                player.sendMessage(ChatColor.BLUE + "Thank you for voting for our server!");
                sub.commandused.put(player.getName().toLowerCase(), true);
                return true;

            }else{
                player.sendMessage(ChatColor.BLUE + "You have already voted for our server!");
            }

        }else if(args.length > 0){
            player.sendMessage(ChatColor.GRAY + "Too many arguments.");
            return true;
        }
    }

    return false;
}
}
这是我的小班

package me.core.UPTest;

import java.util.HashMap;
import java.util.Map.Entry;

public class Sub {

private Main plugin;

public Sub(Main plugin) {
    this.plugin = plugin;
}

private HashMap<String, Integer> points = new HashMap<String, Integer>();
private HashMap<String, Boolean> commandused = new HashMap<String, Boolean>();

public void loadPoints(){
    for (String str : plugin.getConfig().getKeys(true)) {
        int p = plugin.getConfig().getInt(str);
        points.put(str, p);
    }
    plugin.saveConfig();
}

public void savePoints(){
    for (Entry<String, Integer> pointstostore : points.entrySet()) {
        plugin.getConfig().set(pointstostore.getKey(), pointstostore.getValue());
    }
    plugin.saveConfig();
}

public void loadCommandUsed(){
    for (String str : plugin.getConfig().getKeys(true)){
        boolean p = plugin.getConfig().getBoolean(str);
        commandused.put(str, p);
    }
    plugin.saveConfig();
}

public void saveCommandUsed(){
    for (Entry<String, Boolean> commandusedtostore : commandused.entrySet()){
        plugin.getConfig().set(commandusedtostore.getKey(), commandusedtostore.getValue());
    }
    plugin.saveConfig();
}
    @EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
    Player player = event.getPlayer();

    if(points.get(player.getName().toLowerCase()) == null){
        points.put(player.getName().toLowerCase(), 0);
    }
    commandused.put(player.getName().toLowerCase(), false);
}
}
package me.core.UPTest;
导入java.util.HashMap;
导入java.util.Map.Entry;
公开课小组{
私有主插件;
公共子插件(主插件){
this.plugin=plugin;
}
私有HashMap points=newhashmap();
private HashMap commandused=新HashMap();
公共无效加载点(){
for(字符串str:plugin.getConfig().getKeys(true)){
int p=plugin.getConfig().getInt(str);
分.放(str,p);
}
plugin.saveConfig();
}
公共无效保存点(){
for(入口点存储:points.entrySet()){
plugin.getConfig().set(pointstostore.getKey(),pointstostore.getValue());
}
plugin.saveConfig();
}
public void loadCommandUsed(){
for(字符串str:plugin.getConfig().getKeys(true)){
布尔p=plugin.getConfig().getBoolean(str);
命令使用。放置(str,p);
}
plugin.saveConfig();
}
public void saveCommandUsed(){
对于(条目commandusedtostore:commandused.entrySet()){
plugin.getConfig().set(commandusedtostore.getKey(),commandusedtostore.getValue());
}
plugin.saveConfig();
}
@事件处理程序
PlayerJoin上的公共无效(PlayerJoinEvent事件){
Player=event.getPlayer();
if(points.get(player.getName().toLowerCase())==null){
points.put(player.getName().toLowerCase(),0);
}
commandused.put(player.getName().toLowerCase(),false);
}
}
正如我在一开始提到的,地图相互覆盖,我不知道如何解决这个问题

1)为什么要在加载方法中编写
plugin.saveConfig()
? 这里不需要它

2)
命令使用
贴图使用相同的键。 我不明白你为什么有两张地图。一个就够了

这种方法

public void onDisable(){
    getLogger().info("Ultimate Plugin is now disabled.");
    sub.savePoints();
    sub.saveCommandUsed();
}
依次调用
sub.savePoints()
sub.saveCommandUsed()

所以,当你这么做的时候

 plugin.getConfig().set(pointstostore.getKey(), pointstostore.getValue());
saveCommandUsed()

plugin.getConfig().set(commandusedtostore.getKey(),commandusedtostore.getValue());
savePoints()中

第一次,您写入最终存储在'plugin().getConfig()中的键值
第二次覆盖它们。

1)为什么要在加载方法中编写
plugin.saveConfig()
? 这里不需要它

2)
命令使用
贴图使用相同的键。 我不明白你为什么有两张地图。一个就够了

这种方法

public void onDisable(){
    getLogger().info("Ultimate Plugin is now disabled.");
    sub.savePoints();
    sub.saveCommandUsed();
}
依次调用
sub.savePoints()
sub.saveCommandUsed()

所以,当你这么做的时候

 plugin.getConfig().set(pointstostore.getKey(), pointstostore.getValue());
saveCommandUsed()

plugin.getConfig().set(commandusedtostore.getKey(),commandusedtostore.getValue());
savePoints()中

第一次,您写入最终存储在'plugin().getConfig()中的键值

第二次覆盖时。

问题不在于此代码,而在于
plugin
字段后面的类和
plugin.getConfig()
方法。给他们看:)这里有完整的代码:)!你确定吗??)是的,基本上就是这样。我认为
getConfig()
方法是通过在
Main
类中扩展
JavaPlugin
继承的。问题不在于此代码,而在于
plugin
字段后面的类和
plugin.getConfig()
方法。给他们看:)这里有完整的代码:)!你确定吗??)是的,基本上就是这样,我认为
getConfig()
方法是通过扩展
JavaPlugin
中的
Main
类继承的,正如我前面提到的,我希望将两个映射以不同的方式保存在同一个文件中,因为一个是,另一个是,所以您建议我实际上可以将它们保存在同一个键中?如果您想同时存储这两个,您确实应该使用同一个键。例如,您可以将它们保存在列表中。但是为什么您需要两种不同格式的相同信息呢?我的想法就像在config.yml中让玩家拥有类似smth的player:points:(amount)commandused:(true/false)正如我上面提到的,我想让两个地图以不同的方式保存在同一个文件中,因为一个是,另一个是,所以你建议我可以将它们都保存在同一个密钥中?如果你想同时存储这两个,你确实应该使用同一个密钥。例如,您可以将它们保存在列表中。但是为什么您需要两种不同格式的相同信息呢?我的想法就像在config.yml中让玩家拥有类似smth的player:points:(amount)commandused:(true/false)