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.