Healthy DietFEATURE GUIDE 中文
04 / SHELF LIFE

从配置到结算,读懂食物保质期。

逐一查看编辑器的八个子页,理解基础时长、温度、变质倍率、冷鲜与过期结算;再了解物品离开背包后的计时、信任与离线保护。

八个独立子页服务器结算容器与多人离线账本
先分清三种数值:基础保质时长是配置,物品当前温度与剩余时长是运行状态。服务器数据包和玩家持有物品的实际状态可能不同。

01一次结算经过哪些环节

先有物品级基础时长,再随物品所在环境改变温度和变质速度;服务器负责结算剩余时间。

配置基础时长按整分钟保存
环境改变温度自然 / 冰箱 / 冷冻室
倍率与冷鲜保护温度曲线 / 维度 / 保鲜率
结算到期消失或替换为产物

温度曲线调节变质速度;「效果」子页调节吃下食物时的温度效果。两者是独立列表,不会因为配置了某个效果就自动改变保质期。

游戏日与现实天不同:编辑器的 1 游戏日 = 20 分钟,1 天 = 1440 分钟;保存到 durationMinutes 时取整分钟。内置物品可能覆盖配置类的 10℃ 初温,不要把类默认值当成所有食物的初温。
源码依据:ShelfDurationUnit、S2ShelfConfig、ShelfTemperatureCurve.effectiveRate。

02编辑器的八个子 Tab

下列八个标签与游戏中「保质期」编辑器的排列一致。选择一项可查看字段、用途和容易混淆的边界;网页不能保存配置。

01 / 时间与过期行为

保质期

设置新物品的基础保质时间和基础变质倍率。单位按钮在分钟、小时、天、游戏日间切换;输入可含小数,保存时换算成整分钟。没有针对某维度配置倍率时,该维度保持 1 倍。

可编辑项作用
保质期 / 基础变质倍率分别确定起始时长与变质速率基准;倍率 0 表示基础衰减为零。
过期产物 / 继承温度到期替换成指定物品;minecraft:air 表示消失。开启继承时仅把到期瞬间的温度传给产物,产物的保质期重新计时。
过期指令持有者手中的物品到期时,以持有者为上下文运行;留空不执行。容器内或掉落物到期不触发该指令。
维度变质倍率逐维度按 ID 配置变质倍率,例如下界可以与主世界不同;不是温度偏移。
源码依据:ItemConfigEditScreenV2.buildShelfEditor、S2ShelfConfig.durationMinutes、ShelfDimensionMultiplier。

03离开背包后的时间与多人保护

食物在玩家身上、容器里和地上使用不同的时钟;服务器负责结算,客户端只按服务器下发的速度显示。

两套时钟与服务器权威

玩家背包、装备栏、副手和鼠标上拿着的食物,按玩家在线游玩时间结算,下线期间不走;箱子、冰箱、其他容器、地上的掉落物和放置的方块食物,按世界时间结算,服务器开着就继续走。创造模式物品栏和 JEI 里的食物不计时。

腐败、温度和冷鲜度都由服务器计算,客户端看到的只是服务器发来的快照。提示里的数字会按服务器下发的当前速度逐秒推进,看起来是实时的,但真实数值始终以服务器为准,修改客户端不能造出新鲜食物;提示文字和颜色也以服务器方案文件为准。

换手、上线与换维度会重新对表

食物换手时,从新主人拿到的那一刻接着算,不会因为前主人的在线时间更长而一接过来就突然坏掉。玩家上线、切换维度时也会重新对表;下线期间的时间不会补算进背包物品。

背包和地上掉落物大约每 20 秒刷新一轮;按 S 可以立即结算并查看最新数值。打开容器、开始吃东西、使用 Tom 存储终端存取时,也会顺带刷新一次背包,不必等下一轮。

谁算物品的主人

配了保质期的食物放进容器的那一刻会打上放入者的主人标记。其他玩家打开箱子时会看到红框,拿不走;掉在地上的受保护食物也捡不起来。冰箱、Tom 存储终端等容器遵循同样的规则。

只有“放进容器”才算:野外宝箱里你拿走一半,剩下的不会因为你碰过就归你,其他玩家仍可公平拿取。反过来说,从未放进过容器的食物没有主人,刚做好、刚捡到一直带在身上的食物可以自由送人;标记一旦打上会跟着物品走,从自己的箱子拿回背包后仍然是你的。

按住 S 查看详细信息,如果主人不是自己,最下面会多出一行“物品主人”。不同主人的同一种食物不能叠在一起,会分成两摞,避免标记被覆盖。

信任名单与所有权流转

用 /hdtrust 管理自己的保护物品信任名单,无需 OP:

命令作用
/hdtrust add <玩家名>把在线玩家加入当前白名单,对方可以正常拿取你的受保护食物。
/hdtrust remove <玩家名>移出当前白名单,但保留“曾信任”历史;对方手上已经拿走、尚未归还的物品会过户给他。
/hdtrust forget <玩家名>同时清除当前白名单和曾信任历史,之后按从未信任处理。
/hdtrust list查看当前白名单与曾信任名单;点击名单里的名字可直接移除或重新信任。

