Skip to content

🌿 植物註冊表與通用作物全自動識別

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:cropsAgeBlock農夫樂事、神秘農業等可自訂調整✅ 支援(等比增量)動態 / 拓展支援

🌾 倍率層級解析與凍結狀態

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;
}

🔄 執行期動態識別與模組移除容錯

  1. 執行期動態識別AgrarianCropRules 監聽隨機刻、時空區塊掃描與方塊互動事件。當遊戲進行中載入模組作物時,會即時登錄至 $O(1)$ 快取中並生成動態遊戲規則,無需重新載入遊戲。
  2. 模組移除零崩潰:動態規則與快取皆採用標準 Identifier 字串鍵值(namespace:path),不具備硬性類別相依。移除模組後,遺失的方塊會被安全忽略,絕不引發 ClassNotFoundException 或遊戲崩潰

🏷️ 資料包標籤整合 (AgrarianTags)

json
{
  "replace": false,
  "values": [
    "#minecraft:crops",
    "#c:crops",
    "farmersdelight:cabbage",
    "farmersdelight:tomatoes",
    "farmersdelight:onions"
  ]
}

See also: 時空連續體 (離線生長模擬), 全域生長倍率與獨立調諧, and 雙層設定系統.

Official documentation & web portal for Dasik Igaijinn mods.