gpt4 book ai didi

java - 在同一文件中保存/加载两个 HashMap

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:15 24 4
gpt4 key购买 nike

我很想知道如何保存和加载两个 HashMap,我一直在尝试使用自己的方法,但我无法弄清楚,因为一个会覆盖另一个!

这是我的 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;
}
}

这是我的子类

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

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

最佳答案

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

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

这个方法

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

关于java - 在同一文件中保存/加载两个 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38925073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com