01一次结算经过哪些环节
先有物品级基础时长,再随物品所在环境改变温度和变质速度;服务器负责结算剩余时间。
温度曲线调节变质速度;「效果」子页调节吃下食物时的温度效果。两者是独立列表,不会因为配置了某个效果就自动改变保质期。
durationMinutes 时取整分钟。内置物品可能覆盖配置类的 10℃ 初温,不要把类默认值当成所有食物的初温。ShelfDurationUnit、S2ShelfConfig、ShelfTemperatureCurve.effectiveRate。02编辑器的八个子 Tab
下列八个标签与游戏中「保质期」编辑器的排列一致。选择一项可查看字段、用途和容易混淆的边界;网页不能保存配置。
保质期
设置新物品的基础保质时间和基础变质倍率。单位按钮在分钟、小时、天、游戏日间切换;输入可含小数,保存时换算成整分钟。没有针对某维度配置倍率时,该维度保持 1 倍。
| 可编辑项 | 作用 |
|---|---|
| 保质期 / 基础变质倍率 | 分别确定起始时长与变质速率基准;倍率 0 表示基础衰减为零。 |
| 过期产物 / 继承温度 | 到期替换成指定物品;minecraft:air 表示消失。开启继承时仅把到期瞬间的温度传给产物,产物的保质期重新计时。 |
| 过期指令 | 持有者手中的物品到期时,以持有者为上下文运行;留空不执行。容器内或掉落物到期不触发该指令。 |
| 维度变质倍率 | 逐维度按 ID 配置变质倍率,例如下界可以与主世界不同;不是温度偏移。 |
ItemConfigEditScreenV2.buildShelfEditor、S2ShelfConfig.durationMinutes、ShelfDimensionMultiplier。基础
这里定义物品温度能达到的上下界、首次开始计时时的温度,以及允许食用的温度区间;不会直接改变变质倍率。现有物品的当前温度不会因为修改初温而立刻重置。
ItemConfigEditScreenV2.SHELF_COMMON_LABELS、S2ShelfConfig.Common。温度曲线
每条曲线配置起点/终点温度与两端的变质倍率,在区间内按温度线性变化。可选起点外和终点外缓冲,让倍率在区间外平滑接回 1 倍;不启用缓冲且不在区间内时,单条曲线贡献 1 倍。
temperatureCurves 调节剩余保质时间的消耗,不配置食用药水效果。ShelfTemperatureCurve.multiplierAt、multiplier、ItemConfigEditScreenV2.buildShelfCurveRows。效果
按需添加自定义温度区:每条记录一个效果 ID、作用温度区间、端点是否包含、起止等级和时长,以及粒子开关。只有吃下食物且当前温度命中该区间时,才按端点线性插值决定等级与持续时间。
temperatureEffectCurves 统一列表为准;不因冷鲜/常温等区域名称自动生成药水效果。ShelfTemperatureEffectCurve、ShelfTemperatureEffectMigration、ItemConfigEditScreenV2.buildShelfZoneEffectRows。自然环境
物品在自然环境中会向目标环境温度变化;基础温变量与间隔给出基础速率。环境与物品温差越大时,可分别按照降温或升温的步长、每步增量和倍率上限加速,此外还可按温区附加速度修正。
自然目标温度还受世界和服务器环境规则影响;此子页仅管理该食物的自然温变参数,不能直接指定当前物品的实时温度。
S2ShelfConfig.NaturalEnvironment、S2Environment、ItemConfigEditScreenV2.SHELF_NATURAL_DISPLAY_FIELDS。冰箱
普通冰箱和冷冻室各有一组温变量、温变间隔;它们决定物品进入对应设施后趋近目标环境温度的基础速度。该页还可为冷冻、低温、常温、高温区分别配置冰箱温变速度修正。
fridgeTemperatureChangeC 与 fridgeTemperatureChangeMinutes。freezerTemperatureChangeC 与 freezerTemperatureChangeMinutes。S2ShelfConfig.FridgeTemperature、ItemConfigEditScreenV2.SHELF_FRIDGE_DISPLAY_FIELDS。冷鲜
设置冻结点、冷冻点、冷鲜点、高温点,以及冷鲜度达到 50% 时的保鲜率。温度低于冷鲜点开始获得冷鲜度,到冷冻点为 50%,到冻结点及以下为 100%;保护比例随进度变化。
S2ShelfConfig.Common、protectionFraction、S2Environment.mapNaturalColdFreshProgress。保冷度
开启 coldRetention 后,物品温度处于完全冻结段时停止消耗并按设定速度回充保冷时间;离开完全冻结段后正常消耗。累计损失达到档位后,可回充上限永久降低,不会因再次冻结自动恢复上限。
S2ShelfConfig.coldRetention、coldRecoveryRate、coldDegradationRate、S2Engine。03离开背包后的时间与多人保护
食物在玩家身上、容器里和地上使用不同的时钟;服务器负责结算,客户端只按服务器下发的速度显示。
两套时钟与服务器权威
玩家背包、装备栏、副手和鼠标上拿着的食物,按玩家在线游玩时间结算,下线期间不走;箱子、冰箱、其他容器、地上的掉落物和放置的方块食物,按世界时间结算,服务器开着就继续走。创造模式物品栏和 JEI 里的食物不计时。
腐败、温度和冷鲜度都由服务器计算,客户端看到的只是服务器发来的快照。提示里的数字会按服务器下发的当前速度逐秒推进,看起来是实时的,但真实数值始终以服务器为准,修改客户端不能造出新鲜食物;提示文字和颜色也以服务器方案文件为准。
换手、上线与换维度会重新对表
食物换手时,从新主人拿到的那一刻接着算,不会因为前主人的在线时间更长而一接过来就突然坏掉。玩家上线、切换维度时也会重新对表;下线期间的时间不会补算进背包物品。
背包和地上掉落物大约每 20 秒刷新一轮;按 S 可以立即结算并查看最新数值。打开容器、开始吃东西、使用 Tom 存储终端存取时,也会顺带刷新一次背包,不必等下一轮。
谁算物品的主人
配了保质期的食物放进容器的那一刻会打上放入者的主人标记。其他玩家打开箱子时会看到红框,拿不走;掉在地上的受保护食物也捡不起来。冰箱、Tom 存储终端等容器遵循同样的规则。
只有“放进容器”才算:野外宝箱里你拿走一半,剩下的不会因为你碰过就归你,其他玩家仍可公平拿取。反过来说,从未放进过容器的食物没有主人,刚做好、刚捡到一直带在身上的食物可以自由送人;标记一旦打上会跟着物品走,从自己的箱子拿回背包后仍然是你的。
按住 S 查看详细信息,如果主人不是自己,最下面会多出一行“物品主人”。不同主人的同一种食物不能叠在一起,会分成两摞,避免标记被覆盖。
信任名单与所有权流转
用 /hdtrust 管理自己的保护物品信任名单,无需 OP:
| 命令 | 作用 |
|---|---|
/hdtrust add <玩家名> | 把在线玩家加入当前白名单,对方可以正常拿取你的受保护食物。 |
/hdtrust remove <玩家名> | 移出当前白名单,但保留“曾信任”历史;对方手上已经拿走、尚未归还的物品会过户给他。 |
/hdtrust forget <玩家名> | 同时清除当前白名单和曾信任历史,之后按从未信任处理。 |
/hdtrust list | 查看当前白名单与曾信任名单;点击名单里的名字可直接移除或重新信任。 |
信任始终看最初的主人:朋友拿走你的食物再放进他的箱子,主人仍然是你,不会被转手洗掉。你主动把食物扔出去,等于送人,标记会被清掉;朋友拿了你的食物再主动扔出,也一样算送人。
死亡掉落不算送人:原本没有主人的食物会在你死亡的那一刻补上你的标记,已有标记的保持原主人;陌生人捡不走,你自己和你信任的朋友能捡,复活后可以拿回来。若服务器开启 removeOwnerOnDeathDrop(适合 PVP 服),死亡掉落会强制清空保护标记,任何人都能拾取。
ejectIllegalProtectedItems,把这类物品直接扔到持有者脚下;默认关闭,以免信任文件异常时误伤整批物品。全员离线时,容器里的食物不算腐败
受保护食物的主人和当前所有受信任玩家全部不在线时,箱子、冰箱等容器里的这段时间不计入腐败;只要名单里还有一位有权者在线,就照常结算。
服务器用离线账本记录“全员不在线”的时段,箱子本来只在被打开时结算,所以等有人回来查看时才会一次扣除。离线账本只记录启用后的时段,更早以前的离线时间无法补回;扔在地上的受保护食物不享受这项保护,仍然会坏。
容器、战利品与掉落物
关着的箱子不会被持续扫描。食物身上记录着上一次结算的时间,打开箱子时按上次的温度一次性补算中间时段;中途天气变化不会分段重算,结果与持续模拟略有出入,但很接近,也几乎不占性能。
打开箱子、在箱子里点物品或按 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。