配置文件给了我一些randomely的价值

时间:2017-12-27 18:18:27

标签: java bukkit

我正在制作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 -> Enabled! There are 1 teams registered.。但是当我尝试再次加载团队时,例如,在这种方法中:

} 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,实现API版本1.12.2-R0.1-SNAPSHOT,使用Minecraft 1.12.2,我正在使用

进行编程
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

1 个答案:

答案 0 :(得分:1)

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

根据Bukkit的ConfigurationSection API,方法createSection(String path)具有以下描述:&#34;之前在此路径中设置的任何值都将被覆盖。&# 34; 这意味着当您执行该方法时,它实际上将清除包含您的团队的部分,因为它将被覆盖,从而导致没有团队被加载。

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

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

ConfigurationSection section = getConfigurationSection("your.path.here"); if(section == null) { section = createSection("your.path.here"); }

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