【问题标题】:Bukkit ConfigurationSection getKeysBukkit ConfigurationSection getKeys
【发布时间】:2014-05-25 21:27:12
【问题描述】:

我有一个像这样的 bukkit 配置文件:

effected mobs:
  skeleton:
    lower hp limit: 0
    upper hp limit: 0
  zombie:
    lower hp limit: 0
    upper hp limit: 0
  spider:
    lower hp limit: 0
    upper hp limit: 0

我正在尝试获得一个包含 [骷髅、僵尸、蜘蛛] 和任何其他可以通过为其提供关键“受影响的生物”来添加的集合。我看过这个类似的question 并尝试了以下代码:

public class Main extends JavaPlugin implements Listener{
    public FileConfiguration config;
    public Set<String> mobsEffected;

    public void onEnable(){
        config = getConfig();
        mobsEffected = config.getConfigurationSection("effected mobs").getKeys(false);
        Bukkit.getLogger().info(String.valueOf(mobsEffected.size() ));

    }
}

但大小记录为 0,而应该是 3。有什么建议吗?

【问题讨论】:

  • 您确定可以将最大值和最小值设置为 0 吗?
  • 我还没有对这些值做任何事情,所以没关系。
  • 几件事:尝试用下划线替换配置值中的所有空格,尝试使用 config = this.getConfig();即使这无关紧要,也要确保您使用的配置名为 config.yml,并且,尝试记录所有值以查看显示的内容

标签: java plugins minecraft bukkit


【解决方案1】:

因此,您实际上希望根据您的配置条目获得一组字符串。 这应该有效:

public class Main extends JavaPlugin implements Listener {
    public FileConfiguration config;
    public Set<String> mobsEffected;

    public void onEnable() {
        // you have to initialize your set!
        mobsEffected = new HashSet<String>();
        // this creates the Config
        File Cfgpath = new File("plugins/yourpluginnamehere");
        File Cfg =  new File("plugins/yourpluginnamehere/config.yml");
        try {
            Cfg.createNewFile();
        } catch (IOException e) {
            Cfgpath.mkdirs();
            try {
                Cfg.createNewFile();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

        config = YamlConfiguration.loadConfiguration(Cfg);
        // Now it loops through all the Keys in the Configuration Section
        // "effected mobs" and adds every key to your set!
        for (String key : config.getConfigurationSection("effected mobs").getKeys(false)) {
            mobsEffected.add(key);
        }
        Bukkit.getLogger().info(String.valueOf(mobsEffected.size()));

    }
}

请确保将 yourpluginnamehere 替换为您的插件名称。 您必须在两次替换时都使用相同的字符串(区分大小写!)。

然后它会在第一次运行时自动为你创建一个带有空白 config.yml 的配置目录。

在第一次运行时,您还会得到一个NullPointerexception,因为 ConfigurationSection 还不存在。因此,只需转到插件的文件夹并将配置内容插入新创建的 config.yml。

【讨论】:

    【解决方案2】:
    getConfig().getConfigurationSection("effected mobs").getKeys(false).toArray();
    

    你应该更仔细地阅读 wiki xD

    【讨论】:

      【解决方案3】:

      尝试使用下面的代码来确保在从中获取信息之前创建文件。确保您的默认 config.yml 位于主目录的 plugin.jar 文件中。 (将它放在 IDE 中的哪个位置真的取决于。我把它放在主插件目录中,但根据你编译插件的方式,它可能需要放在你的 src 文件夹中。(我使用 Maven 项目,而不是 Java Eclipse 中的项目。)

      public class Main extends JavaPlugin implements Listener{
          public FileConfiguration config;
          public Set<String> mobsEffected;
      
          public void onEnable(){
              config = Bukkit.getConfig();
              config.saveDefaultConfig();
              mobsEffected = config.getConfigurationSection("effected mobs").getKeys(false);
              Bukkit.getLogger().info(String.valueOf(mobsEffected.size()));
          }
      }
      

      【讨论】:

        【解决方案4】:

        您的配置部分effected mobs 包含一个空格,其中配置部分名称中不允许有空格。 就个人而言,我使用连字符 (-),其中将使用空格。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-19
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多