配置 API
配置文件用来存配置信息——开关功能、存数据、改参数。Bukkit 提供了配置 API 读写 YAML 配置,这是插件开发最常用的 API 之一。
目前配置 API 只有 YAML 可用(这也是大多数插件配置是
.yml的原因)。相关类在org.bukkit.configuration和org.bukkit.configuration.file包下。
YAML 基础
YAML 用缩进表示层级,靠空格看所属关系。看这个例子:
Settings:
DebugMode: true
Time:
CoolDown: 10
Data:
player1:
NickName: HandsomeBoy
Score: 50
Title:
- Toilet Protector
- Widow Maker键的命名
用 . 连接层级称呼一个键:
Settings是键Settings.DebugMode是Settings下的子键Settings.Time.CoolDown对应值10Data.player1.Score对应值50
缩进必须用空格
YAML 不能用 Tab,只能用空格缩进,且同级缩进必须一致。这是新手最常踩的坑。
数据类型
配置可存:基本类型(int/double/boolean)、String、List、以及实现了 ConfigurationSerializable 的对象(如 ItemStack、Player)。
读写配置
默认配置 config.yml
在资源目录放一个 config.yml 作为默认配置。插件首次启动会把它复制到 plugins/<插件名>/config.yml。
# config.yml
welcome:
enabled: true
message: "&a欢迎来到服务器!"
max-players: 20读取
主类里直接用 getConfig():
public void onEnable() {
boolean enabled = getConfig().getBoolean("welcome.enabled");
String msg = getConfig().getString("welcome.message");
int max = getConfig().getInt("max-players");
List<String> list = getConfig().getStringList("some.list");
if (enabled) {
getLogger().info("欢迎功能已开启:" + msg);
}
}常用 getter:
| 方法 | 返回类型 |
|---|---|
getBoolean(path) | boolean |
getInt(path) | int |
getDouble(path) | double |
getString(path) | String |
getStringList(path) | List<String> |
get(path) | Object(任意) |
带默认值的 getter
键不存在时返回默认值(getBoolean 返回 false、getString 返回 null)。也可指定默认:
int max = getConfig().getInt("max-players", 50); // 键不存在则用 50写入与保存
getConfig().set("Data.player1.Score", 80);
saveConfig(); // 写入磁盘改完要 saveConfig
set 只改内存里的配置,不写盘。必须调 saveConfig() 才会持久化到 config.yml。重启不丢数据全靠它。
重载配置
reloadConfig(); // 从磁盘重新读入内存改了配置文件想让插件重新读取时用。
路径用法
路径用 . 分隔层级,支持任意深度:
// 读 Data.player1.NickName
String nick = getConfig().getString("Data.player1.NickName");
// 写 Data.player2.Score
getConfig().set("Data.player2.Score", 100);不存在路径时 set 会自动创建中间层级。
单独的配置文件
config.yml 是主类自带的。若需要多个配置文件(如玩家数据、语言文件),用 YamlConfiguration:
File file = new File(getDataFolder(), "players.yml");
FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
cfg.set("player1.coins", 500);
cfg.save(file); // 保存到 players.yml
int coins = cfg.getInt("player1.coins");getDataFolder()
getDataFolder() 返回 plugins/<插件名>/ 目录。首次运行可能不存在,用前确保创建:getDataFolder().mkdirs()。
配置 API 让插件可配置、可持久化。下一篇命令执行器让玩家能主动触发插件功能。
