⚡ Mesin Time Warp & Akselerasi Tick
📌 Pemberitahuan Sumber Repositori: Dokumentasi dalam Wiki ini mencerminkan kondisi kode sumber terkini dalam repositori, yang mungkin mencakup komit terbaru yang belum dirilis atau fitur dalam pengembangan sebelum rilis publik di CurseForge dan Modrinth.
🔬 Cara Kerja Mesin Time Warp
Terobosan utama True Sleep adalah memisahkan Kecepatan Mesin Server Fisik (engine_tps) dari Kecepatan Waktu Virtual Semu (virtual_tps).
Alih-alih memaksa CPU menjalankan 1.000 tick nyata per detik (yang dapat mengakibatkan lag parah dan terputusnya koneksi), True Sleep menjalankan mesin server pada kecepatan stabil yang dapat disesuaikan (default: $50\text{ TPS}$) dan memajukan waktu dunia menggunakan Pengali Langkah (Stride Multiplier) matematis.
📐 Persamaan Matematika & Rasio Langkah (Stride)
1. Formula Rasio Langkah (Stride Ratio)
Server menghitung berapa banyak tick dunia yang dimajukan per tick mesin fisik: $$\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)$$
- Contoh dengan Nilai Bawaan:
- $\text{engine_tps} = 50\text{ TPS}$
- $\text{virtual_tps} = 1000\text{ TPS}$
- $\text{Stride} = \frac{1000}{50} = 20\times\text{ langkah}$
- Hasil: Server berjalan pada 50 tick/detik, memajukan 20 tick dunia per tick fisik, menghasilkan kecepatan semu $1000\text{ TPS}$ hanya dengan 2.5 kali beban CPU normal!
2. Perlambatan Halus Menjelang Pagi
Saat mendekati waktu bangun yang dituju ($\text{dist} < 200\text{ tick}$), mesin warp melambat secara mulus untuk mencegah transisi yang tersentak:
$$\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. Fase Penghentian Bertahap 15-Tick
Jika pemain bangun lebih awal (tempat tidur hancur, pemain beranjak bangun, atau terkena damage), True Sleep memulai perlambatan linear 15-tick alih-alih langsung anjlok ke 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. Skalasi Kecepatan Random Tick (randomTickSpeed)
Pertumbuhan tanaman, pembusukan daun, dan oksidasi tembaga bergantung pada GameRule vanilla randomTickSpeed. True Sleep menskalakan aturan ini secara dinamis selama tidur agar tanaman berkembang sinkron 1:1:
$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$
5. Penyesuaian Monotonik Jam Dunia
Setelah mencapai waktu bangun, True Sleep memastikan jam dunia diselaraskan maju secara monotonik: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$
Ini menjamin jam dunia tidak akan pernah berputar mundur, melindungi pembacaan sensor cahaya matahari dan datapack berbasis waktu.
