Skip to content

⚙️ 双层配置架构体系

Agrarian Reform 实现了双层配置体系,将全局 JSON 模板存储、游戏内实时游戏规则与模组作物的脏标记持久化完美结合。


🏗️ 架构设计概览

                      全局配置模板 (模式 v2)
                         config/agrarian-reform.json

                                     ▼ (服务端 / 集成世界启动)
                         动态游戏规则管理器
                   注册默认世界游戏规则并自动探测农作物

                                     ▼ (Runtime Administration)
        MODMENU 与 YACL v3 三标签客户端 GUI  <--->  游戏内 /gamerule 命令

                                     ▼ (世界卸载 / 保存事件自动保存)
                       THREAD-SAFE DIRTY-TRACKING PERSISTENCE

1. 全局 JSON 配置模板 (config/agrarian-reform.json)

全局 JSON 文件存储生成新世界时应用的默认基准值。修改 config/agrarian-reform.json 会更新未来世界的初始设置,而不会影响已有世界的规则状态。

2. 实时世界游戏规则 (agrarian_reform:*)

活跃世界直接通过 Minecraft 原生游戏规则管理运行时设置。通过 ModMenu 界面或 /gamerule 所做的更改会立即在当前世界生效,无需重启服务器。

3. 线程安全脏标记持久化与模组移除韧性

  • 异步保存节流:在游戏过程中发现新的模组作物时,AgrarianConfig 会自动将内存标记为 dirty = true,而不会立即写入硬盘。仅在自然保存节点 (BEFORE_SAVE) 或服务器关闭 (SERVER_STOPPING) 时安全落盘。
  • 模组卸载安全性:发现的作物以纯字符串键名(如 "farmersdelight:tomatoes")保存在配置中。若模组被卸载,这些条目安全静默存储,不会引发反序列化崩溃;日后重新安装模组时将自动恢复生效。

📜 默认 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
  }
}

🖥️ 可选客户端 GUI 集成 (ModMenu & YACL v3)

当客户端安装了 ModMenuYetAnotherConfigLib v3 (YACL) 时,玩家可以打开交互式 3 标签图形配置屏幕:

  1. 常规选项标签页:灌溉半径滑块 ($0 \to 32$)、纯净水开关、雨露生长加速滑块 ($0 \to 10$)、生物多样性开关、播种育草、右键收获、全能骨粉及全局生长倍率。
  2. 沉浸与美学标签页:完全防踩踏保护、仅限玩家/驯服宠物开关、耕地永不干涸、作物沙沙音效及绿色活力粒子星光。
  3. 作物倍率标签页:动态生成所有已探测并注册的模组作物列表(按字母排序),提供整数输入框($-1 = \text{冻结}$, $0 = \text{继承全局}$, $\ge 100 = \text{自定义速度}$)。
java
public class ModMenuIntegration implements ModMenuApi {
    @Override
    public ConfigScreenFactory<?> getModConfigScreenFactory() {
        if (FabricLoader.getInstance().isModLoaded("yet-another-config-lib")) {
            return YaclScreenHelper::createScreen;
        }
        return parent -> null;
    }
}

🛡️ 专用服务端防崩溃保障:所有 YACL 屏幕类严格隔离在 YaclScreenHelper 中并按条件实例化,确保专用服务端运行期间绝不加载客户端 GUI 字节码!


See also: 游戏规则 (GameRules) 参考, 作物注册表与通用作物, and 开发者环境与编译指南.

Official documentation & web portal for Dasik Igaijinn mods.