Skip to content

⚡ 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.

Official documentation & web portal for Dasik Igaijinn mods.