🐑 生物停滞与农场生物学自然老化
📌 代码仓库源码声明:本 Wiki 中的文档反映了代码仓库当前的最新源码状态,可能包含尚未在 CurseForge 和 Modrinth 上发布的开发中功能或最新提交。
🛡️ 生物停滞(AI 冻结)机制
在超高速时间曲速推进期间,快速移动的敌对生物(僵尸、骷髅、苦力怕等)可能会在玩家来不及反应的情况下淹没基地或袭击正在就寝的玩家。
True Sleep 引入了 生物停滞 (Mob Stasis) 机制: 当启用 truesleep:freeze_mobs(默认:ON)时,所有生物的寻路 AI、移动与攻击目标均会在睡眠期间被优雅暂停。
工作类生物免冻结豁免
村民 (Villager) 与悦灵 (Allay) 被统一归类于 #truesleep:worker_mobs 标签之下。 默认情况下,truesleep:freeze_workers 设为 OFF(false),允许村民在黄昏与入夜时顺畅走回床铺或工作站点。
🌾 农场生物学生理时钟演进
即使生物的移动与寻路 AI 处于停滞状态,其体内的生物学生理时钟仍会通过 BiologicalStasisHelper 持续运转:
1. 幼年动物生长与繁殖冷却推进
幼年牛、羊、猪、鸡及狼在睡眠期间正常生长发育:
if (mob instanceof AgeableMob ageable) {
int currentAge = ageable.getAge();
if (ageable.canAgeUp()) {
ageable.setAge(Math.min(0, currentAge + strideTicks));
} else if (currentAge > 0) {
ageable.setAge(Math.max(0, currentAge - strideTicks));
}
}2. 鸡下蛋计时器递减
鸡的下蛋计时器会随 strideTicks 准确扣减,确保自动化收集鸡蛋农场整夜无缝产出: $$\text{eggTime} = \max(1, \text{eggTime} - \text{strideTicks})$$
3. 羊毛自然生长(吃草生理模拟)
被剪毛的绵羊通常需要执行吃草动画才能重新长出羊毛。在停滞状态下,True Sleep 通过数学概率模拟其吃草行为:
$$\text{grazeChance} = \min\left(1.0, \frac{\text{strideTicks}}{1000.0}\right)$$
如果被剪毛的绵羊脚下踩着 minecraft:grass_block(草方块),每个跨步均有 $\text{grazeChance}$ 的概率将该草方块转化为 minecraft:dirt(泥土),并立即恢复其羊毛外衣(sheep.setSheared(false))。
🧪 状态效果与药水时间流逝
所有活体生物身上生效的药水效果在睡眠期间均会精准推进:
- 增益效果(力量、生命恢复)与减益效果(中毒、凋零)的持续时间均会按
strideTicks同步扣减。 - True Sleep 运用鸭子类型扩展接口 (
MobEffectInstanceExtensions),确保级联隐藏效果(如升级版药水效果)能够平滑过期,杜绝死循环或逻辑故障。
🎛️ 控制游戏规则 (GameRules)
truesleep:freeze_mobs(默认:true):暂停敌对生物与环境生物的移动。truesleep:freeze_workers(默认:false):暂停村民与悦灵。truesleep:biological_aging(默认:true):启用幼年动物生长、下蛋计时与羊毛再生。truesleep:unfreeze_<namespace>_<path>:为任意特定实体类型提供独立的单独解冻开关。
