Конфигурация 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
| Ключ | По умолчанию | Поведение |
|---|---|---|
setupDone | false | Отслеживает, была ли завершена первоначальная настройка Nightbreak |
language | english | Файл переводов для загрузки. Релиз 1 поставляется только на английском; ключ существует для будущих языковых пакетов |
runtime.particleIntervalTicks | 15 | Как часто отрисовываются частицы покоящейся пушки (минимум 5) |
runtime.cannonModelPriority | [cannonrtp_premium, cannonrtp] | Список приоритетов имён моделей FreeMinecraftModels, проверяемый сверху вниз. Первая найденная на сервере модель используется для любой пушки, у которой не задан собственный customModel. Если ни одна не найдена, используется запасной вариант с орбитальными частицами. |
runtime.spigotResourceId | "" | Id ресурса на Spigot, используемый проверкой версий. Оставьте пустым, чтобы отключить. |
landing.yml
| Ключ | По умолчанию | Поведение |
|---|---|---|
preloadedLocationsPerCannon | 10 | Общее число безопасных точек назначения, которые плагин пытается держать в очереди для каждой пушки (минимум 1) |
chargedLocationsPerCannon | 1 | Сколько точек должна содержать пушка, прежде чем её метка статуса переключится на Ready (минимум 1, ограничено preloadedLocationsPerCannon). Пушки будут запускать игроков, как только в очереди появится хотя бы одна точка — этот порог влияет только на визуальную метку. |
searchTimeoutAttempts | 100 | Сколько неудачных попыток поиска прежде, чем пушка будет помечена как Exhausted (минимум 10). Попытки поиска глобально ограничены одной в тик (20 в секунду), справедливо разделяемой между всеми активными пушками. |
slowFallingSeconds | 60 | Максимальная длительность эффекта Замедленного падения после высадки (минимум 1). Эффект снимается раньше, когда игрок приземляется. |
failOpenOnProtectionErrors | false | Если 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.sound | BLOCK_BEACON_ACTIVATE | Звук, проигрываемый при начале фазы поиска |
levitationStart.volume | 1.0 | |
levitationStart.pitch | 1.15 | |
blastOff.sound | ENTITY_GENERIC_EXPLODE | Звук, проигрываемый в начале фазы выстрела |
blastOff.volume | 1.0 | |
blastOff.pitch | 0.9 |
Значения звуков могут быть именами из enum Bukkit Sound (например, BLOCK_BEACON_ACTIVATE) или ключами с пространством имён (например, minecraft:block.beacon.activate). Неверные имена звуков логируются как предупреждения, и звук молча пропускается на этом шаге.
messages.yml
Все сообщения поддерживают градиенты MagmaCore, теги MiniMessage и устаревшие цветовые коды &. Плейсхолдер $prefix заменяется на настроенный префикс.
Полный список ключей сообщений, плейсхолдеров и пулов тайтлов, используемых в последовательности запуска, см. на странице Сообщения и тайтлы.
Поля конфигурации пушки
Каждый файл пушки (plugins/CannonRTP/cannons/<id>.yml) хранит эти поля:
| Поле | По умолчанию | Примечания |
|---|---|---|
isEnabled | true (для новых пушек) | Отключённые пушки не срабатывают и отображаются как Disabled |
displayName | CannonRTP (или имя, переданное при создании) | Используется в сообщениях, выводе статуса и плавающей метке |
cannonLocations | пустой список | Список сериализованных строк world,x,y,z,pitch,yaw. Одна конфигурация пушки может породить много размещений в мире. Управляется через /wc create, /wc place, /wc remove. |
targetWorld | текущий мир на момент создания | Поддерживается межмировое нацеливание — установите это поле, чтобы приземлять игроков в мире, отличном от того, где находится пушка. Должен быть загружен во время выполнения, иначе пушка отображается как Invalid. |
searchCenter | null | Если не задано, плагин ведёт поиск от собственной позиции пушки (когда пушка находится в целевом мире) или от точки спавна целевого мира |
triggerRadius | 1.75 | Радиус вокруг пушки, используемый для обнаружения близлежащих игроков (минимум 0,5 блока) |
minSearchRadius | 500 | Минимальная дистанция поиска приземления от центра поиска (минимум 0) |
maxSearchRadius | 5000 | Максимальная дистанция поиска приземления (всегда ограничена снизу значением minSearchRadius + 1) |
launchWarmupTicks | 42 | Длительность фазы Searching в тиках (минимум 1) |
verticalBoostTicks | 45 | Длительность фазы Firing в тиках (минимум 0) |
verticalBoostVelocity | 1.35 | Восходящая скорость, применяемая каждый тик фазы выстрела (минимум 0) |
enableParticles | true | Управляет покоящейся орбитальной анимацией частиц. Отрисовывается только при отсутствии активной пользовательской модели и при наличии игрока в радиусе 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 предотвращает срабатывание пушки для игрока, который уже находится в активной последовательности запуска. Как только текущий запуск завершается (приземление или отключение), игрок снова может пользоваться пушкой. Дополнительного таймера задержки нет.