⚙️ Arquitetura de configuração em dois níveis
O Agrarian Reform adota um sistema de configuração em dois níveis unindo modelo JSON global e GameRules ativas.
🏗️ Visão geral da arquitetura
MODELO DE CONFIGURAÇÃO GLOBAL (Esquema v2)
config/agrarian-reform.json
│
▼ (Inicialização do Servidor / Mundo Integrado)
GERENCIADOR DINÂMICO DE GAMERULES
Registra regras do mundo e identifica culturas
│
▼ (Runtime Administration)
INTERFACE MODMENU E YACL v3 (3 ABAS) <---> COMANDOS /gamerule NO JOGO
│
▼ (Salvamento automático ao descarregar)
THREAD-SAFE DIRTY-TRACKING PERSISTENCE1. Modelo JSON global (config/agrarian-reform.json)
Este arquivo armazena os padrões para novos mundos. Mundos existentes não são alterados ao editar este JSON.
2. GameRules ativas no mundo (agrarian_reform:*)
Mundos ativos gerenciam opções através de GameRules nativas. Alterações na interface ou por comando têm efeito imediato.
3. Persistência segura com dirty-tracking e tolerância a remoção de mods
- Salvamento assíncrono controlado: Novas espécies encontradas marcam
dirty = truee são gravadas em momentos seguros de salvamento. - Segurança na remoção de mods: Como os nomes são salvos como strings, remover um mod não causa erros de leitura nem corrompe dados.
📜 Arquivo padrão config/agrarian-reform.json (Schema v2)
json
{
"configVersion": 2,
"hydrationSourceRange": 8,
"hydrationFlowingRange": 4,
"pureWaterHydrationOnly": false,
"rainGrowthAcceleration": 1,
"growthBiodiversityBonus": true,
"totalTrampleImmunity": false,
"trampleImmunityPlayersOnly": false,
"alwaysWetFarmland": false,
"seedsGrowGrass": true,
"rightClickHarvest": true,
"universalBonemeal": true,
"globalGrowthMultiplier": 100,
"ambientCropRustle": true,
"ambientVitalityParticles": true,
"forcedCrops": [
"minecraft:wheat",
"minecraft:carrots",
"minecraft:potatoes",
"minecraft:beetroots"
],
"forcedGrowthMultipliers": {
"minecraft:wheat": 0,
"minecraft:carrots": 0,
"minecraft:potatoes": 0,
"minecraft:beetroots": 0
}
}🖥️ Integração opcional de GUI do cliente (ModMenu & YACL v3)
Com ModMenu e YetAnotherConfigLib v3 (YACL) instalados, jogadores contam com um menu gráfico em 3 abas:
- Opções Gerais: Controles de raio de irrigação ($0 \to 32$), água pura, chuva ($0 \to 10$), biodiversidade, colheita com botão direito e farinha de osso.
- Imersão e Estética: Imunidade a pisoteamento, restrição para jogadores/pets, terra sempre úmida, sons de folhagem e partículas.
- Multiplicadores por Planta: Lista dinâmica em ordem alfabética com campos numéricos ($-1 = \text{congelado}$, $0 = \text{global}$, $\ge 100 = \text{personalizado}$).
java
public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib")) {
return YaclScreenHelper::createScreen;
}
return parent -> null;
}
}🛡️ Segurança para servidores dedicados: As telas YACL ficam isoladas em
YaclScreenHelper, nunca carregando código de cliente no servidor!
See also: Regras de jogo (GameRules), Registro de plantas e culturas universais, and Configuração de desenvolvimento e compilação.
