Skip to content

⚡ 時間曲速與 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$$

這確保了世界時鐘永遠不會倒退,徹底避免紅石陽光感測器狀態錯亂或依賴時間的外部資料包失效。

Official documentation & web portal for Dasik Igaijinn mods.