⚡ Искривление времени и Движок ускорения тиков
📌 Отказ от ответственности за исходный код: Документация в этой Вики отражает текущее состояние исходного кода в репозитории, которое может включать недавние невыпущенные коммиты или разрабатываемые функции до публичных релизов на CurseForge и Modrinth.
🔬 Принцип работы деформации времени
Главный прорыв True Sleep — разделение физической скорости движка (engine_tps) и кажущейся виртуальной скорости времени (virtual_tps).
Вместо того чтобы заставлять процессор выполнять 1000 реальных тиков в секунду (что приведет к сильным лагам и разрывам связи), True Sleep запускает сервер с фиксированной стабильной частотой (по умолчанию: $50\text{ TPS}$) и продвигает игровое время с помощью математического множителя шага (Stride).
📐 Математические уравнения и коэффициент шага
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 тиков/с, пропуская 20 тиков мира за физический такт, достигая иллюзии $1000\text{ TPS}$ всего при 2.5-кратной нагрузке на ЦП!
2. Плавное замедление при приближении к рассвету
При приближении ко времени пробуждения ($\text{dist} < 200\text{ тиков}$) движок плавно замедляется, чтобы не допустить резкого визуального скачка:
$$\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-тиковое замедление, а не сбрасывает скорость мгновенно:
$$\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. Монотонное выравнивание мировых часов
По достижении времени пробуждения часы мира строго монотонно выравниваются вперед: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Это гарантирует, что время никогда не пойдет вспять, предотвращая сбои датчиков дневного света и датапаков.
