TPS i system ticków w Minecrafcie — jak to działa
20 ticków na sekundę — fundament symulacji świata Minecrafta. Wyjaśniamy, czym są ticki, czym TPS, MSPT i dlaczego optymalizacja serwera tak naprawdę zaczyna się od ich zrozumienia.
TPS, ticki, MSPT — pojęcia, których nie rozumiesz, dopóki nie zaczniesz administrować serwerem Minecraft. Wtedy okazuje się, że są fundamentem wszystkiego: wydajności, gameplayu, mechaniki świata. Bez zrozumienia ticków nie da się sensownie optymalizować serwera.
Czym jest tick?
Tick to pojedyncza klatka symulacji świata Minecrafta. W każdym ticku gra:
- aktualizuje pozycje i AI mobów,
- aktualizuje redstone,
- sprawdza wzrost roślin,
- oblicza pogodę,
- przelicza fizykę bloków (lawa, woda, piasek),
- sprawdza spawning mobów,
- aktualizuje pozycje graczy,
- obsługuje akcje graczy (stawianie, niszczenie).
Cała mechanika gry dzieje się dyskretnie, w tickach. Świat „skacze" 20 razy na sekundę.
TPS — Ticks Per Second
Idealny TPS w Minecrafcie to 20. Każdy tick trwa dokładnie 50 ms. Jeśli serwer wykonuje wszystkie obliczenia tickowe w mniej niż 50 ms, ma 20 TPS — gra jest płynna.
Gdy obliczenia trwają dłużej (np. 80 ms), kolejne ticki się opóźniają. Po przekroczeniu progu serwer zaczyna wyświetlać niższy TPS — np. 12.5 (zamiast 20).
Skutki niskiego TPS:
- moby zamierają (nie chodzą, nie atakują),
- redstone działa wolniej,
- plony rosną wolniej,
- walka PvP jest niegrywalna,
- klienci dostają desyncs (rubber-banding).
MSPT — Milliseconds Per Tick
MSPT to średni czas wykonania jednego ticka w milisekundach. Komplementarny do TPS.
- MSPT < 50 ms = 20 TPS (zdrowo).
- MSPT 50–100 ms = TPS spada do 10–20.
- MSPT 100+ ms = serious lagi.
Komenda /mspt w Paperze pokazuje wartość. /spark health ma więcej szczegółów (min, max, p95, p99).
Dlaczego TPS spada?
Każdy tick to praca CPU. Jeśli pracy jest za dużo dla jednego rdzenia:
- za dużo entity do zaktualizowania,
- za dużo hopperów,
- skomplikowany redstone,
- plugin wykonujący dużo obliczeń synchronicznie,
- generowanie nowych chunków przy eksploracji,
- zatrzymanie GC na sekundę zatrzymuje wszystkie ticki.
Minecraft używa głównie 1 wątku CPU dla logiki świata. Mocniejszy procesor (wyższy single-thread) zawsze pomaga.
Komendy diagnostyczne
/tps # bieżący TPS (1 min, 5 min, 15 min)
/mspt # MSPT
/spark health # pełne info: GC, RAM, entity, chunki
/spark profiler --timeout 60 # 60-sekundowe profilowanie CPU
Bez sparka nie sposób trafnie zoptymalizować serwera. Ten plugin ma więcej znaczenia niż większość innych.
Główny wątek vs async
Większość operacji Minecrafta wykonuje się w głównym wątku serwera. To synchronizuje świat (wszystkie zmiany są spójne), ale ogranicza do mocy 1 rdzenia.
Niektóre operacje są asynchroniczne:
- ładowanie chunków (Paper async chunk loader),
- operacje I/O (zapisy, sieć),
- obliczenia per-player mob spawn,
- wybrane API pluginów (event'y AsyncPlayerChat).
Folia (eksperymentalny fork Papera) idzie dalej — symuluje rożne regiony świata na różnych rdzeniach. Skalowanie do 500+ graczy.
Ustawienia ticks-per
Wiele operacji Minecrafta nie musi się dziać co tick. Można je rozrzedzić w paper.yml/spigot.yml:
ticks-per:
hopper-transfer: 8 # zamiast 1
hopper-check: 8
mob-spawner: 2 # zamiast 1
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
Hoppery sprawdzają co 8 ticków zamiast 1 — 8× mniej pracy. Spawnery mobów co 2 ticki — 50% mniej. Cena: lekko wolniejsze działanie tych mechanik. Większość graczy nie zauważy.
Watchdog
Paper monitoruje główny wątek. Jeśli tick trwa dłużej niż timeout-time sekund (domyślnie 60), watchdog uznaje serwer za zawieszony i zabija go. Zapobiega to spirali zawieszenia.
# spigot.yml
settings:
timeout-time: 60
restart-on-crash: true
Czy zawsze 20 TPS?
Nie zawsze konieczne. Niewielkie spadki (19.5–20) są w pełni akceptowalne. Problem zaczyna się przy:
- średnich spadkach do 15–18 (zauważalne),
- nagłych skokach MSPT (jitter, pauzy GC),
- długotrwałych spadkach poniżej 15.
Cel: średni TPS > 19, MSPT p99 < 100 ms. To w praktyce „żelazna płynność".
Podsumowanie
20 ticków na sekundę to fundament symulacji Minecrafta. TPS pokazuje, ile z nich serwer wykonuje. MSPT — ile czasu zajmuje średni tick. Bez tych metryk nie można sensownie administrować serwerem.
spark + /tps + /mspt dają pełen obraz. Ze zrozumieniem ticków optymalizacja staje się logiczna: znajdź, co zajmuje najwięcej czasu w ticku, i to wyeliminuj.