Перейти к основному содержимому

Конфигурация CannonRTP

CannonRTP разделяет свои глобальные настройки между несколькими файлами в plugins/CannonRTP/, плюс по одному файлу конфигурации на каждую пушку в plugins/CannonRTP/cannons/.

Структура файлов

ФайлНазначение
plugins/CannonRTP/config.ymlФлаги времени выполнения верхнего уровня (состояние установки, язык, интервал частиц, приоритет моделей пушек, id ресурса на Spigot)
plugins/CannonRTP/landing.ymlНастройки поиска приземления (размер очереди, попытки таймаута, длительность замедленного падения, списки небезопасных материалов, поведение при отказе)
plugins/CannonRTP/sounds.ymlЗвуки, проигрываемые во время последовательности запуска
plugins/CannonRTP/messages.ymlВсе сообщения, префиксы и пулы тайтлов, видимые игрокам
plugins/CannonRTP/protection.ymlПереключатели интеграции с каждым плагином защиты
plugins/CannonRTP/cannons/<id>.ymlОдин файл на пушку (каждая может управлять несколькими размещениями)
plugins/CannonRTP/cannons_disabled/Папка для хранения конфигов пушек, которые поставляются с пакетами контента, но в данный момент отключены. Меню /wc setup перемещает файлы между cannons/ и cannons_disabled/ при включении или отключении пакета контента.
plugins/CannonRTP/content_packages/<package>.ymlСгенерированные метаданные для каждого пакета контента Nightbreak (версия, ссылка для загрузки, префиксы, используемые для поиска его файлов). Обычно не редактируются вручную.

Плагин из коробки поставляется с тремя примерами конфигов пушек:

  • example_cannonrtp.yml — пустой эталонный шаблон, по умолчанию отключён. Используйте его как справочник по YAML при написании конфигов пушек вручную.
  • cannonrtp_free_cannon.yml — включён, без размещений, указывает на бесплатную FMM-модель cannonrtp.
  • cannonrtp_premium_cannon.yml — включён, без размещений, указывает на премиум FMM-модель cannonrtp_premium.

Ни в одном из них по умолчанию не заполнено поле cannonLocations, поэтому в мире ничего не появится, пока администратор не выполнит /wc create или /wc place.

config.yml

КлючПо умолчаниюПоведение
setupDonefalseОтслеживает, была ли завершена первоначальная настройка Nightbreak
languageenglishФайл переводов для загрузки. Релиз 1 поставляется только на английском; ключ существует для будущих языковых пакетов
runtime.particleIntervalTicks15Как часто отрисовываются частицы покоящейся пушки (минимум 5)
runtime.cannonModelPriority[cannonrtp_premium, cannonrtp]Список приоритетов имён моделей FreeMinecraftModels, проверяемый сверху вниз. Первая найденная на сервере модель используется для любой пушки, у которой не задан собственный customModel. Если ни одна не найдена, используется запасной вариант с орбитальными частицами.
runtime.spigotResourceId""Id ресурса на Spigot, используемый проверкой версий. Оставьте пустым, чтобы отключить.

landing.yml

КлючПо умолчаниюПоведение
preloadedLocationsPerCannon10Общее число безопасных точек назначения, которые плагин пытается держать в очереди для каждой пушки (минимум 1)
chargedLocationsPerCannon1Сколько точек должна содержать пушка, прежде чем её метка статуса переключится на Ready (минимум 1, ограничено preloadedLocationsPerCannon). Пушки будут запускать игроков, как только в очереди появится хотя бы одна точка — этот порог влияет только на визуальную метку.
searchTimeoutAttempts100Сколько неудачных попыток поиска прежде, чем пушка будет помечена как Exhausted (минимум 10). Попытки поиска глобально ограничены одной в тик (20 в секунду), справедливо разделяемой между всеми активными пушками.
slowFallingSeconds60Максимальная длительность эффекта Замедленного падения после высадки (минимум 1). Эффект снимается раньше, когда игрок приземляется.
failOpenOnProtectionErrorsfalseЕсли API плагина защиты выдаёт ошибку, по умолчанию блокировать приземление. Установите true, чтобы разрешать приземления, когда плагин защиты не может быть безопасно опрошен.
unsafeGroundMaterials[LAVA, MAGMA_BLOCK, CAMPFIRE, SOUL_CAMPFIRE, CACTUS, POWDER_SNOW]Материалы, делающие поверхность приземления недопустимой
unsafeBodyMaterials[LAVA, WATER, FIRE, SOUL_FIRE, SWEET_BERRY_BUSH, POWDER_SNOW, COBWEB]Материалы, делающие пространство ног или головы при приземлении недопустимым

