⚡ Motor de Dobra Temporal e Aceleração de Ticks
📌 Aviso Legal do Código-Fonte do Repositório: A documentação nesta Wiki reflete o estado atual do código-fonte no repositório, que pode incluir commits recentes não lançados ou recursos em desenvolvimento antes dos lançamentos públicos no CurseForge e Modrinth.
🔬 Como Funciona a Dobra Temporal (Time Warp)
O avanço fundamental do True Sleep é desacoplar a velocidade física do servidor (engine_tps) da velocidade virtual aparente do tempo (virtual_tps).
Em vez de forçar o processador a calcular 1.000 ticks reais por segundo (o que geraria lag intenso e desconexões), o True Sleep opera o servidor em uma taxa estável e configurável (padrão: $50\text{ TPS}$) e avança o tempo usando um Multiplicador de Passo (Stride) matemático.
📐 Equações Matemáticas e Razão de Passo
1. Fórmula da Razão de Passo (Stride)
O servidor calcula quantos ticks de mundo avançar por tick físico do 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)$$
- Exemplo com configurações padrão:
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ passo}$
- Resultado: O servidor roda a 50 ticks/s avançando 20 ticks do mundo por tick físico, alcançando uma velocidade de $1000\text{ TPS}$ com apenas 2.5x a carga normal de CPU!
2. Desaceleração Gradual ao se Aproximar do Alvo
Ao se aproximar do horário de despertar ($\text{dist} < 200\text{ ticks}$), o motor desacelera suavemente para evitar cortes bruscos:
$$\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. Desaceleração Linear de 15 Ticks ao Acordar Antecipado
Se um jogador acorda antes da hora (cama destruída, levantamento voluntário ou dano), o True Sleep executa uma desaceleração linear suave de 15 ticks em vez de travar instantaneamente em 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. Ajuste da Velocidade de Ticks Aleatórios (randomTickSpeed)
O crescimento de plantações, a queda de folhas e a oxidação de cobre dependem da GameRule vanilla randomTickSpeed. O True Sleep escala essa regra dinamicamente para manter as fazendas sincronizadas em exatos 1 para 1:
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. Alinhamento Monótono do Relógio Mundial
Ao atingir a hora de despertar, o True Sleep alinha o relógio mundial monotonicamente para a frente: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Isso assegura que o tempo do mundo jamais retroceda, mantendo a estabilidade de sensores de luz solar e datapacks.
