🐑 生物停滯與農場生物學自然老化
📌 程式碼儲存庫原始碼聲明:本 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>:為任意特定實體型別提供獨立的單獨解凍開關。
