⚡ 全局生长倍率与独立作物调谐
生长倍率引擎允许服务器管理员与玩家对全球作物的生长速度进行微调,或为特定作物定制专属生长曲线。
📊 生长倍率信息框
| Property | Specification |
|---|---|
| Global GameRule | agrarian_reform:global_growth_multiplier |
| Dynamic Crop Rule | agrarian_reform:crop_growth_multiplier_<crop_id> |
| 默认全局值 | 100(100% 原版基准速度) |
| 有效取值范围 | -1(冻结),0(继承全局/关闭),1 至 2147483647 |
| 性能优化 | 最大阶段提前退出(成熟后立即中止额外刻循环) |
📐 倍率计算数学模型与解析
随机刻循环通过 BlockStateBaseMixin 与 GrowthHelper.handleRandomTick 拦截植物生长判定:
1. Hierarchy Resolution
- 动态特定覆盖 ($> 0$):若设置了特定作物规则,则优先覆盖全局倍率。
- 冻结/禁用 ($-1$ 或全局 $0$):彻底取消随机刻与时空连续体离线增量 ($0%$ 生长)。
- 继承全局 ($0$):回退至全局倍率 $M$。
2. 减速生长 ($0 < M < 100$)
当 $M < 100$ 时,随机刻按 $\frac{M}{100}$ 的概率执行。例如在 $M = 50$ 时,作物随机生长刻以原版速度的 50% 发生。
3. Accelerated Growth ($M > 100$)
当 $M > 100$ 时,引擎会计算保底的额外随机刻运行次数 $E$:
$$E = \left\lfloor \frac{M}{100} \right\rfloor - 1$$
以 $\text{rem} = M \pmod{100}$ 的概率进行余数检查,成功时再奖励 1 次额外刻运行。
4. Max-Age Early-Break Optimization
在加速循环中(如 $M = 500$ 执行 5 次运行),handleRandomTick 在每次运行后都会查询 AgrarianCropRules.isMaxAge(currentState)。一旦作物达到完全成熟(例如小麦达到 7 阶段),循环立即终止,避免多余的方块计算开销。
⚠️ 配置与指令示例
bash
# 设置全局生长速度为 200%(双倍速度)
/gamerule agrarian_reform:global_growth_multiplier 200
# 单独覆盖小麦以 400% 速度生长
/gamerule agrarian_reform:crop_growth_multiplier_wheat 400
# 完全冻结甘蔗的生长
/gamerule agrarian_reform:crop_growth_multiplier_sugar_cane -1See also: 性能优化与队列节流, 作物注册表与通用作物, and 时空连续体 (离线生长模拟).
