Конфигурация CannonRTP
CannonRTP разделяет свои глобальные настройки между несколькими файлами в plugins/CannonRTP/, плюс по одному файлу конфигурации на каждую пушку в plugins/CannonRTP/cannons/.
Структура файлов
| Файл | Назначение |
|---|---|
plugins/CannonRTP/config.yml | Флаги времени выполнения верхнего уровня (состояние установки, язык, интервал частиц, задержка запуска, приоритет моделей пушек, id ресурса на Spigot, настройки обновлений Nightbreak) |
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 (версия, ссылка для загрузки, префиксы, используемые для поиска его файлов). Обычно не редактируются вручную. |
plugins/CannonRTP/imports/ | Папка для ручного импорта контента. См. Пакеты контента. |
plugins/CannonRTP/nightbreak-changelogs.yml | Состояние прочтения для общего списка /wcchangelog. См. Уведомления об изменениях. |
Плагин из коробки поставляется с тремя примерами конфигов пушек:
example_cannonrtp.yml— пустой эталонный шаблон (отображаемое имяExample World Cannon), по умолчанию отключён. Используйте его как справочник по YAML при написании конфигов пушек вручную.cannonrtp_free_cannon.yml— включён, без размещений, указывает на бесплатную FMM-модельcannonrtp.cannonrtp_premium_cannon.yml— включён, без размещений, указывает на премиум FMM-модельcannonrtp_premium.
Ни в одном из них по умолчанию не заполнено поле cannonLocations, поэтому в мире ничего не появится, пока администратор не выполнит /wc create или /wc place. Ни в одном из них не задан targetWorld, поэтому каждое размещение приземляет игроков в том мире, где оно стоит.
CannonRTP заново создаёт любой из этих трёх файлов, если он отсутствует в cannons/, при каждой загрузке конфигов пушек. Если удалить такой файл через /wc delete или он будет перемещён при отключении его пакета контента, после перезагрузки появится свежая копия по умолчанию без размещений.
config.yml
| Ключ | По умолчанию | Поведение |
|---|---|---|
setupDone | false | Отслеживает, была ли завершена первоначальная настройка Nightbreak |
language | english | Файл переводов для загрузки. Релиз 1 поставляется только на английском; ключ существует для будущих языковых пакетов |
runtime.particleIntervalTicks | 15 | Точный интервал между отрисовками частиц покоящейся пушки, в тиках сервера (минимум 1; задайте 1, чтобы отрисовывать каждый тик) |
runtime.launchCooldownSeconds | 30 | Сколько секунд игрок должен ждать между принятыми запусками из пушки (минимум 0; задайте 0, чтобы отключить). Отменённые события CannonRTPLaunchEvent задержку не запускают. |
runtime.cannonModelPriority | [cannonrtp_premium, cannonrtp] | Список приоритетов имён моделей FreeMinecraftModels, проверяемый сверху вниз. Первая найденная на сервере модель используется для любой пушки, у которой не задан собственный customModel. Если ни одна не найдена, используется запасной вариант с орбитальными частицами. |
runtime.spigotResourceId | "" | Id ресурса на Spigot, используемый проверкой версий. Оставьте пустым, чтобы отключить. |
nightbreak.autoDownloadPluginUpdates | false | Добавлено встроенной (shaded) библиотекой MagmaCore. Когда true, CannonRTP автоматически загружает доступные файлы обновлений плагина и контента через несколько минут после запуска. Обновления контента применяются после следующего перезапуска сервера; обновление плагина следует настройке nightbreak.applyPluginUpdatesWithoutRestart. Автоматическая загрузка плагина требует действительного токена аккаунта Nightbreak и активного членства покровителя. Оставьте false, чтобы вместо этого использовать игровую кнопку обновления. |
nightbreak.applyPluginUpdatesWithoutRestart | never | Добавлено встроенной (shaded) библиотекой MagmaCore. Определяет, когда загруженное обновление плагина применяется путём перезагрузки CannonRTP из нового jar-файла. never ждёт следующего перезапуска. when-empty применяет его сразу, если на сервере нет игроков, иначе проверяет каждые 30 секунд и применяет, как только сервер опустеет. immediately применяет его сразу по завершении загрузки. Любое другое значение считается never. Перезагрузка отменяет активные запуски, как описано в разделе Защита взаимодействия. /wc applypluginupdate применяет загруженное обновление вручную независимо от этой настройки. |
landing.yml
| Ключ | По умолчанию | Поведение |
|---|---|---|
preloadedLocationsPerCannon | 10 | Общее число безопасных точек назначения, которые плагин пытается держать в очереди для каждой пушки (минимум 1) |
chargedLocationsPerCannon | 1 | Сколько точек должна содержать пушка, прежде чем её метка статуса переключится на Ready (минимум 1, ограничено preloadedLocationsPerCannon). Пушки будут запускать игроков, как только в очереди появится хотя бы одна точка — этот порог влияет только на визуальную метку. |
searchTimeoutAttempts | 100 | Сколько неудачных попыток поиска прежде, чем пушка будет помечена как Exhausted (минимум 10). Попытки поиска глобально ограничены одной в тик (20 в секунду), справедливо разделяемой между всеми активными пушками. |
slowFallingSeconds | 60 | Максимальная длительность эффекта Замедленного падения после высадки (минимум 1). Эффект снимается раньше, когда игрок приземляется. |
failOpenOnProtectionErrors | false | Если API плагина защиты выдаёт ошибку, по умолчанию блокировать приземление. Установите true, чтобы разрешать приземления, когда плагин защиты не может быть безопасно опрошен. При false включённая интеграция защиты, которая не загрузилась, также останавливает поиск у всех пушек (см. Интеграции с защитой). |
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). Имя в стиле enum преобразуется заменой каждого подчёркивания на точку, поэтому звук, ключ которого содержит подчёркивание, например minecraft:block.note_block.pling, нужно указывать ключом с пространством имён. Неверные имена звуков логируются как предупреждения, и звук молча пропускается на этом шаге. Оставьте звук пустым, чтобы ничего не проигрывать. Громкость и высота ниже 0 поднимаются до 0.
messages.yml
Все сообщения поддерживают градиенты MagmaCore, теги MiniMessage и устаревшие цветовые коды &. Плейсхолдер $prefix заменяется на настроенный префикс.
Полный список ключей сообщений, плейсхолдеров и пулов тайтлов, используемых в последовательности запуска, см. на странице Сообщения и тайтлы.
Поля конфигурации пушки
Каждый файл пушки (plugins/CannonRTP/cannons/<id>.yml) хранит эти поля:
| Поле | По умолчанию | Примечания |
|---|---|---|
isEnabled | true (для новых пушек) | Отключённые пушки не срабатывают, не создают метку и модель и отображаются как Disabled в /wc list и /wc status |
displayName | CannonRTP (или имя, переданное при создании) | Используется в сообщениях, выводе статуса и плавающей метке |
cannonLocations | пустой список | Список сериализованных строк world,x,y,z,yaw,pitch. Одна конфигурация пушки может породить много размещений в мире. Управляется через /wc create, /wc place, /wc remove. |
targetWorld | текущий мир на момент создания | Поддерживается межмировое нацеливание — установите это поле, чтобы приземлять игроков в мире, отличном от того, где находится пушка. Если поле пустое или отсутствует, каждое размещение приземляет игроков в своём собственном мире. Должен быть загружен во время выполнения; пока это не так, пушка прекращает предзагрузку, и в детализации /wc status отображается Target world <name> is not loaded. |
searchCenter | null | Если не задано, плагин ведёт поиск от собственной позиции пушки (когда пушка находится в целевом мире) или от точки спавна целевого мира. Если поле указывает на точку в другом мире, её координаты X и Z используются в целевом мире. |
triggerRadius | 1.75 | Радиус вокруг пушки, используемый для обнаружения близлежащих игроков (минимум 0,5 блока) |
minSearchRadius | 500 | Минимальная дистанция поиска приземления от центра поиска (минимум 0) |
maxSearchRadius | 5000 | Максимальная дистанция поиска приземления (всегда ограничена снизу значением minSearchRadius + 1) |
launchWarmupTicks | 42 | Длительность фазы Searching в тиках (минимум 1) |
verticalBoostTicks | 45 | Длительность фазы Firing в тиках (минимум 0). 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 включается или отключается во время работы сервера, кэш моделей пушек сбрасывается. Современные версии FMM также уведомляют CannonRTP о завершении перезагрузки контента: устаревшие ссылки удаляются, а модели создаются заново из обновлённого реестра. CannonRTP также напрямую обнаруживает удалённые экземпляры моделей, в том числе в FMM 2.4.0, где события завершения перезагрузки ещё нет. Пока FMM включён, ожидающее пересоздание повторяется каждые 20 тиков до появления доступной модели.
Запасной вариант с частицами при простое
Когда модель не активна, пушка отрисовывает пару орбитирующих частиц DUST_COLOR_TRANSITION + FIREWORK вокруг центра пушки. Цвета меняются в зависимости от эффективного состояния пушки:
| Состояние | Основной | Акцент |
|---|---|---|
| Ready | оранжевый (255, 179, 71) | бледно-золотой (255, 241, 168) |
| Searching (заряжается / поддерживает) | тёплый оранжевый (255, 140, 66) | золотой (255, 209, 102) |
| Exhausted | красный (255, 107, 107) | тёплый оранжевый (255, 159, 104) |
Покоящиеся частицы отрисовываются только когда игрок находится в радиусе 36 блоков от пушки, enableParticles имеет значение true и не активна пользовательская модель.
Плавающая метка статуса
Каждая включённая пушка создаёт билбордовый TextDisplay над своим основанием, показывающий отображаемое имя и текущий статус (Ready, Charging, Maintaining или Exhausted). Отключённые пушки метку не создают. Метка не сохраняется в данные чанка и автоматически воссоздаётся при перезагрузке чанка. Она находится в 1,2 блока над пушкой или в 2,0 блока, когда активна модель FreeMinecraftModels.
Поведение проверки во время выполнения
CannonRTP отвергает кандидаты на точки приземления, когда не проходит любая из этих проверок:
- целевой мир выгружен
- центр поиска не удаётся определить (это происходит только тогда, когда целевой мир выгружен)
- случайная выборка попала за границу мира
- чанк-кандидат не удалось загрузить
- не найдена безопасная твёрдая нежидкая поверхность
- любой блок 52-блочной колонки высадки над точкой приземления заблокирован
- поверхность или любой блок колонки совпадает с настроенными списками небезопасных материалов
- интеграция с защитой блокирует приземление
- слушатель
CannonRTPLocationValidationEventотклоняет кандидата
После searchTimeoutAttempts неудачных поисков (по умолчанию 100) предзагрузка может перейти в Exhausted. Уже имеющиеся в очереди точки остаются доступны. Сообщение об ошибке с частыми причинами отказа появляется только при активации с пустой очередью. Освобождение места после запуска сбрасывает счётчик.
Перед использованием сгенерируйте или исследуйте настроенную область поиска в целевом мире. CannonRTP загружает существующие чанки без генерации местности; неисследованный радиус может не дать ни одной точки назначения.
Защита взаимодействия
CannonRTP не позволяет игроку активировать пушку, пока он уже находится в активной последовательности запуска. Это срабатывание остаётся заблокированным до тех пор, пока запуск не завершится и игрок действительно не покинет радиус срабатывания пушки, поэтому возврат к пушке не может немедленно начать новый запуск. После принятия запуска общая для менеджера персональная задержка также блокирует все пушки на runtime.launchCooldownSeconds (по умолчанию 30 секунд). Задержка переживает отключения игрока, пока сервер продолжает работать, использует монотонные часы и сбрасывается всякий раз, когда CannonRTP пересобирает свои пушки: при /wc reload, обновлении плагина без перезапуска, выключении плагина или любой команде редактирования пушек (create, place, remove, delete, target, center). Пересборка также отменяет активные запуски, возвращает этих игроков на место пушки и сбрасывает все точки назначения в очереди. Слишком ранний вход в пушку отправляет настраиваемое сообщение launchCooldown; задайте в конфигурации значение 0, чтобы отключить это ограничение.