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.