将 class 个对象的列表传递到配置文件

Passing List of class objects to config file

我有 class:

class Region{
String name;
List<String> BlockPlayers = new ArrayList<>();
}

然后我像这样在我的程序中创建了一个对象列表

List<Region> playersRegions = new ArrayList<>();

现在我需要创建一个函数,将对象从 playersRegions 列表传递到配置文件。然后我需要创建一个函数来加载配置文件中的所有内容并传递给 playersRegions list

我做了这样的东西

private void save_regions_inConfig()
{
getConfig().set("locs", playersRegions);
saveConfig();
}

但我不知道如何将它从文件加载到 playersRegions。我只想在关闭程序并再次打开后保留所有内容。

这应该有效

public List load_playerRegions_fromConfig(List<Region> playersRegions) {
    return getConfig().getList("locs", playersRegions);
}

您应该定义一种格式化区域的方法。

假设方法在您的 JavaPlugin class 上,其他一切都做得很好(plugin.yml 有效等)

要编写它们,请使用如下内容:

public void saveRegion(List<Region> regions) {
   FileConfiguration config = getConfig();
   int i = 0;
   for(Region r : regions) {
       config.set("regions." + i + ".name", r.name);
       config.set("regions." + i + ".blockplayers", r.BlockPlayers);

       i++;
   }
   saveConfig();
}

配置文件将是这样的:

regions:
   0:
      name: "Region 1"
      blockplayers:
      - "Something"

现在,要阅读它,您应该这样做:

public List<Region> getRegion() {
   ConfigurationSection config = getConfig().getConfigurationSection("regions");
   if(config == null) // no region set yet
       return new ArrayList<>();
   List<Region> list = new ArrayList<>();
   for(String keys : config.getKeys(false)) {
       ConfigurationSection regionConfig = config.getConfigurationSection(keys);
       list.add(new Region(regionConfig.getString("name"), region.getStringList("blockplayers")));
   }
   return list;
}

注意:您应该像这样在 Region 对象中定义一个构造函数:

public class Region{
    String name;
    List<String> blockPlayers = new ArrayList<>();

    public Region(String name, List<String> blockPlayers) {
        this.name = name;
        this.blockPlayers = blockPlayers;
    }
}

最后,您的某些名称(方法或变量)不符合 Java 约定。特别是关于方法,但这是一个细节。