🥖 睡眠饥饿消耗与水下溺水免疫
📌 代码仓库源码声明:本 Wiki 中的文档反映了代码仓库当前的最新源码状态,可能包含尚未在 CurseForge 和 Modrinth 上发布的开发中功能或最新提交。
🥐 睡眠饥饿消耗机制
在现实生活中,整夜的睡眠同样会消耗人体热量;而在 Minecraft 中,清晨醒来自然产生进食需求更贴近真实生存体验。
当启用 truesleep:sleep_hunger 规则(默认:ON)时,正在就寝的玩家在时间加速期间会经历微妙且平衡的食物疲劳消耗。
📐 食物疲劳度计算公式
$$\text{exhaustion} = \text{strideTicks} \times 0.0008\text{ 点食物疲劳消耗}$$
- 在常规的 $10{,}000\text{ 刻}$ 完整夜晚($12542 \to 24000$)中,累计疲劳度为: $$\text{总疲劳度} = 10000 \times 0.0008 = 8.0\text{ 点} = 2.0\text{ 点饥饿值 (1 个鸡腿)}$$
- 若睡满 $12{,}000\text{ 刻}$ 的超长昼夜周期,大约仅会消耗 $3.0\text{ 至 }4.0\text{ 点饥饿值}$。
🛡️ 绝对防饥饿致死安全底线
True Sleep 绝不会让正在睡眠的玩家因饥饿而受到任何伤害甚至死亡。 当玩家的饥饿值下降到 6 点(3 个鸡腿) 时,饥饿消耗将自动彻底停止:
java
if (player.getFoodData().getFoodLevel() <= 6) return;🫧 肺部呼吸停滞(水下溺水免疫)
在原版 Minecraft 中,如果在水下放置床铺或就寝时被流动水淹没,氧气值会迅速归零,导致窒息掉血并被强制踢出床铺。
当启用 truesleep:drown_immunity(默认:ON)时,True Sleep 将激活 肺部呼吸停滞保护 (Pulmonary Stasis):
- 针对睡眠中的玩家精准拦截
Entity.baseTick()。 - 持续将空气值充满至最大容量
getMaxAirSupply()($300\text{ 刻}$ 空气上限)。 - 让玩家可以安心在风景优美的海底基地中享受惬意的小憩,再也无需担心窒息溺水!
java
if (serverLevel.getGameRules().get(TrueSleepRules.DROWN_IMMUNITY)) {
this.setAirSupply(this.getMaxAirSupply());
}🎛️ 控制游戏规则 (GameRules)
| 游戏规则 | 类型 | 默认值 | 功能说明 |
|---|---|---|---|
truesleep:sleep_hunger | Boolean | true | 模拟睡眠时的自然食物消耗,最低保护下限为 6 点饥饿值。 |
truesleep:drown_immunity | Boolean | true | 防止玩家在水下就寝时受到溺水窒息伤害。 |
