从 Bukkit 迁移配置与数据存储
Bukkit 插件严重依赖 config.yml、YamlConfiguration 以及 Bukkit 的配置序列化系统。
而在 Pumpkin 中,WebAssembly 插件运行在安全的沙箱环境中,可以使用 TOML、JSON 或 YAML 等标准格式以原生方式处理配置文件。
核心差异
| 特性 | Bukkit / Spigot | Pumpkin |
|---|---|---|
| 配置文件格式 | config.yml(YAML 格式) | 灵活多样:TOML、JSON 或自定义文件 |
| 默认配置生成 | saveDefaultConfig() | 从插件目录或嵌入式 WASM 资源中读取配置 |
| 数据解析 | getConfig().getString(...) | 原生 serde / JSON / TOML 反序列化 |
| 文件 I/O 沙箱 | 可在任何位置直接访问文件系统 | 授予 WASM 插件沙箱化的目录访问权限 |
代码对比:加载配置
1. Bukkit 实现 (Java)
java
public class ConfigExample extends JavaPlugin {
@Override
public void onEnable() {
saveDefaultConfig(); // Saves config.yml from jar resources
FileConfiguration config = getConfig();
String welcomeMsg = config.getString("welcome-message", "Default welcome!");
int maxItems = config.getInt("max-items", 10);
getLogger().info("Loaded message: " + welcomeMsg);
}
}2. Pumpkin 实现 (Rust)
在 Pumpkin 中,可以通过派生 serde::Deserialize 来解析简洁的 TOML 配置文件:
rust
use serde::Deserialize;
use std::fs;
#[derive(Deserialize, Debug)]
pub struct PluginConfig {
pub welcome_message: String,
pub max_items: i32,
}
impl Default for PluginConfig {
fn default() -> Self {
Self {
welcome_message: "Default welcome!".to_string(),
max_items: 10,
}
}
}
pub fn load_config() -> PluginConfig {
let config_path = "plugins/my_plugin/config.toml";
if let Ok(content) = fs::read_to_string(config_path) {
toml::from_str(&content).unwrap_or_default()
} else {
PluginConfig::default()
}
}