Chunky: pregeneracja chunków w Minecraft i jak pozbyć się lagów generowania
Jeśli twój serwer zacina się na ułamek sekundy za każdym razem, gdy ktoś wchodzi w nieznany teren, winowajcą prawie zawsze jest generowanie chunków. Ten poradnik pokazuje, jak plugin Chunky buduje świat z wyprzedzeniem, dzięki czemu serwer w trakcie gry tylko czyta gotowe regiony z dysku, zamiast generować je w locie.
Dlaczego generowanie chunków lagi
Kiedy gracz pierwszy raz wchodzi na koordynat bez pliku regionu, Paper lub Spigot musi wygenerować chunk dokładnie w tym momencie. Pod maską odbywają się trzy ciężkie operacje równocześnie: CPU liczy szum Perlina dla terenu, biomów, struktur i dekoracji; dysk zapisuje świeży plik .mca w world/region/; RAM trzyma dane przejściowe, dopóki chunk nie jest gotowy do wysłania klientowi.
W Minecraft 1.21 jest jeszcze gorzej. Nowe biomy, custom structures, wnętrza end city, trial chambers, wszystko to obciąża główny wątek. Nawet na topowym CPU jeden chunk to 20-80 ms. Jeśli gracz leci na elytrze 30 bloków na sekundę, serwer musi produkować 8-10 świeżych chunków co sekundę, a TPS spada na pysk.
Problem leży nie w samym Minecraft, tylko w tym, że generowanie odbywa się leniwie, w momencie żądania chunka. Rozwiązanie proste: przygotować chunki wcześniej, w spokojnym oknie czasu, i już więcej nie ruszać tym głównego wątku w trakcie rozgrywki.
Czym jest pre-generation i dlaczego działa
Pomysł jest prosty. Uruchamiasz jednorazowe zadanie, które przechodzi po wszystkich koordynatach w obrębie przyszłego obszaru gry i generuje każdy chunk. Po jego zakończeniu world/region/ zawiera gotowe pliki .mca. Gdy gracz wejdzie na te koordynaty, serwer otwiera plik, czyta chunk w 1-3 ms i wysyła go klientowi. Żadnego szumu Perlina, żadnego budowania struktur w locie.
Ten jednorazowy nakład czasowy zwraca się za każdym razem, gdy nowy gracz eksploruje świat. Na publicznym serwerze z paroma setkami online różnica jest widoczna od razu: nie ma już półsekundowych zacięć, TPS trzyma się na 19,5-20,0 nawet gdy kilkunastu graczy rusza w nieznane.
Chunky vs WorldBorder fill: dlaczego dziś wygrywa Chunky
Stara szkoła używała /wb fill z pluginu WorldBorder. Działa, ale został napisany pod Bukkit 1.7-1.12 i to widać: blokuje główny wątek, kiepsko współpracuje z nowoczesnym Paperem, brak wsparcia Folii. Plugin Pregen i Aurora z tej samej epoki od lat są porzucone.
Chunky to nowoczesna alternatywa. Wspiera Paper, Purpur, Pufferfish, Folię 1.20-1.21, ładuje chunki asynchronicznie, potrafi pauzować i wznawiać po restarcie serwera, pozwala wybrać kształt obszaru i wzorzec przejścia. Aktywny rozwój, dostępny na Modrinth i SpigotMC, działa od wersji 1.13 do 1.21.4.
W Paper 1.21+ pojawiła się wbudowana komenda /paper chunkgen. Działa, ale uboga w opcje: brak pauzy, brak zapisu postępu, ograniczona kontrola nad wzorcami. Do jednorazowego zadania na małym terenie wystarczy. Do poważniejszych celów Chunky nadal jest wygodniejszy.
Instalacja Chunky na Paperze, Purpurze i Folii
Pobierz Chunky-X.X.X.jar z Modrinth lub SpigotMC. Wrzuć do folderu plugins/ i zrestartuj serwer. Plugin nie ma żadnych zależności.
Przy starcie powinieneś zobaczyć:
[Server] [INFO] [Chunky] Enabling Chunky v1.4.x
[Server] [INFO] [Chunky] Loaded language file (en)
Użytkownicy Folii biorą ChunkyFolia z tego samego wpisu na Modrinth, to fork respektujący regionalne wątki Folii. Konfiguracja w plugins/Chunky/config.yml tworzy się przy pierwszym uruchomieniu.
Podstawowe komendy Chunky
Minimalny zestaw, który załatwia 90% zadań:
/chunky world world
/chunky radius 2000
/chunky start
Pierwsza komenda wybiera świat (domyślnie world, ale jeśli zmieniłeś nazwę, użyj tej z bukkit.yml). Druga ustawia promień w blokach od centrum. Trzecia uruchamia zadanie.
Sterowanie w trakcie pracy:
/chunky pause
/chunky continue
/chunky cancel
/chunky quiet 30
pause zatrzymuje zadanie, continue wznawia, cancel zeruje postęp. quiet 30 ogranicza wpisy do konsoli do raz na 30 sekund, żeby terminal pozostał czytelny.
Kształt i centrum
Domyślnie Chunky generuje kwadratowy obszar wokół spawna. Dla okrągłego (naturalniejszy w światach wyspowych lub ciasnych SMP):
/chunky shape circle
Przesunąć centrum z 0,0:
/chunky center 1500 -800
Dostępne kształty: square, circle, oval, triangle, pentagon, hexagon, star. W praktyce 99% serwerów używa square lub circle.
Wzorzec przejścia decyduje, jak Chunky chodzi po mapie:
/chunky pattern concentric
/chunky pattern loop
/chunky pattern region
concentric rozwija się spiralnie z centrum, loop idzie wiersz po wierszu, region przerabia bloki 32x32 chunków (jeden plik .mca po drugim). Na SSD różnica niewielka. Na HDD region oszczędza czas seekowania.
Matematyka: ile chunków i ile czasu
Tutaj wielu adminów ustawia promień 5000 i potem się dziwi. Liczmy.
Promień 2000 bloków = kwadrat 4000x4000. Chunk to 16x16 bloków, więc 250x250 chunków = 62 500 chunków łącznie. Na nowoczesnym CPU jak Ryzen 7 5800X z NVMe to 20-40 minut.
Realne liczby dla typowych setupów SMP:
- Promień 1000 (2000x2000 bloków) = ~15k chunków, 5-15 minut
- Promień 2000 (4000x4000 bloków) = ~62k chunków, 20-40 minut
- Promień 3000 (6000x6000 bloków) = ~140k chunków, 1-2 godziny
- Promień 5000 (10000x10000 bloków) = ~390k chunków, 3-6 godzin
Promień 10000 to 1,56 miliona chunków i 12-20 godzin. Promień 50000 to 39 milionów chunków i tydzień ciągłej pracy. Wartości skalują się od szybkości CPU i dysku. Na słabym VPS z 2 rdzeniami mnóż razy 3-5.
Rozmiar świata na dysku po pregenie
Wielu adminów boi się, że pregenerowany świat zajmie setki gigabajtów. W praktyce jeden chunk waży 30-90 KB w pliku .mca, zależnie od tego co się w nim wygeneruje (światy 1.21 z trial chambers i end city są cięższe).
Szacunkowo:
- Promień 2000 = ~62k chunków = 3-6 GB na dysku
- Promień 5000 = ~390k chunków = 15-30 GB
- Promień 10000 = ~1,56M chunków = 60-120 GB
Przy normalnym SMP z promieniem 2000-3000 świat rzadko przekracza 10 GB. Mniej, niż myślisz, i znacznie mniej niż 80 GB, do których rośnie publiczny serwer w ciągu paru lat bez pregenu, bo gracze rozłażą się chaotycznie i tworzą tysiące izolowanych regionów.
World Border: trzymaj graczy w pregenerowanym obszarze
Bez sensu pregenerować 4000x4000 bloków, jeśli gracze mogą wyjść na 50000. Zaraz po pregenie ustaw vanillowy border:
/worldborder center 0 0
/worldborder set 4000
/worldborder warning distance 100
Uważaj na jednostki. Chunky radius 2000 odpowiada /worldborder set 4000, bo Chunky mierzy promień, a vanillowy border średnicę. Klasyczna pomyłka, sprawdź dwa razy.
Border robi trzy pożyteczne rzeczy: zatrzymuje graczy na granicy, blokuje generowanie świeżych chunków przez lot na elytrze, rysuje czerwoną ścianę na kliencie.
Światy równoległe: nether i the_end
Nether jest osiem razy bardziej zwarty. Koordynaty w netherze to koordynaty overworld podzielone przez 8. Dla overworld o promieniu 2000 wystarczy nether z promieniem 250-300:
/chunky world world_nether
/chunky radius 300
/chunky start
End to mała wyspa centralna plus odległe wyspy zewnętrzne. Dla większości serwerów:
/chunky world world_the_end
/chunky radius 1000
/chunky start
Uwaga: zewnętrzne wyspy w endzie zaczynają się około koordynatu 1000 od centrum, gracze tam polecą. Jeśli chcesz mieć gotowe, ustaw 2000-3000 i licz się z czasem.
Wydajność podczas pregenu: TPS spadnie
To normalne. Chunky obciąża główny wątek, bo vanillowy generator nie jest w pełni thread-safe, więc w trakcie zadania TPS spada do 14-18. Gracze poczują przycięcia.
Dwie strategie:
Strategia 1: pregen na noc. Wyłącz wstęp graczom (whitelist on), uruchom Chunky na noc, rano zdejmij whitelistę. Najczystsza droga.
Strategia 2: generacja w tle. Jeśli whitelista nie wchodzi w grę, użyj /chunky tasks 1, żeby wymusić jeden wątek zamiast wielu. TPS trzyma się na 18-19, ale pregen trwa 2-3 razy dłużej.
/chunky tasks 1
/chunky start
Domyślną liczbę wątków zmienisz w plugins/Chunky/config.yml:
generation:
parallel-tasks-multiplier: 0.25
default-quiet-interval: 60
0.25 znaczy używaj jednej czwartej dostępnych rdzeni. Na 8-rdzeniowym serwerze to 2 wątki.
Chunky a Aikar's flags
Jeśli używasz Papera z Aikar's flags (G1GC, ParallelGCThreads, MaxGCPauseMillis i spółka), Chunky współpracuje z nimi bez problemów. Brak konfliktów. Jeden warunek: nie zostaw zbyt małej sterty. Do pregenu od promienia 2000 chcesz minimum -Xms6G -Xmx6G, inaczej G1GC odpala się za często, gdy świeże chunki zapełniają stertę.
FAQ
Ile RAM-u potrzeba na pregen?
Tyle, ile już przydzielasz, wystarczy. Chunky przerabia regiony strumieniowo, nie trzyma całego świata w pamięci. Od promienia 3000 przydziel minimum 4-6 GB sterty, żeby GC nie hamował procesu.
Czy mogę pregenerować z graczami online?
Można, ale TPS spadnie do 14-17. Jeśli gracze tolerują parę przycięć, włącz /chunky tasks 1 i kontynuuj. Czystsza opcja to wyrzucić wszystkich na noc i puścić z whitelistą.
Czy trzeba pregenerować na nowo po aktualizacji Minecraft?
Nie. Stare chunki pozostają poprawne w nowej wersji. Minus: nowe biomy i struktury z aktualizacji nie pojawią się w już wygenerowanych regionach. Jeśli 1.22 doda nowy biom, pojawi się tylko w świeżych chunkach poza twoją pregenerowaną strefą.
Co, jeśli Chunky uszkodzi świat?
Chunky nie psuje światów. Ale przed startem zawsze zrób backup: zatrzymaj serwer, skopiuj world/, world_nether/, world_the_end/. Jeśli coś pójdzie nie tak (dysk pełny, brak prądu, crash pluginu), przywróć backup i odpal jeszcze raz.
Chunky vs wbudowany /paper chunkgen?
/paper chunkgen doszedł w Paper 1.21. Działa, ale bez pauzy, bez wyboru kształtu, bez zapisu postępu między restartami. Sprawdza się przy szybkiej, jednorazowej robocie. Do reszty Chunky wciąż wygrywa.
Czy pregen rozwiąże lagi na działającym serwerze?
Lagi chunków tak, w pełni. Lagi z mob farm, redstone-konstrukcji, źle napisanych pluginów albo lag sieciowy podczas ataku DDoS nie. Pregen tego nie rusza. Lag sieciowy potrzebuje osobnej warstwy ochrony ruchu.
Czy mogę odpalić Chunky na kilku światach naraz?
Technicznie tak, /chunky world i /chunky start kolejkują zadania. Ale lepiej puszczać świat po świecie, mniejsze obciążenie i łatwiej kontrolować postęp.
Co dalej
Jeśli ten poradnik usunął ci lagi chunków, dokręć jeszcze parę śrub. Ustaw world border 200-500 bloków ciaśniej niż obszar pregenerowany, żeby gracze nie trafili przez przypadek na świeże chunki przez lot na elytrze. Zaplanuj cronowy nocny pregen, jeśli prowadzisz seasonalny serwer z regularnymi resetami mapy. I pamiętaj, pregen rozwiązuje problem generowania, nie sieciowy: jeśli twoja mapa zostanie zasypana ruchem DDoS, żaden plik .mca ci nie pomoże.
Chroń swój serwer przed atakami DDoS
Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.
Wypróbuj za darmoPowiązane artykuły
Optymalizacja flag JVM Javy dla serwerów Minecraft: pełny poradnik
Rozbieramy flagi Aikara, porównujemy G1GC, ZGC i Shenandoah, poprawnie konfigurujemy pamięć i dajemy gotowe zestawy flag dla serwerów każdej wielkości. Praktyczny poradnik optymalizacji JVM.
Testy wydajnosci serwerow Minecraft 2026: Vanilla vs Paper vs Folia
Szczegolowe porownanie rdzeni serwerowych Minecraft po TPS, RAM, predkosci ladowania chunkow. Testy Java 17 vs 21, flagi JVM, porownanie hostingu i wymagania sieciowe.
Poradnik dla początkujących: jak chronić serwer Minecraft
Instrukcja krok po kroku o ochronie serwera Minecraft przed atakami DDoS, botami i innymi zagrożeniami. Mówimy, na co zwrócić uwagę przy wyborze ochrony i jak prawidłowo skonfigurować swój serwer.