🌿 植物註冊表與通用作物全自動識別
Agrarian Reform 內建免設定的全能作物自動識別引擎 (AgrarianCropRules.java),由 $O(1)$ 快速快取支援。任何原版或第三方模組作物無須手動設定資料包,皆能自動收錄、支援離線時空模擬並生成專屬遊戲規則倍率調整。
🔍 動態作物發現與分類引擎
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 類別目標 / 標籤 | 原版範例 | 單階段平均刻數 | 時空離線追趕 | 全能骨粉支援 |
|---|---|---|---|---|---|
| 一般作物 | 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{ 刻}$ | ✅ 支援(生長成樹) | 原版原生 |
| 模組農業作物 | 任何 #c:crops 或 AgeBlock | 農夫樂事、神秘農業等 | 可自訂調整 | ✅ 支援(等比增量) | 動態 / 拓展支援 |
🌾 倍率層級解析與凍結狀態
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;
}🔄 執行期動態識別與模組移除容錯
- 執行期動態識別:
AgrarianCropRules監聽隨機刻、時空區塊掃描與方塊互動事件。當遊戲進行中載入模組作物時,會即時登錄至 $O(1)$ 快取中並生成動態遊戲規則,無需重新載入遊戲。 - 模組移除零崩潰:動態規則與快取皆採用標準
Identifier字串鍵值(namespace:path),不具備硬性類別相依。移除模組後,遺失的方塊會被安全忽略,絕不引發ClassNotFoundException或遊戲崩潰。
🏷️ 資料包標籤整合 (AgrarianTags)
json
{
"replace": false,
"values": [
"#minecraft:crops",
"#c:crops",
"farmersdelight:cabbage",
"farmersdelight:tomatoes",
"farmersdelight:onions"
]
}See also: 時空連續體 (離線生長模擬), 全域生長倍率與獨立調諧, and 雙層設定系統.
