Конфигурация CannonRTP
CannonRTP использует один глобальный файл конфигурации плюс один файл конфигурации на каждую пушку.
Структура файлов
- Глобальная конфигурация:
plugins/CannonRTP/config.yml - Конфигурации пушек:
plugins/CannonRTP/cannons/<id>.yml
Плагин также включает пример пакета пушки под названием example_world_cannon. Он включён по умолчанию и размещается на спавне первого мира.
Структура глобальной конфигурации
Основная конфигурация организована под:
runtime.*landing.*messages.*protection.*
Настройки выполнения
| Ключ | По умолчанию | Поведение |
|---|---|---|
runtime.particleIntervalTicks | 15 | Как часто рендерятся частицы неактивной пушки (минимум 5) |
runtime.cannonModelPriority | [cannonrtp_premium, cannonrtp] | Приоритетный список имён моделей FreeMinecraftModels, проверяемых сверху вниз. Первая найденная на сервере модель используется для любой пушки, у которой не задан собственный customModel. Если ни одна не найдена, используются частицы. |
Настройки поиска посадки
| Ключ | По умолчанию | Поведение |
|---|---|---|
landing.searchAttemptsPerTick | 2 | Попытки поиска на пушку на тик при предзагрузке (минимум 1) |
landing.preloadedLocationsPerCannon | 10 | Общее количество безопасных назначений, которые плагин держит в очереди на пушку (минимум 1) |
landing.chargedLocationsPerCannon | 5 | Сколько точек должна иметь пушка для готовности к запуску (минимум 1, ограничено preloadedLocationsPerCannon) |
landing.searchTimeoutSeconds | 1000 | Время в секундах до отметки пушки как исчерпанной (минимум 10) |
landing.slowFallingSeconds | 60 | Длительность Медленного падения после прибытия (секунды); эффект снимается досрочно при посадке (минимум 1) |
landing.failOpenOnProtectionErrors | false | Если API защиты выдаёт ошибку, посадка блокируется по умолчанию |
Звуки посадки
Следующие ключи звуков настраиваемы:
landing.sounds.levitationStart.sound(по умолчанию:BLOCK_BEACON_ACTIVATE)landing.sounds.levitationStart.volume(по умолчанию:1.0)landing.sounds.levitationStart.pitch(по умолчанию:1.15)landing.sounds.blastOff.sound(по умолчанию:ENTITY_GENERIC_EXPLODE)landing.sounds.blastOff.volume(по умолчанию:1.0)landing.sounds.blastOff.pitch(по умолчанию:0.9)
Значения звуков используют реестровые имена Sound Bukkit или ключи с пространством имён. Некорректные имена звуков записываются как предупреждения, и звук молча пропускается.
Списки опасных материалов
CannonRTP отклоняет кандидатов на посадку на основе двух списков материалов:
landing.unsafeGroundMaterials-- блоки, на которых нельзя стоятьlanding.unsafeBodyMaterials-- блоки, которые не должны занимать пространство ног или головы
Опасные материалы пола по умолчанию:
LAVAMAGMA_BLOCKCAMPFIRESOUL_CAMPFIRECACTUSPOWDER_SNOW
Опасные материалы тела по умолчанию:
LAVAWATERFIRESOUL_FIRESWEET_BERRY_BUSHPOWDER_SNOWCOBWEB
Настройки сообщений
Все сообщения поддерживают градиенты MagmaCore, теги MiniMessage и устаревшие цветовые коды. Плейсхолдер $prefix заменяется настроенным значением префикса.
Плагин предоставляет следующие ключи сообщений:
| Ключ | Плейсхолдеры | Описание |
|---|---|---|
messages.prefix | -- | Префикс, используемый всеми сообщениями CannonRTP |
messages.helpHeader | $prefix | Заголовок, показываемый командой /cannonrtp |
messages.createdCannon | $prefix, $cannon, $id, $path | Отправляется после создания пушки |
messages.deletedCannon | $prefix, $cannon | Отправляется после удаления пушки |
messages.movedCannon | $prefix, $cannon | Отправляется после перемещения пушки |
messages.targetWorldUpdated | $prefix, $cannon, $world | Отправляется после изменения целевого мира пушки |
messages.searchCenterUpdated | $prefix, $cannon | Отправляется после изменения центра поиска пушки |
messages.reload | $prefix, $count | Отправляется после перезагрузки |
messages.noPermission | $prefix, $cannon | Отправляется, когда игрок видит пушку, но не может её использовать |
messages.cannonDisabled | $prefix, $cannon | Отправляется, когда игрок входит в отключённую пушку |
messages.queueCalibration | $prefix, $cannon, $queued, $target, $seconds | Отправляется, пока пушка ещё предзагружается |
messages.noValidLocationYet | $prefix, $cannon | Отправляется, когда безопасная точка ещё не найдена |
messages.noValidLocationFound | $prefix, $cannon, $reason | Отправляется, когда CannonRTP сдаётся после тайм-аута |
messages.invalidConfiguration | $prefix, $cannon, $reason | Отправляется при обнаружении ошибки конфигурации |
messages.statusLine | $prefix, $cannon, $status, $queued, $target, $reason | Формат строки, используемый /wc status и /wc list |
messages.probeAllowed | $prefix | Отправляется командой /wc probe, когда точка корректна |
messages.probeBlocked | $prefix, $plugin, $reason | Отправляется командой /wc probe, когда точка заблокирована |
messages.unknownCommand | $prefix | Отправляется, когда администратор использует неизвестную подкоманду |
Сообщения заголовков
| Ключ | Плейсхолдеры | Описание |
|---|---|---|
messages.titles.launchQueuedTitle | $cannon | Заголовок, показываемый при начале запуска |
messages.titles.launchQueuedSubtitle | $cannon | Подзаголовок, показываемый при начале запуска |
messages.titles.destinationPreviewTitle | $x, $y, $z | Заголовок, показываемый во время фазы поиска |
messages.titles.destinationPreviewSubtitle | $x, $y, $z | Подзаголовок, показываемый во время фазы поиска |
messages.titles.destinationConfirmedTitle | $x, $y, $z, $world | Заголовок, показываемый в начале фазы выстрела и снова после телепортации |
messages.titles.destinationConfirmedSubtitle | $x, $y, $z, $world | Подзаголовок, показываемый в начале фазы выстрела и снова после телепортации |
messages.titles.arrivalSubtitles | -- | Список заголовков; один выбирается случайно и показывается после того, как игрок опущен над местом назначения |
Предварительный просмотр координат во время фазы поиска не показывает реальное место назначения — он показывает случайные координаты в области поиска пушки как визуальный эффект. Истинное место назначения раскрывается только в подтверждённом заголовке в начале фазы выстрела.
Поля конфигурации пушки
Каждый файл пушки (plugins/CannonRTP/cannons/<id>.yml) содержит следующие поля:
| Поле | По умолчанию | Примечания |
|---|---|---|
isEnabled | true для новых пушек | Отключённые пушки не срабатывают |
displayName | CannonRTP (или имя, указанное при создании) | Используется в сообщениях, выводе статуса и плавающей метке |
cannonLocation | Обязательно | Где находится триггер пушки |
targetWorld | Текущий мир при создании | Должен быть загружен во время выполнения |
searchCenter | null (используется спавн целевого мира) | Если не задан, плагин использует спавн целевого мира |
triggerRadius | 1.75 | Радиус обнаружения ближайших игроков (минимум 0.5) |
minSearchRadius | 500 | Минимальное расстояние поиска посадки от центра поиска (минимум 0) |
maxSearchRadius | 5000 | Максимальное расстояние поиска посадки от центра поиска (всегда не менее minSearchRadius + 1) |
verticalBoostTicks | 45 | Тики вертикальной скорости перед телепортацией (минимум 0) |
verticalBoostVelocity | 1.35 | Вертикальная скорость при запуске (минимум 0) |
enableParticles | true | Управляет анимацией частиц неактивной пушки (используется только при отсутствии пользовательской модели) |
requiredPermission | пусто | Опциональный дополнительный гейт разрешения для конкретной пушки |
customModel | пусто | Опциональное имя модели FreeMinecraftModels для конкретной пушки. Если пусто, плагин использует runtime.cannonModelPriority |
Значения по умолчанию при создании пушки
При выполнении /wc create <id>:
- id пушки приводится к нижнему регистру, символы кроме
a-z,0-9,_и-заменяются на_ - отображаемое имя по умолчанию
CannonRTP, если не указано, или указанное имя с нижними подчёркиваниями, преобразованными в пробелы cannonLocationустанавливается на ваше текущее местоположениеtargetWorldустанавливается на ваш текущий мирsearchCenterне задаётся (используется спавн целевого мира)
После создания плагин выводит путь к файлу конфигурации и предлагает, какие поля отредактировать вручную: displayName, customModel, requiredPermission, verticalBoostTicks и verticalBoostVelocity.
Интеграция FreeMinecraftModels
Если пушка определяет валидную модель FreeMinecraftModels (через собственное поле customModel или глобальный список runtime.cannonModelPriority) и FreeMinecraftModels установлен:
- На месте пушки создаётся статическая сущность модели
- Плавающая текстовая метка поднимается выше, чтобы не перекрывать модель
- Анимация частиц в режиме ожидания подавляется при активной модели
- При запуске игрока модель воспроизводит анимацию
fire(если она существует в файле модели)
Поведение валидации во время выполнения
CannonRTP отклоняет кандидатов на посадку, если не проходит любая из этих проверок:
- целевой мир не загружен
- центр поиска недействителен
- случайная выборка попадает за пределы границы мира
- не найдена безопасная твёрдая поверхность
- пространство ног или головы заблокировано
- местность или блоки тела совпадают с настроенными списками опасных материалов
- интеграция защиты блокирует посадку
Если пушка не может найти достаточно корректных точек до истечения landing.searchTimeoutSeconds, она становится исчерпанной и начинает возвращать настроенное сообщение об ошибке вместо запуска игроков. Сообщение об ошибке включает сводку наиболее частых причин отклонения.
Окно поиска пушки перезапускается, когда ей нужно пополнить использованные точки (например, после запуска игрока и освобождения слота).
Защита от повторного взаимодействия
CannonRTP предотвращает срабатывание пушки, пока игрок уже находится в активной последовательности запуска. После завершения текущего запуска (приземление или отключение) игрок может снова использовать пушку. Дополнительного таймера задержки нет.