⚡ Zeitraffer-Engine & Tick-Beschleunigung
📌 Hinweis zum Quellcode des Repositorys: Die Dokumentation in diesem Wiki spiegelt den aktuellen Quellcode-Zustand im Repository wider, der neuere, unveröffentlichte Commits oder Entwicklungsfunktionen vor den öffentlichen Release-Builds auf CurseForge und Modrinth enthalten kann.
🔬 Funktionsweise des Zeitraffers (Time Warp)
Der entscheidende Durchbruch von True Sleep liegt in der Entkopplung der physischen Server-Geschwindigkeit (engine_tps) von der scheinbaren virtuellen Zeitgeschwindigkeit (virtual_tps).
Anstatt die CPU zu zwingen, 1.000 echte Spiel-Ticks pro Sekunde abzuarbeiten (was extreme Server-Lags und Timeouts zur Folge hätte), läuft der Server unter True Sleep mit einer stabilen, konfigurierbaren Rate (Standard: $50\text{ TPS}$) und schiebt die Spielzeit mit einem mathematischen Schrittweiten-Multiplikator (Stride) voran.
📐 Mathematische Formeln & Schrittweiten-Verhältnis
1. Berechnungsformel für die Schrittweite
Der Server berechnet, wie viele Weltzeit-Ticks pro physischem Server-Tick vorgerückt werden: $$\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)$$
- Beispiel mit Standardeinstellungen:
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ Schrittweite}$
- Ergebnis: Der Server läuft mit 50 Ticks/s und rückt pro Takt 20 Welt-Ticks vor. So wird eine scheinbare Geschwindigkeit von $1000\text{ TPS}$ mit lediglich 2,5-facher normaler CPU-Last erreicht!
2. Sanftes Abbremsen vor dem Aufwachen
Kurz vor Erreichen der Zielaufwachzeit ($\text{dist} < 200\text{ Ticks}$) bremst der Zeitraffer gleichmäßig ab, um ruckartige Übergänge zu verhindern:
$$\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-Tick-lineares Auslaufen bei vorzeitigem Aufwachen
Wird das Schlafen vorzeitig unterbrochen (Bett zerstört, Spieler steht auf oder erleidet Schaden), bremst True Sleep in einem sanften 15-Tick-Übergang ab, statt abrupt auf 20 TPS zurückzufallen:
$$\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. Skalierung der Zufalls-Tick-Geschwindigkeit (randomTickSpeed)
Pflanzenwachstum, Laubzerfall und Kupferoxidation basieren auf der nativen GameRule randomTickSpeed. True Sleep skaliert diese Regel während des Schlafs proportional, damit Farmen exakt 1:1 synchron mitwachsen:
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. Monotone Uhrzeitausrichtung
Nach Erreichen der Aufwachzeit rastet die Weltzeit streng monoton nach vorne ein: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Dadurch dreht sich die Weltzeit niemals rückwärts, wodurch Tageslichtsensoren und zeitgesteuerte Datenpakete stabil bleiben.
