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.