Minecraft 插件 config.yml 部分无法保存
Minecraft plugin config.yml sections doesn't save
我正在编写一个基于 spigot 编码的 Minecraft 插件。
但是我有以下问题,我试图通过插件编辑配置文件,但是当我尝试存储信息时,数据没有存储。例如,当我将 name
从 Archive
更改为 Archive Stats
并重新加载服务器时。然后配置name
returns到Archive
.
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive
当我将名称更改为“Archive Stats”时
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive Stats
并重新加载服务器,它仍然变回“Archive”
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive
下面是要显示的 2 个代码:
- class
package com.Fender.Bedrock.files;
import com.Fender.Bedrock.Bedrock;
import org.bukkit.Bukkit;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CustomConfig
{
private static Bedrock plugin;
public static File file;
private static FileConfiguration customFile;
public static void setup(Bedrock plugin1)
{
plugin = plugin1;
file = new File(plugin.getDataFolder(), "config.yml");
if(!file.exists())
{
try {
file.createNewFile();
}catch (IOException e){
}
}
customFile = new YamlConfiguration();
save();
try{customFile.load(file);}
catch (IOException | InvalidConfigurationException e)
{
e.printStackTrace();
}
}
public static FileConfiguration get()
{
return customFile;
}
public static void save()
{
try
{
customFile.save(file);
}catch (IOException e)
{
System.out.print("Couldn't save file!");
}
}
public static void load()
{
try
{
try {
try {
customFile.load(file);
}catch (InvalidConfigurationException i){
System.out.print("Couldn't load file!");
}
}catch (FileNotFoundException f)
{
System.out.print("Couldn't load file!");
}
}catch (IOException e)
{
System.out.print("Couldn't load file!");
}
}
public static void reload()
{
customFile = YamlConfiguration.loadConfiguration(file);
}
public boolean exists()
{
if(file.exists()){
return true;
}else
{
return false;
}
}
}
- 主要的方法class
public void FileCreate()
{
CustomConfig.setup(this);
CustomConfig.reload();
{
CustomConfig.get().addDefault("Name1", "§dHis");
CustomConfig.get().addDefault("Place", 1);
CustomConfig.get().createSection("Archive");
CustomConfig.get().getConfigurationSection("Archive").addDefault("Material", itemStack);
CustomConfig.get().getConfigurationSection("Archive").addDefault("ArchiveAtStart", false);
CustomConfig.get().getConfigurationSection("Archive").addDefault("Name", "Archive");
CustomConfig.get().createSection("noob").addDefault("help", false);
}
CustomConfig.get().options().copyHeader(true);
CustomConfig.get().options().copyDefaults(true);
CustomConfig.save();
//saveResource("config.yml", false);
this.saveDefaultConfig();
}
最后,这是我的插件主要方法:
@Override
public void onEnable() {
FileCreate();
this.getConfig().options().copyDefaults(true);
this.saveConfig();
}
出现此问题是因为您可以在启动时覆盖行。更确切地说,在添加默认行时。
这只会添加默认值,但不会覆盖:
CustomConfig.get().addDefault("Name1", "§dHis");
正是这个改变了一切:
CustomConfig.get().createSection("Archive");
您应该继续使用 addDefault()
。对于部分,只需使用 addDefault("mysection.key", "myval")
,因此,在您的情况下:
CustomConfig.get().addDefault("Archive.Name", "Archive");
我正在编写一个基于 spigot 编码的 Minecraft 插件。
但是我有以下问题,我试图通过插件编辑配置文件,但是当我尝试存储信息时,数据没有存储。例如,当我将 name
从 Archive
更改为 Archive Stats
并重新加载服务器时。然后配置name
returns到Archive
.
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive
当我将名称更改为“Archive Stats”时
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive Stats
并重新加载服务器,它仍然变回“Archive”
Archive:
Material:
==: org.bukkit.inventory.ItemStack
v: 2586
type: BOOKSHELF
ArchiveAtStart: false
Name: Archive
下面是要显示的 2 个代码:
- class
package com.Fender.Bedrock.files;
import com.Fender.Bedrock.Bedrock;
import org.bukkit.Bukkit;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CustomConfig
{
private static Bedrock plugin;
public static File file;
private static FileConfiguration customFile;
public static void setup(Bedrock plugin1)
{
plugin = plugin1;
file = new File(plugin.getDataFolder(), "config.yml");
if(!file.exists())
{
try {
file.createNewFile();
}catch (IOException e){
}
}
customFile = new YamlConfiguration();
save();
try{customFile.load(file);}
catch (IOException | InvalidConfigurationException e)
{
e.printStackTrace();
}
}
public static FileConfiguration get()
{
return customFile;
}
public static void save()
{
try
{
customFile.save(file);
}catch (IOException e)
{
System.out.print("Couldn't save file!");
}
}
public static void load()
{
try
{
try {
try {
customFile.load(file);
}catch (InvalidConfigurationException i){
System.out.print("Couldn't load file!");
}
}catch (FileNotFoundException f)
{
System.out.print("Couldn't load file!");
}
}catch (IOException e)
{
System.out.print("Couldn't load file!");
}
}
public static void reload()
{
customFile = YamlConfiguration.loadConfiguration(file);
}
public boolean exists()
{
if(file.exists()){
return true;
}else
{
return false;
}
}
}
- 主要的方法class
public void FileCreate()
{
CustomConfig.setup(this);
CustomConfig.reload();
{
CustomConfig.get().addDefault("Name1", "§dHis");
CustomConfig.get().addDefault("Place", 1);
CustomConfig.get().createSection("Archive");
CustomConfig.get().getConfigurationSection("Archive").addDefault("Material", itemStack);
CustomConfig.get().getConfigurationSection("Archive").addDefault("ArchiveAtStart", false);
CustomConfig.get().getConfigurationSection("Archive").addDefault("Name", "Archive");
CustomConfig.get().createSection("noob").addDefault("help", false);
}
CustomConfig.get().options().copyHeader(true);
CustomConfig.get().options().copyDefaults(true);
CustomConfig.save();
//saveResource("config.yml", false);
this.saveDefaultConfig();
}
最后,这是我的插件主要方法:
@Override
public void onEnable() {
FileCreate();
this.getConfig().options().copyDefaults(true);
this.saveConfig();
}
出现此问题是因为您可以在启动时覆盖行。更确切地说,在添加默认行时。
这只会添加默认值,但不会覆盖:
CustomConfig.get().addDefault("Name1", "§dHis");
正是这个改变了一切:
CustomConfig.get().createSection("Archive");
您应该继续使用 addDefault()
。对于部分,只需使用 addDefault("mysection.key", "myval")
,因此,在您的情况下:
CustomConfig.get().addDefault("Archive.Name", "Archive");