Конфигурация 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 (версия, ссылка для загрузки, префиксы, используемые для поиска его файлов). Обычно не редактируются вручную. |
Плагин из коробки поставляется с тремя примерами конфигов пушек:
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.
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 и активного членства покровителя. Оставьте false, чтобы вместо этого использовать игровую кнопку обновления. |
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 | текущий мир на момент создания | Поддерживается межмировое нацеливание — установите это поле, чтобы приземлять игроков в мире, отличном от того, где находится пушка. Должен быть загружен во время выполнения; пока это не так, пушка прекращает предзагрузку, и в детализации /wc status отображается Target world <name> is not loaded. |
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 | оранжевый (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 или Disabled). Метка не сохраняется в данные чанка и автоматически воссоздаётся при перезагрузке чанка. Она находится в 1,2 блока над пушкой или в 2,0 блока, когда активна модель FreeMinecraftModels.
Поведение проверки во время выполнения
CannonRTP отвергает кандидаты на точки приземления, когда не проходит любая из этих проверок:
- целевой мир выгружен
- центр поиска не удаётся определить (это происходит только тогда, когда целевой мир выгружен)
- случайная выборка попала за границу мира
- чанк-кандидат не удалось загрузить
- не найдена безопасная твёрдая нежидкая поверхность
- любой блок 52-блочной колонки высадки над точкой приземления заблокирован
- поверхность или любой блок колонки совпадает с настроенными списками небезопасных материалов
- интеграция с защитой блокирует приземление
- слушатель
CannonRTPLocationValidationEventотклоняет кандидата
После searchTimeoutAttempts неудачных поисков (по умолчанию 100) предзагрузка может перейти в Exhausted. Уже имеющиеся в очереди точки остаются доступны. Сообщение об ошибке с частыми причинами отказа появляется только при активации с пустой очередью. Освобождение места после запуска сбрасывает счётчик.
Перед использованием сгенерируйте или исследуйте настроенную область поиска в целевом мире. CannonRTP загружает существующие чанки без генерации местности; неисследованный радиус может не дать ни одной точки назначения.
Защита взаимодействия
CannonRTP не позволяет игроку активировать пушку, пока он уже находится в активной последовательности запуска. Это срабатывание остаётся заблокированным до тех пор, пока запуск не завершится и игрок действительно не покинет радиус срабатывания пушки, поэтому возврат к пушке не может немедленно начать новый запуск. После принятия запуска общая для менеджера персональная задержка также блокирует все пушки на runtime.launchCooldownSeconds (по умолчанию 30 секунд). Задержка переживает отключения игрока, пока сервер продолжает работать, использует монотонные часы и сбрасывается командой /wc reload или выключением плагина. Слишком ранний вход в пушку отправляет настраиваемое сообщение launchCooldown; задайте в конфигурации значение 0, чтобы отключить это ограничение.