gpt4 book ai didi

java - 配置文件给我随机的值

转载 作者:行者123 更新时间:2023-11-30 06:21:48 26 4
gpt4 key购买 nike

我正在制作 Minecraft Bukkit 插件,但我的配置文件有问题。

当我尝试使用 getConfig().getString(path) 从配置中获取值时,它工作得很好。但现在,我尝试从我的配置中加载团队列表,在 YAML 中,它们是:

teams:
list:
- ArnyminerZ
ArnyminerZ:
players: []
prefix: ''
suffix: ''
dispname: ArnyminerZ
seeinvbuddies: false
friendlyfire: false
color: WHITE

起初,我使用 for(String team : config.createSection("teams").getKeys(false)),并且它有效,但突然,经过一些修改,它停止工作,我改变了我的方法来加载字符串列表,我不知道为什么,它的工作方式有点奇怪。

在我的 onEnable() 方法中,我有这个:

public FileConfiguration config;

public static AlcoasUHC plugin;

@Override
public void onEnable() {
plugin = this;

config = this.getConfig();
loadConfigDefaults();

getLogger().info("Alcoas UHC -> Enabled! There are " + scoreboard.getTeams().size() + " teams registered.");
}

在外部类中,我有方法 getTeams():

public List<String> getTeams() {
return plugin.config.getStringList("teams.list");
}

loadConfigDefaults() 方法只是使用 config.addDefault(path, value);config.options() 将一些预定义值加载到配置中.copyDefaults(false);.

在第一种方法中,加载工作正常,它调试Alcoas UHC -> 已启用!已有 1 个团队注册。。但是当我尝试再次加载团队时,例如,用这种方法:

} else if (args[0].equalsIgnoreCase("teams")) {
List<String> teams = scoreboard.getTeams();
if (teams.size() <= 0) {
SendMessage.sendMessage(sender,
config.getString("messages.anyTeamCreated"));
} else {
StringBuilder printingTeams = new StringBuilder();
for (String team : scoreboard.getTeams()) {
if (teams.toString().equals("")) {
printingTeams.append(AndColor.GOLD).append(team);
} else {
printingTeams.append(AndColor.GREEN).append(", ").append(AndColor.GOLD).append(team);
}
}
SendMessage.sendMessage(sender, config.getString("messages.availableTeams").replace("%at%", printingTeams));
}
}

它在服务器日志中返回一个空列表,并且在游戏中它运行此行 config.getString("messages.anyTeamCreated"));,这意味着该列表是空的。

我能做什么?我做错了什么吗?

我使用 git-Spigot-549c1fa-45c8386 作为服务器,使用 Minecraft 1.12.2 实现 API 版本 1.12.2-R0.1-SNAPSHOT,并且我正在使用

进行编程
IntelliJ IDEA 2017.3.1 (Community Edition)
Build #IC-173.3942.27, built on December 11, 2017
JRE: 1.8.0_152-release-1024-b8 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

最佳答案

根据 bn4t 的请求发布给予Arnyminer有机会接受答案并公开解决此问题。

根据 Bukkit 的 API ConfigurationSection createSection(String path) 方法有这样的描述:“之前在此路径设置的任何值都将被覆盖。”这意味着当您执行该方法时,它实际上会清理包含您的团队的部分,因为它将被覆盖,导致没有团队被加载。

您要使用的是getConfigurationSection(String path),这将返回正确的部分(如果存在)。这不会覆盖任何内容。

或者您可以混合使用它们。如果 getConfigurationSection(String path) 返回 null(如果该部分根本不存在),请使用 createSection(String path) 创建一个新部分。像这样:

ConfigurationSection 部分 = getConfigurationSection("your.path.here");
如果(部分==空){
节 = createSection("your.path.here");
}

此外,这与您的问题没有任何关系,但我强烈建议仅在必要时才从配置加载团队,例如服务器启动时,而不是每次使用它时。

关于java - 配置文件给我随机的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47996861/

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