Skip to content

Migrando Configuração e Armazenamento de Dados ​

Plugins Bukkit dependem fortemente de config.yml, YamlConfiguration e do sistema de serialização de configuração do Bukkit.

No Pumpkin, plugins WebAssembly rodam em um ambiente de sandbox seguro onde arquivos de configuração podem ser manipulados nativamente usando formatos padrão como TOML, JSON ou YAML.


Principais Diferenças ​

RecursoBukkit / SpigotPumpkin
Formato do Arquivo de Configuraçãoconfig.yml (formato YAML)Flexível: TOML, JSON ou arquivos personalizados
Geração de Configuração PadrãosaveDefaultConfig()Leitura de configuração a partir do diretório do plugin ou recurso WASM integrado
Análise (Parsing) de DadosgetConfig().getString(...)Desserialização nativa com serde / JSON / TOML
Sandbox de E/S de Arquivos (File I/O)Acesso direto ao sistema de arquivos em qualquer lugarAcesso restrito em sandbox a diretórios concedido ao plugin WASM

Comparação de Código: Carregando Configuração ​

1. Implementação no 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. Implementação no Pumpkin (Rust) ​

No Pumpkin, você pode derivar serde::Deserialize para analisar arquivos de configuração TOML limpos:

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()
    }
}

Lançado sob a licença MIT.