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。