访问多个 YAML 文件
Accessing multiple YAML files
所以,在过去的 5 个小时里,我一直在摆弄这个问题,我似乎无法弄清楚为什么我无法访问我的第二个 yaml 文件。我一直在搜索 google 寻找答案,但仍然没有找到任何与我正在寻找的东西有一点相似的东西。现在,在您问我是否已将其注册到 onEnable 事件之前,我已经注册了。 config.yml 文件工作得很好,正如我需要的那样。但是,当我创建第二个 yaml 文件“blocks.yml”时,我无法访问这些函数,例如:
我需要将数据放入 blocks.yml 文件,但是使用 plugin.data.getBlocks().contains(...)
.contains()
部分显示错误,当我删除 .contains()
部分时,我唯一的选择是plugin.data.getBlocks()
部分是 try
和 lambda
事件。老实说,我对此非常困惑。我什至在没有 plugin.data.getBlocks()
行的 .data
部分的情况下尝试过它,但它完全没有显示 getBlocks()
。这是我的配置管理器文件;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ConfigManager {
private main plugin;
private FileConfiguration config;
private File configFile;
private FileConfiguration blocks;
private File blocksFile;
public ConfigManager(main plugin) {
this.plugin = plugin;
}
public void reloadConfig() {
if (configFile == null) {
configFile = new File(plugin.getDataFolder(), "config.yml");
}
config = YamlConfiguration.loadConfiguration(configFile);
InputStream defaultStream = plugin.getResource("config.yml");
if (defaultStream != null) {
YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultStream));
config.setDefaults(defaultConfig);
}
}
public void getConfig() {
if (config == null) {
reloadConfig();
}
}
public void saveConfig() {
if(config == null || configFile == null) {
return;
}
try {
config.save(configFile);
} catch (IOException e) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Could not save config to " + this.configFile, e.toString());
}
}
public void saveDefaultConfig() {
if(configFile == null) {
configFile = new File(plugin.getDataFolder(), "config.yml");
}
if(!configFile.exists()) {
plugin.saveResource("plugin.yml", false);
}
}
public void reloadBlocks() {
if (blocksFile == null) {
blocksFile = new File(plugin.getDataFolder(), "blocks.yml");
}
blocks = YamlConfiguration.loadConfiguration(blocksFile);
InputStream defaultBlocksStream = plugin.getResource("blocks.yml");
if (defaultBlocksStream != null) {
YamlConfiguration defaultBlocks = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultBlocksStream));
blocks.setDefaults(defaultBlocks);
}
}
public void getBlocks() {
if (blocks == null) {
reloadBlocks();
}
}
public void saveBlocks() {
if(blocks == null || blocksFile == null) {
return;
}
try {
blocks.save(blocksFile);
} catch (IOException e) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Could not save blocks to " + this.blocksFile, e.toString());
}
}
public void saveDefaultBlocks() {
if(blocksFile == null) {
blocksFile = new File(plugin.getDataFolder(), "blocks.yml");
}
if(!blocksFile.exists()) {
plugin.saveResource("blocks.yml", false);
}
}
}
有很多话要说。
你的方法getBlocks()
return“无效”,所以什么都没有。你应该这样做:
public FileConfiguration getBlocks() {
if (blocks == null) {
reloadBlocks();
}
return blocks;
}
此外,JavaPlugin 的 class 已经实现了 saveConfig()
& saveDefaultConfig()
方法。您不必自己复制它们。这样做 :
plugin.saveDefaultConfig(); // copy if not found
plugin.getConfig().set("a", "b");
plugin.saveConfig(); // save config
老实说,问题的描述对你帮助不大。
根据您的设计模式,我发现方法 saveDefaultConfig
和 saveDefaultBlocks
之间存在差异。
考虑到这个方法,我建议您将上一条命令 plugin.saveResource("blocks.yml", false);
更改为 plugin.saveResource("plugin.yml", false);
。
此外,方法 contains
不在您在问题中添加的代码片段中。尝试在项目文件中搜索单词 contains
,因为错误可能与此命令有关。可能您在不包含此类方法的对象上使用此命令。
更新
将方法 getBlocks
更改为,
public YamlConfiguration getBlocks() {
if (blocks == null) {
reloadBlocks();
}
return blocks;
}
所以,在过去的 5 个小时里,我一直在摆弄这个问题,我似乎无法弄清楚为什么我无法访问我的第二个 yaml 文件。我一直在搜索 google 寻找答案,但仍然没有找到任何与我正在寻找的东西有一点相似的东西。现在,在您问我是否已将其注册到 onEnable 事件之前,我已经注册了。 config.yml 文件工作得很好,正如我需要的那样。但是,当我创建第二个 yaml 文件“blocks.yml”时,我无法访问这些函数,例如:
我需要将数据放入 blocks.yml 文件,但是使用 plugin.data.getBlocks().contains(...)
.contains()
部分显示错误,当我删除 .contains()
部分时,我唯一的选择是plugin.data.getBlocks()
部分是 try
和 lambda
事件。老实说,我对此非常困惑。我什至在没有 plugin.data.getBlocks()
行的 .data
部分的情况下尝试过它,但它完全没有显示 getBlocks()
。这是我的配置管理器文件;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ConfigManager {
private main plugin;
private FileConfiguration config;
private File configFile;
private FileConfiguration blocks;
private File blocksFile;
public ConfigManager(main plugin) {
this.plugin = plugin;
}
public void reloadConfig() {
if (configFile == null) {
configFile = new File(plugin.getDataFolder(), "config.yml");
}
config = YamlConfiguration.loadConfiguration(configFile);
InputStream defaultStream = plugin.getResource("config.yml");
if (defaultStream != null) {
YamlConfiguration defaultConfig = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultStream));
config.setDefaults(defaultConfig);
}
}
public void getConfig() {
if (config == null) {
reloadConfig();
}
}
public void saveConfig() {
if(config == null || configFile == null) {
return;
}
try {
config.save(configFile);
} catch (IOException e) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Could not save config to " + this.configFile, e.toString());
}
}
public void saveDefaultConfig() {
if(configFile == null) {
configFile = new File(plugin.getDataFolder(), "config.yml");
}
if(!configFile.exists()) {
plugin.saveResource("plugin.yml", false);
}
}
public void reloadBlocks() {
if (blocksFile == null) {
blocksFile = new File(plugin.getDataFolder(), "blocks.yml");
}
blocks = YamlConfiguration.loadConfiguration(blocksFile);
InputStream defaultBlocksStream = plugin.getResource("blocks.yml");
if (defaultBlocksStream != null) {
YamlConfiguration defaultBlocks = YamlConfiguration.loadConfiguration(new InputStreamReader(defaultBlocksStream));
blocks.setDefaults(defaultBlocks);
}
}
public void getBlocks() {
if (blocks == null) {
reloadBlocks();
}
}
public void saveBlocks() {
if(blocks == null || blocksFile == null) {
return;
}
try {
blocks.save(blocksFile);
} catch (IOException e) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Could not save blocks to " + this.blocksFile, e.toString());
}
}
public void saveDefaultBlocks() {
if(blocksFile == null) {
blocksFile = new File(plugin.getDataFolder(), "blocks.yml");
}
if(!blocksFile.exists()) {
plugin.saveResource("blocks.yml", false);
}
}
}
有很多话要说。
你的方法getBlocks()
return“无效”,所以什么都没有。你应该这样做:
public FileConfiguration getBlocks() {
if (blocks == null) {
reloadBlocks();
}
return blocks;
}
此外,JavaPlugin 的 class 已经实现了 saveConfig()
& saveDefaultConfig()
方法。您不必自己复制它们。这样做 :
plugin.saveDefaultConfig(); // copy if not found
plugin.getConfig().set("a", "b");
plugin.saveConfig(); // save config
老实说,问题的描述对你帮助不大。
根据您的设计模式,我发现方法 saveDefaultConfig
和 saveDefaultBlocks
之间存在差异。
考虑到这个方法,我建议您将上一条命令 plugin.saveResource("blocks.yml", false);
更改为 plugin.saveResource("plugin.yml", false);
。
此外,方法 contains
不在您在问题中添加的代码片段中。尝试在项目文件中搜索单词 contains
,因为错误可能与此命令有关。可能您在不包含此类方法的对象上使用此命令。
更新
将方法 getBlocks
更改为,
public YamlConfiguration getBlocks() {
if (blocks == null) {
reloadBlocks();
}
return blocks;
}