
Maze Generator
Плагин для Paper, который генерирует огромные случайные лабиринты с настраиваемыми темами. Работает без лагов даже на слабых серверах.
Maze Generator - это плагин для Minecraft Paper, который позволяет создавать масштабные, случайные и полностью настраиваемые лабиринты прямо на вашем сервере. Никаких зависаний, никаких просадок TPS - генерация идет инкрементально, а блоки ставятся постепенно, в пределах заданного бюджета времени на тик. Подходит как для маленьких серверов на слабом железе, так и для огромных проектов с кучей игроков.
Особенности
- Поточная генерация и установка - никаких гигантских очередей в памяти.
- Загрузка чанков по требованию - плагин никогда не прелоадит лишнего.
- Автоматическая подстройка времени на тик - защищает TPS от просадок.
- Группировка установки по чанкам - уменьшает накладные расходы.
- Взвешенные темы материалов для пола, стен и верха (файл
themes.yml). - Опции полых стен и закрытых крыш.
- Tab-complete для аргументов, плюс команды
/maze help,/maze stop,/maze reload.
Установка
- Скачайте или соберите JAR-файл плагина.
- Кинуть JAR в папку
plugins/вашего сервера. - Запустите сервер один раз - создадутся конфиги и файлы данных.
Создаваемые файлы:
plugins/MazeGenerator/config.yml- настройки производительности и поведения.plugins/MazeGenerator/themes.yml- веса материалов для каждой темы.plugins/MazeGenerator/messages.yml- сообщения для игроков.
Используйте /maze reload после изменения этих файлов, либо перезагрузите сервер.
Команды
/maze- запускает построение лабиринта с разумными настройками рядом с вами./maze stop- останавливает все активные построения./maze help- выводит справку и описание аргументов./maze reload- перезагружаетconfig.yml,themes.ymlиmessages.yml.
Права (permissions):
mazegenerator.maze- использование/mazeи просмотр статуса.mazegenerator.reload- использование/maze reload.
Аргументы (ключ:значение)
Порядок не важен; tab-complete подсказывает ключи и многие значения.
x,y,z- координаты мира (по умолчанию ваша позиция).world- название мира (по умолчанию ваш мир).mazeSizeX,mazeSizeZ- размер лабиринта в ячейках (нечетное число).cellSize- ширина и длина одной ячейки в блоках.wallHeight- высота стен (без верхнего слоя).hasExits-true|false- гарантировать хотя бы один выход на границе.additionalExits- дополнительные выходы сверх первого (0..N).hasRoom-true|false- вырезать центральную прямоугольную комнату.roomSizeX,roomSizeZ- размеры центральной комнаты в ячейках.erosion- 0..1 - случайные маленькие дыры в соседних стенах при резке.closed-true|false- крыша над коридорами (иначе они открыты небу).hollow-true|false- стены в виде оболочки (только края) для экономии блоков.themeName- ключ темы изthemes.yml(tab-complete показывает доступные темы).
Примеры:
/maze mazeSizeX:51 mazeSizeZ:51 cellSize:2 wallHeight:4 hasExits:true additionalExits:1 themeName:forest/maze world:world_nether x:100 y:80 z:-200 mazeSizeX:41 mazeSizeZ:41 themeName:snowy/maze mazeSizeX:75 mazeSizeZ:75 cellSize:3 wallHeight:5 hasExits:true hollow:true closed:false themeName:desert
Конфигурация (config.yml)
Настройки по умолчанию уже подобраны так, чтобы сохранять TPS на большинстве серверов. Ключевые параметры:
millis-per-tick(по умолчанию 3) - базовый бюджет времени на тик. Автоподстройка меняет его в пределах границ.jobs-batch-cells(по умолчанию 64) - сколько ячеек планировщик пытается собрать за раз. Больше - меньше накладных расходов, но возможны всплески.cells-per-job(по умолчанию 16) - сколько ячеек упаковывается в одну задачу для конкретного чанка. Больше - меньше накладных расходов и повторных загрузок чанков.set-block-data(по умолчанию false) - прикреплять CustomBlockData к блокам. Для большинства лабиринтов лучше оставить false (экономит I/O и память).defer-wall-fill(по умолчанию false) - порядок построения:true: сначала вырезаются проходы (коридоры появляются быстро), потом заполняются стены. Обычно меньше записей всего.false: сначала стены, потом проходы - сначала выглядит как монолит, потом появляются пути.
autotune:(включено по умолчанию)min-millis-per-tick,max-millis-per-tick- границы бюджета времени на тик.increase-step,decrease-step- скорость изменения бюджета.spare-high,spare-low- пороги на основе оставшегося времени в текущем 50 мс тике.
status-interval-jobs(по умолчанию 1000) - как часто выводить прогресс в чат (примерно каждые N задач).
Важно: плагин загружает чанки только в момент установки блоков. Никакого прелоада или фоновых бюджетов для чанков нет.
Пример: Плавный (минимальное влияние на TPS)
millis-per-tick: 2
jobs-batch-cells: 32
cells-per-job: 8
set-block-data: false
autotune:
enabled: true
min-millis-per-tick: 1
max-millis-per-tick: 4
increase-step: 1
decrease-step: 2
spare-high: 18
spare-low: 12
defer-wall-fill: true
status-interval-jobs: 500
Пример: Сбалансированный (как по умолчанию)
millis-per-tick: 3
jobs-batch-cells: 64
cells-per-job: 16
set-block-data: false
autotune:
enabled: true
min-millis-per-tick: 1
max-millis-per-tick: 8
increase-step: 1
decrease-step: 2
spare-high: 18
spare-low: 12
defer-wall-fill: false
status-interval-jobs: 1000
Пример: Быстрый (допускает небольшие скачки нагрузки)
millis-per-tick: 5
jobs-batch-cells: 128
cells-per-job: 32
set-block-data: false
autotune:
enabled: true
min-millis-per-tick: 2
max-millis-per-tick: 10
increase-step: 1
decrease-step: 1
spare-high: 20
spare-low: 10
defer-wall-fill: true
status-interval-jobs: 750
Темы (themes.yml)
Темы управляют взвешенным выбором материала для трех частей: floor (пол), wall (стена) и top (верх).
Пример:
desert:
floor:
SANDSTONE: 20
RED_SANDSTONE: 10
wall:
SAND: 40
CHISELED_SANDSTONE: 20
top:
SANDSTONE: 3
forest:
floor:
GRASS_BLOCK: 20
DIRT: 2
wall:
OAK_LOG: 30
OAK_LEAVES: 25
top:
OAK_LOG: 3
Веса - целые положительные числа. Чем больше вес, тем вероятнее материал. Если секция пуста, используется STONE.
Советы:
- Используйте больше разнообразия в
wallиtop, чтобы лабиринт выглядел естественнее. - Для
topлучше брать более легкие материалы - красивые силуэты.
Сообщения (messages.yml)
plugin-prefix,job-started,job-status,job-done,job-stopped,command-error,no-permission,config-reloaded.- Цветовые коды через
&- поддерживаются.
Как работает автоподстройка (быстро)
- Плагин измеряет свободное время внутри текущего 50 мс тика (на основе события start tick).
- Если свободного времени много (
spare >= spare-high), бюджет на тик увеличивается наincrease-stepвплоть доmax-millis-per-tick. - Если тик загружен (
spare < spare-low), бюджет уменьшается наdecrease-stepдоmin-millis-per-tick. - Строитель размещает блоки только пока
now + currentMillisPerTickне превышено.
Советы по производительности
- Используйте
hollow: trueи большойcellSize, чтобы радикально сократить количество блоков. - Увеличьте
cells-per-jobиjobs-batch-cellsдля снижения накладных расходов планировщика. - Держите
set-block-data: false, если не критично. - Включайте
defer-wall-fill: trueдля быстрого появления видимого лабиринта и меньшего числа записей.
Устранение проблем
- Лабиринт кажется зависшим:
- Обновления в чате приходят периодически. Уменьшите
status-interval-jobsдля более частой обратной связи. - Проверьте консоль на ошибки. Если чанки очень далеко, каждая задача загружает их по требованию - это может быть медленно, но не должно зависать.
- Обновления в чате приходят периодически. Уменьшите
- Просадки TPS во время построения:
- Понизьте
millis-per-tick,jobs-batch-cellsилиcells-per-job. - Оставьте
autotune.enabled: true, чтобы бюджет автоматически снижался.
- Понизьте
- Темы выглядят однообразно:
- Добавьте больше материалов и весов в
wallиtop.
- Добавьте больше материалов и весов в
В общем, Maze Generator - отличный инструмент для админов, которые хотят добавить на сервер случайные лабиринты без риска положить его. Настраивай размеры, темы, строй прямо в Незере или Энде - всё в твоих руках. Скачать плагин Maze Generator можно сразу на сервер, просто кинув JAR в plugins.
