有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Bukkit配置部分getKeys

我有一个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。有什么建议吗


共 (4) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    因此,您实际上希望根据配置条目获取一组字符串。 这应该起作用:

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

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

    然后,它将自动创建一个配置目录,其中包含一个空配置。在第一次跑步时为你加油

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

  3. # 3 楼答案

    getConfig().getConfigurationSection("effected mobs").getKeys(false).toArray();
    

    你应该更仔细地阅读维基xD

  4. # 4 楼答案

    请尝试使用下面的代码,确保在从文件中获取信息之前创建了该文件。确保您的默认配置。yml在插件中。主目录中的jar文件。(将其放在IDE中的位置取决于具体情况。我将其放在主插件目录中,但取决于编译插件的方式,它可能需要放在src文件夹中。(我使用的是Maven项目,而不是Eclipse中的Java项目。)

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