Jak przyspieszyć ładowanie chunków na serwerze Minecraft
Powolne wczytywanie świata to klasyczny problem dużych serwerów. Pokazujemy ustawienia Paper, pretendowanie chunków i pluginy, które realnie przyspieszają ładowanie świata.
Powolne wczytywanie chunków to klasyczny problem dużych serwerów Minecraft. Gracz biega po świecie, a w jego polu widzenia czarne kwadraty pojawiają się zamiast bloków. Ten symptom oznacza, że serwer nie nadąża z dostarczaniem terenu klientom. Rozwiązań jest kilka — od konfiguracji Papera, przez pre-generowanie świata, po pluginy specjalne.
Dlaczego ładowanie jest powolne?
Każdy chunk, którego gracz jeszcze nie odwiedził, musi zostać:
- wygenerowany z noise function (krajobraz, biomy, struktury),
- zapisany na dysk (region file),
- aktualizowany pod kątem oświetlenia,
- wysłany do klientów w pobliżu.
To droga ścieżka. Pojedynczy chunk to 5–30 ms pracy CPU, a gracz w sprincie może żądać 20 nowych chunków co sekundę. Bez przygotowania — lagi murowane.
Pre-generacja — najważniejsze ulepszenie
Plugin Chunky jest standardem 2026 r. Pre-generuje wszystkie chunki w zadanym promieniu z wyprzedzeniem.
/chunky world world
/chunky radius 5000
/chunky start
Dla mapy 5000 bloków promienia (10000×10000 = 100 mln bloków, ~3 GB region files) generowanie zajmuje 1–4 godziny na średnim VPS. W trakcie gracze mogą grać — Chunky pracuje w tle z niskim priorytetem.
Po zakończeniu: gracze nie generują nowych chunków podczas eksploracji. Zmiana TPS od średnio 17 → 19.8 to typowe doświadczenie.
Konfiguracja Papera
W paper-world-defaults.yml:
chunks:
delay-chunk-unloads-by: 10s
prevent-moving-into-unloaded-chunks: true
max-auto-save-chunks-per-tick: 24
delay-chunk-unloads-by: 10s trzyma chunki w pamięci przez 10 s po opuszczeniu. Gracz wracający tą samą trasą nie wymusza ponownego ładowania.
max-auto-save-chunks-per-tick: 24 ogranicza liczbę chunków zapisywanych na tick — chroni przed dużymi zatrzymaniami.
server.properties
view-distance=8
simulation-distance=4
sync-chunk-writes=false
network-compression-threshold=256
sync-chunk-writes=false wyłącza blokujące zapisy. Niewielkie ryzyko utraty zmian przy crashu, ale duża korzyść wydajnościowa. Backup robi to bezpiecznym.
view-distance=8 zamiast 12 — gracze widzą 192 bloki zamiast 192. Większość nie zauważy różnicy, ale serwer obsłuży 50% więcej osób.
Szybki dysk
Chunki to najczęściej operacje I/O. SATA SSD z IOPS 1k-2k będzie wąskim gardłem. NVMe (50k+ IOPS) przyspiesza ładowanie 5–10×.
Sprawdź na VPS:
hdparm -Tt /dev/sda
fio --randread --bs=4k --size=1G --runtime=30 --time_based --name=test
Wyniki poniżej 1k IOPS = pora na NVMe. OVH KS od 60 zł/miesiąc, Hetzner CX od 30 zł.
RAMfs / tmpfs
Trick zaawansowany: trzymaj świat w RAM-fs (tmpfs). Operacje są błyskawiczne, ale ryzykowne — restart = utrata wszystkiego.
mount -t tmpfs -o size=8G tmpfs /srv/minecraft/world
Plus skrypt synchronizujący do dysku co 5 minut (rsync). Tylko jeśli wiesz dokładnie, co robisz.
Pluginy pomocnicze
- FastAsyncWorldEdit (FAWE) — szybsze WorldEdit z cachowaniem.
- BetterRTP — losowe RTP, które omija niegenerowane chunki.
- Chunky — wspomniane pre-generowanie.
- spark — pomaga zidentyfikować, czy lagi są naprawdę z chunków.
Ograniczenie eksploracji
Granica świata. WorldGuard region:
/region define worldborder
/wb world set 5000
/wb damage set 2 0
/wb warning distance set 100
Gracze pokonują granicę = obrażenia / cofnięcie. Zniechęca to do nieustannego rozszerzania mapy. Po pre-generacji i ustawieniu granicy gracze nigdy nie żądają nowych chunków.
Optymalizacja fizyki w chunkach
W spigot.yml:
world-settings:
default:
item-merge-radius: 4.0
exp-merge-radius: 4.0
arrow-despawn-rate: 600
Mniej entity w chunku = szybsze ładowanie. Każda strzała / kula XP / item w chunku to osobny obiekt do serializacji.
Nether i End
Nether i End mają mniej generacji niż Overworld, ale mają inne wąskie gardła. W Netherze: portal między światami przepuszcza chunki = pre-generuj też Nether (rebult radius 1000).
/chunky world world_nether
/chunky radius 1000
/chunky start
Diagnostyka problemu
Kluczowe komendy w trakcie problemu:
/spark profiler --timeout 60
/spark health
/timings paste
/lagg chunks
Jeśli w sparku pojawia się dużo czasu w ChunkProviderServer lub ChunkLoader, ładowanie chunków to wąskie gardło. Wtedy działania powyżej.
Podsumowanie
Najpierw pre-generuj świat Chunky'm — to ratuje 80% problemów. Następnie ustaw view-distance=8 i simulation-distance=4. Włącz sync-chunk-writes=false. Zmień dysk na NVMe, jeśli to nadal słabe. Granica świata zatrzymuje generowanie nowych chunków na zawsze.
To kombinacja sprawia, że serwer obsłuży 100+ graczy bez czarnych kwadratów. Bez pre-generacji nawet najlepszy sprzęt nie pomoże.