Skip to content

⚙️ 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 PERSISTENCE

1. 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 = true e 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:

  1. 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.
  2. Imersão e Estética: Imunidade a pisoteamento, restrição para jogadores/pets, terra sempre úmida, sons de folhagem e partículas.
  3. 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.

Official documentation & web portal for Dasik Igaijinn mods.