将 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 约定。特别是关于方法,但这是一个细节。
我有 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 约定。特别是关于方法,但这是一个细节。