⚡ Moteur Temporel et Accélération des Ticks
📌 Avertissement concernant le code source du dépôt : La documentation de ce Wiki reflète l'état actuel du code source dans le dépôt, qui peut inclure des commits récents non publiés ou des fonctionnalités en cours de développement avant les versions publiques sur CurseForge et Modrinth.
🔬 Fonctionnement du Moteur Temporel (Time Warp)
La percée majeure de True Sleep réside dans la dissociation de la vitesse physique du moteur serveur (engine_tps) et de la vitesse virtuelle apparente du temps (virtual_tps).
Plutôt que d'exiger du processeur le traitement de 1 000 ticks réels par seconde (ce qui provoquerait de lourds ralentissements et des déconnexions), True Sleep maintient le serveur à une cadence maîtrisée (par défaut : $50\text{ TPS}$) et accélère le temps à l'aide d'un Multiplicateur de Pas (Stride) mathématique.
📐 Formules Mathématiques et Ratio de Pas
1. Formule du Ratio de Pas (Stride)
Le serveur calcule le nombre de ticks de jeu à faire défiler par tick physique : $$\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)$$
- Exemple avec les réglages par défaut :
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ multiplicateur}$
- Résultat : Le serveur s'exécute à 50 ticks/s et avance de 20 ticks mondiaux par pulsation, délivrant une vitesse apparente de $1000\text{ TPS}$ pour seulement 2.5 fois la charge CPU normale !
2. Décélération Progressive à l'Approche de l'Aube
En approchant de l'heure de réveil cible ($\text{dist} < 200\text{ ticks}$), le moteur décélère tout en douceur pour éviter les transitions brutales :
$$\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. Décélération Linéaire sur 15 Ticks en Cas d'Interruption
Si un joueur se réveille prématurément (lit cassé, sortie volontaire, dégât subi), True Sleep applique une phase de décélération linéaire de 15 ticks au lieu de stopper net à 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. Mise à l'Échelle de la Vitesse des Ticks Aléatoires (randomTickSpeed)
La croissance des plantations, la disparition des feuilles et l'oxydation du cuivre dépendent de la règle vanille randomTickSpeed. True Sleep l'augmente proportionnellement pendant le sommeil pour une synchronisation 1:1 parfaite :
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. Recalage Monotone de l'Horloge Mondiale
Au réveil, True Sleep recale l'horloge mondiale de manière strictement monotone vers l'avant : $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Cela garantit que l'horloge ne recule jamais dans le temps, préservant ainsi les capteurs solaires et les datapacks.
