⚡ 時間曲速與 Tick 加速引擎
📌 程式碼儲存庫原始碼聲明:本 Wiki 中的文件反映了程式碼儲存庫目前的最新原始碼狀態,可能包含尚未在 CurseForge 和 Modrinth 上發布的開發中功能或最新提交。
🔬 時間曲速運行原理解析
True Sleep 的核心突破在於將 實體伺服器引擎速度 (engine_tps) 與 表觀虛擬時間流速 (virtual_tps) 徹底解耦。
強迫 CPU 每秒執行 1,000 次真實遊戲刻會導致伺服器嚴重卡頓甚至中斷連線,而 True Sleep 採用更優雅的做法:讓伺服器實體引擎保持在穩定可控的速率(預設:$50\text{ TPS}$),並借助數學上的 跨步倍率 (Stride Multiplier) 來高倍推進世界時間。
📐 數學計算公式與跨步比率
1. 跨步比率計算公式
伺服器實體刻在每一幀計算推進的世界刻數: $$\text{Physical Target} = \min(\text{engine_tps}, \text{targetRate})$$ $$\text{Stride} = \max\left(1, \text{round}\left(\frac{\text{targetRate}}{\text{Physical Target}}\right)\right)$$
- 預設參數運算範例:
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ 跨步倍率}$
- 結論:伺服器僅需以 50 TPS 運行,每個實體刻推進 20 個世界刻,僅消耗 2.5倍 的常規 CPU 負載即可達到 $1000\text{ TPS}$ 的極速體驗!
2. 臨近清晨平滑緩衝減速
在接近喚醒時間目標($\text{dist} < 200\text{ ticks}$)時,曲速引擎將平滑減速以消除突兀的視覺跳躍:
$$\text{progress} = \max\left(0.0, \min\left(1.0, \frac{\text{dist} - 20}{180}\right)\right)$$ $$\text{targetRate} = 20.0 + (\text{virtual_tps} - 20.0) \times \text{progress}$$
3. 15 刻線性平滑退出機制
當玩家意外提前甦醒(例如床被破壞、玩家主動下床或受到傷害)時,True Sleep 會啟動平滑的 15 刻線性減速緩衝,而非生硬地直接截斷至 20 TPS:
$$\text{progress} = \frac{\text{decelerateTicks}}{15.0}$$ $$\text{currentRate} = 20.0 + (\text{lastWarpRate} - 20.0) \times \text{progress}$$ $$\text{stride} = \max(1, \text{round}(1 + (\text{lastWarpStride} - 1) \times \text{progress}))$$
4. 隨機刻速率 (randomTickSpeed) 動態縮放
作物的生長、樹葉枯萎以及銅塊氧化均依賴原版 randomTickSpeed 遊戲規則。True Sleep 在睡眠加速期間會按比例動態同步縮放該數值,使農作物與時間流速完全 1:1 同步推進:
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. 單調遞增的世界時鐘對齊
達到喚醒時間後,True Sleep 會嚴格保證世界時鐘單調向前對齊: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
這確保了世界時鐘永遠不會倒退,徹底避免紅石陽光感測器狀態錯亂或依賴時間的外部資料包失效。