信任始终看最初的主人:朋友拿走你的食物再放进他的箱子,主人仍然是你,不会被转手洗掉。你主动把食物扔出去,等于送人,标记会被清掉;朋友拿了你的食物再主动扔出,也一样算送人。

死亡掉落不算送人:原本没有主人的食物会在你死亡的那一刻补上你的标记,已有标记的保持原主人;陌生人捡不走,你自己和你信任的朋友能捡,复活后可以拿回来。若服务器开启 removeOwnerOnDeathDrop(适合 PVP 服),死亡掉落会强制清空保护标记,任何人都能拾取。

被冻住的物品:从未被信任的人通过管道、指令等方式拿到别人的保护食物时,这件物品会被冻住:保质期不再推进,不能吃、不能喝,也放不进箱子、熔炉或合成格,无法过户,只会在背包里占位置并提示持有者。服主可以开启 ejectIllegalProtectedItems,把这类物品直接扔到持有者脚下;默认关闭,以免信任文件异常时误伤整批物品。

全员离线时,容器里的食物不算腐败

受保护食物的主人和当前所有受信任玩家全部不在线时,箱子、冰箱等容器里的这段时间不计入腐败;只要名单里还有一位有权者在线,就照常结算。

例子:小 A 信任小 B。小 A 在 20:00 下线,小 B 在 22:00 下线,第二天 08:00 小 A 上线打开箱子:20:00–22:00 小 B 仍在线,照常计算 2 小时;22:00–次日 08:00 两人都不在线,这 10 小时一分钟都不算。

服务器用离线账本记录“全员不在线”的时段,箱子本来只在被打开时结算,所以等有人回来查看时才会一次扣除。离线账本只记录启用后的时段,更早以前的离线时间无法补回;扔在地上的受保护食物不享受这项保护,仍然会坏。

容器、战利品与掉落物

关着的箱子不会被持续扫描。食物身上记录着上一次结算的时间,打开箱子时按上次的温度一次性补算中间时段;中途天气变化不会分段重算,结果与持续模拟略有出入,但很接近,也几乎不占性能。

打开箱子、在箱子里点物品或按 S 都会立即结算。箱子里尚未开始计时的食物——例如被指令或其他模组直接塞入、或老存档在配置保质期之前放入的物品——会在打开箱子或按 S 的那一刻打上标记并开始计时。箱子被挖掉时,会先对好时间、清除冰箱状态再掉出,不会出现“掉在地上还以为自己在冰箱里”的情况。漏斗和管道往箱子里塞物品时也要遵守合并规则,叠在一起时按更差的那份计算。

宝箱里生成的食物、怪物掉落的食物,在生成的那一刻就打上保质期标记,是一份从零开始计时的新鲜食物;女仆、机械动力等直接把收获塞进自己库存的也算。自己合成、烧制或机器加工出来的食物不算,要等第一次被玩家或容器看到才开始计时。

地上的掉落物按 20 秒一个时间段对齐,同一时间段掉落的同种食物保质期数据完全一样,所以仍能叠在一起;落地后最开始的一小段时间不计入,误差偏向玩家。区块卸载后不再计算,重新加载时会一次补上中间时间。

放在地上的蛋糕等方块食物按世界时间结算:区块加载时结算一次,同一区块 3 分钟内只算一次;使用 FTB Chunks 等强制加载的区块则每分钟结算一次。坏掉的蛋糕会消失或掉出过期产物;拿着一个已经坏掉的蛋糕放下去,会当场变成过期产物。完整未吃过的蛋糕挖起来还能带回原保质期,吃过的挖不回来。

安装 Jade 后,准星指向地上的食物时,HUD 会多一行保质期,时间精确到秒、百分比保留一位小数,数据同样来自服务器;箱子里和手上的食物仍看物品提示。

堆叠与合并阈值

条件默认阈值
剩余保质期差不超过 5 分钟
物品温度差不超过 10℃
冷鲜度差不超过 20(0–100 刻度)

三个条件都满足才能合并,叠好后按更差的那份计算,不能拿新鲜食物去“洗白”快坏的。阈值可在 config/healthy_diet/server.json 的 shelfMerge 段中调整。地上的掉落物要求保质期数据完全相同才能叠;保冷上限不同的两份也不能叠。

过期指令与产物

过期指令只在食物于玩家身上坏掉,或咬一口已经放坏的蛋糕时执行;在容器里或地上自行坏掉不会执行。过期产物是一件全新物品,不携带原来的 NBT,数量保留;放不下时塞回背包,背包也满则掉在地上。

源码依据:S2Engine、S2Handler、S2OfflineLedger、S2StackMerge、TrustManager、HDTrustCommand、PlacedFoodRefresh。
接着了解显示普通物品提示和 S 详情中的保质期行,由 Tooltip 的布局与显示规则控制。
查看 Tooltip →