Skip to content

⚙️ Arquitectura de configuración de dos niveles

Agrarian Reform implementa un sistema de configuración en dos niveles que combina archivos JSON globales con GameRules en vivo.


🏗️ Resumen de la arquitectura

                      PLANTILLA DE CONFIGURACIÓN GLOBAL (Esquema v2)
                         config/agrarian-reform.json

                                     ▼ (Inicio del servidor / mundo integrado)
                         GESTOR DINÁMICO DE GAMERULES
                   Registra GameRules predeterminadas y detecta cultivos

                                     ▼ (Runtime Administration)
        GUI MODMENU Y YACL v3 (3 PESTAÑAS) <---> COMANDOS /gamerule

                                     ▼ (Autoguardado al descargar / evento de guardado)
                       THREAD-SAFE DIRTY-TRACKING PERSISTENCE

1. Plantilla global JSON (config/agrarian-reform.json)

El archivo JSON almacena los valores aplicados a los nuevos mundos. No modifica los mundos ya creados.

2. GameRules activas del mundo (agrarian_reform:*)

Los mundos activos se gestionan con GameRules de Minecraft. Los cambios tienen efecto de inmediato sin reiniciar.

3. Persistencia con seguimiento de cambios segura y tolerancia a mods

  • Guardado asíncrono: Al detectar cultivos se marca dirty = true. El guardado en disco se realiza durante el guardado habitual del mundo.
  • Seguridad ante desinstalaciones: Los cultivos se guardan como cadenas de texto, por lo que desinstalar un mod no causa errores de lectura.

📜 Archivo predeterminado 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
  }
}

🖥️ Integración opcional de GUI en cliente (ModMenu y YACL v3)

Con ModMenu y YACL v3 instalados, los jugadores tienen acceso a un menú de configuración con 3 pestañas:

  1. Opciones generales: Controles de radio de irrigación ($0 \to 32$), agua pura, lluvia ($0 \to 10$), biodiversidad, siega con clic derecho y polvo de hueso.
  2. Inmersión y estética: Inmunidad al pisoteo, restricción a jugadores/mascotas, tierra siempre húmeda, sonidos de follaje y partículas verdes.
  3. Multiplicadores de cultivos: Lista ordenada alfabéticamente con control numérico ($-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;
    }
}

🛡️ Seguridad en servidores dedicados: El código de pantallas YACL está aislado en YaclScreenHelper para evitar que el servidor cargue interfaces de cliente.


See also: Reglas de juego (GameRules), Registro de cultivos y soporte universal, and Configuración de desarrollo y compilación.

Official documentation & web portal for Dasik Igaijinn mods.