Материалы — это имена из enum Bukkit Material. Некорректные записи логируются как предупреждения и пропускаются.

sounds.yml

КлючПо умолчаниюПоведение
levitationStart.soundBLOCK_BEACON_ACTIVATEЗвук, проигрываемый при начале фазы поиска
levitationStart.volume1.0
levitationStart.pitch1.15
blastOff.soundENTITY_GENERIC_EXPLODEЗвук, проигрываемый в начале фазы выстрела
blastOff.volume1.0
blastOff.pitch0.9

Значения звуков могут быть именами из enum Bukkit Sound (например, BLOCK_BEACON_ACTIVATE) или ключами с пространством имён (например, minecraft:block.beacon.activate). Неверные имена звуков логируются как предупреждения, и звук молча пропускается на этом шаге.

messages.yml

Все сообщения поддерживают градиенты MagmaCore, теги MiniMessage и устаревшие цветовые коды &. Плейсхолдер $prefix заменяется на настроенный префикс.

Полный список ключей сообщений, плейсхолдеров и пулов тайтлов, используемых в последовательности запуска, см. на странице Сообщения и тайтлы.

Поля конфигурации пушки

Каждый файл пушки (plugins/CannonRTP/cannons/<id>.yml) хранит эти поля:

ПолеПо умолчаниюПримечания
isEnabledtrue (для новых пушек)Отключённые пушки не срабатывают и отображаются как Disabled
displayNameCannonRTP (или имя, переданное при создании)Используется в сообщениях, выводе статуса и плавающей метке
cannonLocationsпустой списокСписок сериализованных строк world,x,y,z,pitch,yaw. Одна конфигурация пушки может породить много размещений в мире. Управляется через /wc create, /wc place, /wc remove.
targetWorldтекущий мир на момент созданияПоддерживается межмировое нацеливание — установите это поле, чтобы приземлять игроков в мире, отличном от того, где находится пушка. Должен быть загружен во время выполнения, иначе пушка отображается как Invalid.
searchCenternullЕсли не задано, плагин ведёт поиск от собственной позиции пушки (когда пушка находится в целевом мире) или от точки спавна целевого мира
triggerRadius1.75Радиус вокруг пушки, используемый для обнаружения близлежащих игроков (минимум 0,5 блока)
minSearchRadius500Минимальная дистанция поиска приземления от центра поиска (минимум 0)
maxSearchRadius5000Максимальная дистанция поиска приземления (всегда ограничена снизу значением minSearchRadius + 1)
launchWarmupTicks42Длительность фазы Searching в тиках (минимум 1)
verticalBoostTicks45Длительность фазы Firing в тиках (минимум 0)
verticalBoostVelocity1.35Восходящая скорость, применяемая каждый тик фазы выстрела (минимум 0)
enableParticlestrueУправляет покоящейся орбитальной анимацией частиц. Отрисовывается только при отсутствии активной пользовательской модели и при наличии игрока в радиусе 36 блоков.
requiredPermission""Опциональный дополнительный гейт прав для конкретной пушки. Игроки с cannonrtp.use, но без этого права, видят настроенное сообщение об отказе в правах.
customModel""Опциональное имя модели FreeMinecraftModels для конкретной пушки. Если пусто, плагин использует runtime.cannonModelPriority.

