⚡ Curvatura Temporal y Motor de Aceleración de Ticks
📌 Aviso sobre el código fuente del repositorio: La documentación de esta Wiki refleja el estado actual del código fuente en el repositorio, que puede incluir confirmaciones recientes no publicadas o características en desarrollo antes de los lanzamientos públicos en CurseForge y Modrinth.
🔬 Funcionamiento de la Curvatura Temporal
El avance clave de True Sleep reside en desacoplar la velocidad física del motor del servidor (engine_tps) de la velocidad virtual aparente del tiempo (virtual_tps).
En lugar de forzar a la CPU a procesar 1.000 ticks reales por segundo (provocando severas caídas de rendimiento y desconexiones), True Sleep ejecuta el servidor a una tasa estable y configurable (por defecto: $50\text{ TPS}$) y avanza el reloj del mundo usando un Multiplicador de Paso (Stride) matemático.
📐 Ecuaciones Matemáticas y Razón de Paso
1. Fórmula de la Razón de Paso (Stride)
El servidor calcula cuántos ticks del mundo avanzar por cada tick físico del motor: $$\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)$$
- Ejemplo con valores predeterminados:
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ multiplicador de paso}$
- Resultado: ¡El servidor funciona a 50 ticks/s avanzando 20 ticks de mundo por tick físico, logrando una velocidad aparente de $1000\text{ TPS}$ con apenas 2.5 veces la carga habitual de CPU!
2. Desaceleración Suave de Llegada al Destino
Al aproximarse a la hora prevista de despertar ($\text{dist} < 200\text{ ticks}$), el motor desacelera gradualmente para evitar transiciones bruscas:
$$\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. Desaceleración Lineal de 15 Ticks al Despertar Prematuro
Si un jugador se despierta antes de tiempo (por rotura de cama, abandono voluntario o recibir daño), True Sleep inicia una transición suave de 15 ticks lineales en lugar de frenar en seco a 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. Escalado de la Velocidad de Ticks Aleatorios (randomTickSpeed)
El crecimiento de cultivos, la caída de hojas y la oxidación del cobre dependen de la GameRule vanilla randomTickSpeed. True Sleep escala dinámicamente este valor durante el sueño para que los cultivos progresen en sincronía 1 a 1 exacta:
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. Ajuste Monótono del Reloj Mundial
Al alcanzar la hora de despertar, True Sleep ajusta el reloj mundial monótonamente hacia adelante: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Esto garantiza que el tiempo jamás retroceda, manteniendo la integridad de sensores de luz solar y datapacks temporales.
