Skip to content

🥖 睡眠饥饿消耗与水下溺水免疫

📌 代码仓库源码声明:本 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_hungerBooleantrue模拟睡眠时的自然食物消耗,最低保护下限为 6 点饥饿值。
truesleep:drown_immunityBooleantrue防止玩家在水下就寝时受到溺水窒息伤害。

Official documentation & web portal for Dasik Igaijinn mods.