⚙️ 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 PERSISTENCE1. グローバル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つのタブからなるグラフィカル設定画面を利用できます:
- 一般設定タブ: 灌漑半径スライダー($0 \to 32$)、純水トグル、降雨成長加速スライダー($0 \to 10$)、生物多様性、右クリック収穫、骨粉機能。
- 没入感・演出タブ: 踏み荒らし防止、プレイヤー/ペット制限トグル、常時湿潤耕地、環境音、幸福パーティクル。
- 作物別成長倍率タブ: 発見・登録されたすべての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 開発環境の構築とビルド.
