🌿 作物レジストリと汎用作物自動検出エンジン
Agrarian Reformには、$O(1)$高速キャッシュを活用した設定不要の全作物自動検出エンジン(AgrarianCropRules.java)が備わっています。バニラやMODの作物を自動的に検知し、オフライン成長に対応させ、専用GameRuleを生成します。
🔍 動的作物検出・分類エンジン
BLOCK INSPECTION
│
┌────────────────┴────────────────┐
▼ ▼
Known Cached Crop (O(1)) Uncached Block Type
│ │
▼ ▼
Return Multiplier 3-Tier Discovery Pipeline
1. Class Hierarchy: CropBlock, SaplingBlock, BonemealableBlock
2. Tag Membership: #c:crops, #minecraft:crops, #farmersdelight:wild_crops
3. Property Inspection: BlockState with "age" IntegerProperty
│
▼ (If Match Found)
DYNAMIC REGISTRATION
- Cache in DYNAMIC_CROPS Set
- Register GameRule: agrarian_reform:crop_growth_multiplier_<id>
- Mark AgrarianConfig dirty = true📊 サポート対象植物一覧と成長ステージ数学
| 分類 | Java対象クラス / タグ | バニラでの代表例 | 1段階の平均ティック数 | オフライン追いつき | 骨粉機能拡張 |
|---|---|---|---|---|---|
| 一般作物 | CropBlock, #c:crops | 小麦、ニンジン、ジャガイモ、ビートルート | $\sim 6,241\text{ ティック}$ | ✅ 対応(分散処理) | バニラ標準 |
| 高茎植物 | SugarCaneBlock, CactusBlock | サトウキビ、サボテン | $1,365\text{ ティック}$ | ✅ 対応(最大3段) | ✅ 拡張対応 |
| ネザー植物 | NetherWartBlock | ネザーウォート | $13,650\text{ ティック}$ | ✅ 対応(段階0 $\to$ 3) | ✅ 拡張対応 |
| 果実・低木 | CocoaBlock, SweetBerryBushBlock | カカオ豆、スイートベリー | $6,825\text{ ティック}$ | ✅ 対応(段階0 $\to$ 2/3) | ✅ 拡張対応 |
| ツタ・植物 | VineBlock | ツタ | 変動 | ✅ 対応(下方拡散) | ✅ 拡張対応 |
| 樹木・苗木 | SaplingBlock | オーク、トウヒ、シラカバ、桜の苗木 | $95,550\text{ ティック}$ | ✅ 対応(成木へ成長) | バニラ標準 |
| MOD農業作物 | #c:crops または AgeBlock | Farmer's Delight、Mystical Agriculture | 設定可能 | ✅ 対応(等比進行) | 動的 / 拡張対応 |
🌾 成長倍率の決定階層と凍結状態
java
public static int getEffectiveGrowthMultiplier(Level level, Block block) {
Identifier id = BuiltInRegistries.BLOCK.getKey(block);
// 1. Check world-specific GameRule
GameRule<Integer> dynamicRule = DYNAMIC_GAMERULES.get(id);
if (dynamicRule != null && level instanceof ServerLevel serverLevel) {
int val = DynamicGameRuleManager.getInt(serverLevel, dynamicRule);
if (val > 0) return val; // Positive override
if (val == -1) return 0; // -1 = Frozen (0% growth)
}
// 2. Fall back to Global Multiplier
if (level instanceof ServerLevel serverLevel) {
return DynamicGameRuleManager.getInt(serverLevel, AgrarianGameRules.GLOBAL_GROWTH_MULTIPLIER);
}
return 100;
}🔄 実行時検出とMOD削除時の安全性
- ゲーム中の動的検出:
AgrarianCropRulesはランダムティックやチャンク読み込みを監視します。新たに出現したMOD作物をその場で検出し、$O(1)$キャッシュに登録してGameRuleを即座に生成します。 - MOD削除時のクラッシュ防止:動的ルールとキャッシュは標準の
Identifier文字列(namespace:path)のみを保持します。MOD削除時も該当ブロックを安全にスキップし、クラッシュやClassNotFoundExceptionは一切発生しません。
🏷️ データパックタグ統合 (AgrarianTags)
json
{
"replace": false,
"values": [
"#minecraft:crops",
"#c:crops",
"farmersdelight:cabbage",
"farmersdelight:tomatoes",
"farmersdelight:onions"
]
}See also: コンティニュアム (オフライン成長持続), グローバル成長倍率と個別調整, and 2層設定システム.
