繁体   English   中英

在同一文件中保存/加载两个HashMaps

[英]Saving / Loading two HashMaps in the same file

我很想知道如何保存和加载两个HashMaps,我一直在尝试使用我自己的方法,但是我无法解决任何问题,因为有一个超越了另一个!

这是我的Main.class

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

这是我的Sub.class

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

正如我在开始时提到的,地图互相覆盖,我不知道如何解决这个问题!

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

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

这种方法

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()中的键值。
第二次覆盖它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM