我很想知道如何保存和加载两个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);
}
}
正如我在开头提到的那样,地图互相覆盖,我不知道如何解决这个问题!
答案 0 :(得分:0)
1)为什么要在加载方法中编写plugin.saveConfig()
?
这里不需要它。
2)points
和commandused
地图使用相同的键。
我不明白为什么你有两张地图。一个就足够了。
此方法
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());
<{1>}和中的
saveCommandUsed()
plugin.getConfig().set(commandusedtostore.getKey(),commandusedtostore.getValue());
中的
第一次,你编写了最终存储在`plugin()。getConfig()中的键值。
第二次覆盖它们。