Skip to content

⚙️ 2層構成コンフィグアーキテクチャ

Agrarian Reformは、グローバルJSONテンプレートとゲーム内のGameRuleを連動させた2層構成の設定システムを備えています。


🏗️ アーキテクチャ概要

                      グローバル設定テンプレート (スキーマ v2)
                         config/agrarian-reform.json

                                     ▼ (サーバー / ワールド起動時)
                         ダイナミックGAMERULEマネージャー
                   ワールドのGameRuleを登録し作物を自動検知

                                     ▼ (Runtime Administration)
        MODMENU & YACL v3 クライアントGUI (3タブ) <---> ゲーム内 /gamerule コマンド

                                     ▼ (アンロード時 / セーブ時に自動保存)
                       THREAD-SAFE DIRTY-TRACKING PERSISTENCE

1. グローバルJSON設定 (config/agrarian-reform.json)

このファイルには新規作成ワールド用の初期設定が保持されます。既存ワールドのGameRuleには影響を与えません。

2. ワールドごとのGameRule (agrarian_reform:*)

プレイ中のワールドはバニラのGameRuleで動作します。GUIやコマンドでの変更は即座に反映されます。

3. スレッドセーフな変更検知とMOD削除耐性

  • 非同期保存スロットリング: 作物が検出されるとメモリ内でdirty = trueとなり、定期セーブ時に安全に保存されます。
  • MOD削除への耐性: 文字列キーとして保存されるため、MODを削除してもエラーやクラッシュは一切発生しません。

📜 デフォルト 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)

ModMenuと**YetAnotherConfigLib v3 (YACL)**が導入されている場合、3つのタブからなるグラフィカル設定画面を利用できます:

  1. 一般設定タブ: 灌漑半径スライダー($0 \to 32$)、純水トグル、降雨成長加速スライダー($0 \to 10$)、生物多様性、右クリック収穫、骨粉機能。
  2. 没入感・演出タブ: 踏み荒らし防止、プレイヤー/ペット制限トグル、常時湿潤耕地、環境音、幸福パーティクル。
  3. 作物別成長倍率タブ: 発見・登録されたすべてのMOD作物をアルファベット順に表示($-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内に完全に分離されており、サーバー側で読み込まれることはありません!


See also: ゲームルール (GameRules) リファレンス, 作物レジストリと汎用作物, and 開発環境の構築とビルド.

Official documentation & web portal for Dasik Igaijinn mods.