Chunky: пред-генерация чанков в Minecraft и как убрать лаги от новых регионов
Если ваш сервер фризит на доли секунды, когда игрок уходит в неизведанные места, проблема почти всегда в генерации чанков. Этот гайд показывает, как плагин Chunky прогоняет генерацию мира заранее, чтобы во время игры сервер только читал готовые регионы с диска, а не считал их с нуля.
Почему генерация чанков лагает
Когда игрок впервые попадает в координату, где нет файла региона, Paper или Spigot должен сгенерировать чанк прямо в момент запроса. Под капотом это три тяжёлые операции одновременно: CPU считает шум Перлина для рельефа, биомов, структур и декораций; диск пишет новый .mca файл в world/region/; RAM держит все промежуточные структуры до тех пор, пока чанк не отдаётся на отправку игроку.
На свежем 1.21 это особенно больно. Новые биомы, кастомные структуры, чердаки в end city, тестовые камеры в trial chambers - всё это нагрузка на главный поток сервера. Даже на топовом CPU генерация одного чанка занимает 20-80 мс. Если игрок летит на elytra со скоростью 30 блоков в секунду, сервер должен выдавать 8-10 новых чанков ежесекундно, и TPS уходит в пол.
Проблема не в Minecraft как таковом, а в том, что генерация делается лениво. Логичное решение: подготовить чанки заранее, в спокойное время, и не трогать главный поток во время игры.
Что такое pre-generation и почему это работает
Идея простая. Один раз вы запускаете задачу, которая обходит все координаты внутри будущей игровой области и генерирует каждый чанк. После этого world/region/ содержит готовые .mca файлы. Когда игрок зайдёт в эти координаты, сервер откроет файл, прочитает чанк за 1-3 мс и отправит клиенту. Никакого Перлина, никаких структур на лету.
Это разовое вложение времени окупается каждый раз, когда новый игрок исследует мир. На паблике с парой сотен онлайна разница видна моментально: больше нет «фриза каждые 10 секунд», TPS сидит на 19.5-20.0 даже когда полтора десятка человек уезжают в дикие края.
Chunky vs WorldBorder fill: почему сейчас выбирают Chunky
Старая школа использовала команду /wb fill из плагина WorldBorder. Он работает, но писался под Bukkit 1.7-1.12 и тянет за собой проблемы: блокирует главный поток, плохо дружит с современным Paper, не поддерживает Folia. Plugin Pregen и Aurora из той же эпохи давно заброшены и не обновляются.
Chunky - современная замена. Поддерживает Paper, Purpur, Pufferfish, Folia 1.20-1.21, асинхронно загружает чанки, умеет паузиться, продолжаться после рестарта сервера, выбирать форму области и шаблон обхода. Активно обновляется, есть на Modrinth и SpigotMC, работает на всех версиях от 1.13 до 1.21.4.
В Paper 1.21+ появилась встроенная команда /paper chunkgen. Она рабочая, но беднее по функциям: нет паузы, нет сохранения прогресса, ограниченный контроль над паттернами. Для одноразовой задачи она годится, для серьёзного сервера всё ещё удобнее Chunky.
Установка Chunky на Paper, Purpur и Folia
Скачайте Chunky-X.X.X.jar с Modrinth или SpigotMC. Положите в папку plugins/ и перезагрузите сервер. Никаких зависимостей плагин не требует.
Проверьте загрузку:
[Server] [INFO] [Chunky] Enabling Chunky v1.4.x
[Server] [INFO] [Chunky] Loaded language file (en)
Если у вас Folia, скачайте отдельно ChunkyFolia с того же Modrinth - это форк с поддержкой региональных потоков Folia. Конфиг в plugins/Chunky/config.yml создастся при первом запуске.
Базовые команды Chunky
Минимальный набор, который покрывает 90% задач:
/chunky world world
/chunky radius 2000
/chunky start
Первой командой вы выбираете мир (по умолчанию world, но если вы переименовали - укажите имя из bukkit.yml). Второй - радиус в блоках от центра. Третьей запускаете задачу.
Управление в процессе:
/chunky pause
/chunky continue
/chunky cancel
/chunky quiet 30
pause останавливает задачу, continue возобновляет, cancel сбрасывает прогресс. quiet 30 уменьшает частоту лога прогресса до раз в 30 секунд - удобно, чтобы консоль не спамила.
Параметры формы и центра
По умолчанию Chunky генерирует квадратную область вокруг точки спавна. Если хотите кружок (естественнее для island worlds или small SMP):
/chunky shape circle
Сместить центр от 0,0:
/chunky center 1500 -800
Доступные формы: square, circle, oval, triangle, pentagon, hexagon, star. На практике 99% серверов используют square или circle.
Шаблон обхода влияет на то, как Chunky идёт по карте:
/chunky pattern concentric
/chunky pattern loop
/chunky pattern region
concentric идёт от центра спиралью, loop - построчно, region - блоками 32x32 чанка (по одному .mca файлу за раз). На SSD разница невелика, на HDD region экономит seek-time.
Реальный расчёт: сколько чанков и времени нужно
Вот тут многие совершают ошибку и ставят радиус 5000 блоков. Считаем.
Радиус 5000 = квадрат 10000x10000 блоков. Чанк это 16x16 блоков, значит 625x625 чанков = примерно 390 тысяч чанков для квадрата. Это уже много, но не катастрофа.
Если радиус 5000 трактовать как «расстояние от центра до угла» в виде 10000x10000 блоков по площади - получим ~390к чанков. На современном CPU вроде Ryzen 7 5800X с NVMe это 3-5 часов чистого времени. Терпимо.
Но если кто-то поставил радиус 10000 - получаем 1.56 млн чанков и 12-20 часов. А если 50000 (бывает и такое) - 39 миллионов и неделя непрерывной работы.
Реалистичные цифры для типичного SMP:
- Радиус 1000 (2000x2000 блоков) = ~15 тыс чанков, 5-15 минут
- Радиус 2000 (4000x4000 блоков) = ~62 тыс чанков, 20-40 минут
- Радиус 3000 (6000x6000 блоков) = ~140 тыс чанков, 1-2 часа
- Радиус 5000 (10000x10000 блоков) = ~390 тыс чанков, 3-6 часов
Размеры зависят от CPU и диска. На медленном VPS с 2 ядрами умножайте в 3-5 раз.
Размер мира на диске после прегена
Многих пугает мысль, что прегенерированный мир займёт сотни гигабайт. На практике 1 чанк весит около 30-90 КБ в .mca файле в зависимости от глубины генерации (новые миры с trial chambers и end city тяжелее).
Грубая оценка:
- Радиус 2000 = ~62к чанков = 3-6 ГБ на диске
- Радиус 5000 = ~390к чанков = 15-30 ГБ
- Радиус 10000 = ~1.56М чанков = 60-120 ГБ
Для SMP с радиусом 2000-3000 размер мира вряд ли превысит 10 ГБ. Это меньше, чем можно подумать, и сильно меньше тех 80 ГБ, в которые разрастается мир за пару лет паблика без прегена (потому что игроки разбредаются хаотично и создают тысячи изолированных регионов).
World Border: чтобы игроки не вышли за прегенированную область
Бессмысленно генерить 4000x4000 блоков, а потом давать игрокам уходить на 50000. Сразу после прегена ставьте ванильный border:
/worldborder center 0 0
/worldborder set 4000
/worldborder warning distance 100
Радиус 4000 у Chunky соответствует диаметру 4000 у /worldborder (border меряет диаметр квадрата, Chunky - радиус). То есть Chunky radius 2000 = /worldborder set 4000. Это типичная путаница, проверяйте дважды.
Border делает три полезные вещи: останавливает игроков на границе, не даёт неизведанным чанкам генериться через elytra-полёт, рисует красную стену на клиенте.
Параллельные миры: nether и the_end
Незер компактнее в восемь раз. Координаты в незере = координаты в overworld делёные на 8. То есть для overworld радиуса 2000 хватает незера с радиусом 250-300:
/chunky world world_nether
/chunky radius 300
/chunky start
End по дефолту это маленький центральный остров плюс далёкие external islands. Для большинства серверов хватит:
/chunky world world_the_end
/chunky radius 1000
/chunky start
Учтите: external islands в End начинаются с координаты ~1000 от центра, и игроки будут туда летать. Если хотите готовое - ставьте 2000-3000 и закладывайте время.
Производительность во время прегена: TPS упадёт
Это нормально. Chunky грузит главный поток (потому что vanilla generator не thread-safe полностью), и во время задачи TPS просядет до 14-18. Игроки будут чувствовать рывки.
Два варианта стратегии:
Вариант 1: ночной прегенer. Останавливаете сервер от игроков (whitelist on), запускаете Chunky на ночь, утром снимаете whitelist. Самый чистый путь.
Вариант 2: фоновая генерация. Если whitelist неприемлем, используйте /chunky tasks 1 чтобы заставить плагин использовать только один поток вместо нескольких. TPS будет держаться около 18-19, но прегенерация займёт в 2-3 раза дольше.
/chunky tasks 1
/chunky start
Изменить число потоков по дефолту можно в plugins/Chunky/config.yml:
generation:
parallel-tasks-multiplier: 0.25
default-quiet-interval: 60
0.25 означает «использовать четверть доступных ядер». На 8-ядерном сервере это 2 потока.
Chunky и Aikar's flags
Если у вас Paper с Aikar's flags (G1GC, ParallelGCThreads, MaxGCPauseMillis и компания), Chunky отлично с ними дружит. Никаких конфликтов. Единственное - убедитесь, что хип не маленький: для прегена 2000+ радиуса хочется минимум -Xms6G -Xmx6G, иначе G1GC будет слишком часто триггериться при заполнении нового хипа чанков.
FAQ
Сколько RAM нужно для прегена?
Хватит того, что у вас уже выделено. Chunky обрабатывает регионы потоково, не держит весь мир в памяти. Но для радиуса 3000+ имеет смысл выделить минимум 4-6 ГБ heap, чтобы GC не тормозил процесс.
Можно ли прегенерить с игроками онлайн?
Можно, но TPS просядет до 14-17. Если игроки готовы потерпеть пару рывков, ставьте /chunky tasks 1 и продолжайте. Чистый вариант - выгнать всех на ночь и запустить с whitelist.
Нужно ли прегенерить заново после обновления Minecraft?
Нет. Старые чанки остаются как есть, они продолжают работать в новой версии. Минус: новые биомы и структуры из обновления не появятся в уже сгенерированных регионах. Если в 1.22 добавят новый биом, он будет только в новых чанках за пределами вашей прегенерированной зоны.
Что делать, если Chunky сломал мир?
Chunky не повреждает мир. Но обязательно делайте бэкап перед стартом: остановите сервер, скопируйте папку world/, world_nether/, world_the_end/. Если что-то пойдёт не так (диск кончился, питание выключили, плагин упал) - просто восстановите из бэкапа и запускайте снова.
Chunky vs встроенный /paper chunkgen?
/paper chunkgen появился в Paper 1.21 и работает, но без паузы, без выбора формы и шаблона, без сохранения прогресса при рестарте. Для одноразовой генерации маленькой области сойдёт. Для всего остального удобнее Chunky.
Прегенерация спасёт от лагов на работающем сервере?
Чанк-лаги - да, полностью. Лаги от мобфермы, redstone-машин, плохо написанных плагинов или сетевые лаги при DDoS-атаке - нет, прегенерация на это не влияет. Чтобы закрыть сетевые лаги, понадобится защита трафика отдельно.
Можно ли запускать Chunky на нескольких мирах одновременно?
Технически да: команды /chunky world и /chunky start ставят задачи в очередь. Но рекомендую генерить миры по очереди - меньше нагрузки, легче контролировать прогресс.
Что дальше
Если этот гайд помог вам убрать чанк-лаги, проверьте ещё пару моментов. Поставьте границу мира на 200-500 блоков меньше, чем прегенированная область - игроки не должны попадать на свежие чанки случайно через elytra. Заведите крон на ночной прегенeration, если у вас seasonal-сервер с регулярными ресетами карты. И не забудьте, что прегенерация решает проблему генерации, но не отменяет необходимости защиты от сетевых атак: если вашу карту положат DDoS-ом, никакой .mca файл не поможет.
Proteja Seu Servidor de Ataques DDoS
Proteção gratuita com configuração em 5 minutos. 1 TB de tráfego incluso.
Experimentar GrátisArtigos Relacionados
Bot-join атаки на Minecraft 2026: как отличить бота от игрока
Подробный разбор bot-join атак на Minecraft серверы в 2026 году. Как выглядят подключения ботов в логах, какие признаки использует фильтр для детекции, и какие защитные меры реально работают.
Bedrock сервер Minecraft: полное руководство по настройке в 2026
Пошаговое руководство по запуску Bedrock-сервера Minecraft. Установка BDS, настройка GeyserMC для кроссплея Java+Bedrock, оптимизация производительности и защита от DDoS.
OneBlock SMP сервер Minecraft: полный гайд по настройке режима «один блок»
Поднимаем OneBlock SMP на Paper 1.21 с BentoBox: установка, фазы, кастомизация YAML, команды, SMP-составляющая, бэкап и сезоны.