Значения по умолчанию при создании пушки

При выполнении /wc create <id>:

  • id пушки переводится в нижний регистр, а символы, отличные от a-z, 0-9, _, -, заменяются на _
  • displayName устанавливается в CannonRTP, если не использовалось /wc create <id> <display_name> (подчёркивания в <display_name> преобразуются в пробелы)
  • текущая позиция игрока добавляется в cannonLocations
  • targetWorld устанавливается в текущий мир игрока
  • searchCenter не задаётся (использует собственную позицию пушки, если она находится в целевом мире, иначе точку спавна целевого мира)

После создания плагин отвечает абсолютным путём к файлу конфигурации, чтобы вы могли вручную отредактировать displayName, customModel, requiredPermission, радиусы поиска и параметры запуска.

Интеграция с FreeMinecraftModels

Когда пушка разрешается в корректную модель FreeMinecraftModels — либо через собственное поле customModel, либо через глобальный список runtime.cannonModelPriority — и FreeMinecraftModels установлен:

  • в позиции пушки создаётся статичная сущность модели
  • плавающая текстовая метка поднимается на 2,0 блока над пушкой (против 1,2 без модели), чтобы не пересекаться с моделью
  • покоящаяся анимация орбитальных частиц подавляется, пока модель активна
  • во время запуска пушка проигрывает свою анимацию fire (если она существует) в начале фазы поиска; игрок скрывается Невидимостью во время фазы поиска, чтобы анимация читалась чётко

Если FreeMinecraftModels включается или отключается во время работы сервера, кэш моделей пушек инвалидируется, и визуальные эффекты обновляются в следующий тик.

Запасной вариант с частицами при простое

Когда модель не активна, пушка отрисовывает пару орбитирующих частиц DUST_COLOR_TRANSITION + FIREWORK вокруг центра пушки. Цвета меняются в зависимости от эффективного состояния пушки:

СостояниеОсновнойАкцент
Readyоранжевыйзолотой
Searching (заряжается / поддерживает)тёплый оранжевыйзолотой
Exhaustedкрасныйтёплый красный
Invalid configurationтёмно-красныйкрасный

Покоящиеся частицы отрисовываются только когда игрок находится в радиусе 36 блоков от пушки.

Плавающая метка статуса

Каждая пушка создаёт билбордовый TextDisplay над своим основанием, показывающий отображаемое имя и текущий статус (Ready, Charging, Maintaining, Exhausted, Disabled или Invalid). Метка не сохраняется в данные чанка и автоматически воссоздаётся при перезагрузке чанка.

Поведение проверки во время выполнения

CannonRTP отвергает кандидаты на точки приземления, когда не проходит любая из этих проверок:

  • целевой мир выгружен
  • центр поиска некорректен
  • случайная выборка попала за границу мира
  • чанк-кандидат не удалось загрузить
  • не найдена безопасная твёрдая нежидкая поверхность
  • пространство для ног или головы заблокировано
  • рельеф или блоки тела совпадают с настроенными списками небезопасных материалов
  • интеграция с защитой блокирует приземление
  • слушатель CannonRTPLocationValidationEvent отклоняет кандидата

Если пушка израсходует searchTimeoutAttempts (по умолчанию 100), так и не заполнив резерв, она становится Exhausted и начинает возвращать настроенное сообщение о неудаче вместо запуска игроков. Сообщение о неудаче включает сводку наиболее частых причин отклонения. Пушка сбрасывает счётчик таймаута всякий раз, когда освобождается слот в очереди (например, после запуска).

Защита взаимодействия

CannonRTP предотвращает срабатывание пушки для игрока, который уже находится в активной последовательности запуска. Как только текущий запуск завершается (приземление или отключение), игрок снова может пользоваться пушкой. Дополнительного таймера задержки нет.