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

Интеграции CannonRTP с защитой

CannonRTP может проверять кандидатов на точки приземления против нескольких плагинов защиты, прежде чем поставить их в очередь использования.

Поддерживаемые интеграции​

Поддерживаются следующие плагины защиты:

  • WorldGuard (также требует WorldEdit, который WorldGuard в любом случае требует сам)
  • Towny
  • Lands
  • GriefPrevention
  • HuskTowns
  • HuskClaims

Все они объявлены как softdepend в plugin.yml (наряду с WorldEdit и FreeMinecraftModels). CannonRTP работает и без единого из них; отсутствующие плагины молча пропускаются.

Как работают проверки защиты​

  • Адаптеры проверяются в фиксированном порядке: WorldGuard, Towny, Lands, GriefPrevention, HuskTowns, HuskClaims.
  • Адаптер защиты регистрируется только тогда, когда (а) его переключатель enabled равен true в protection.yml И (б) плагин присутствует и загружен на сервере.
  • Первый адаптер, который блокирует точку, останавливает проверку и становится сообщаемой причиной.
  • Если API защиты выбрасывает ошибку, CannonRTP по умолчанию блокирует это приземление (fail-closed, безопасный отказ). Это управляется параметром failOpenOnProtectionErrors в landing.yml.
  • Если адаптер включён и его плагин присутствует, но сам адаптер не загружается (отсутствующий класс, несовместимая версия API), CannonRTP записывает в лог Failed to hook into <plugin> и сохраняет для этого плагина заглушку в цепочке проверок, поэтому сбой не трактуется так, будто плагин не установлен. Что делает заглушка, определяет failOpenOnProtectionErrors:
    • false (по умолчанию): заглушка блокирует каждую точку с причиной its adapter failed to initialize (...), и пушки прекращают поиск. Каждая пушка помечается как Exhausted с защищённой территорией в качестве причины, вместо того чтобы перебирать точки, которые заведомо не пройдут проверку. Исправьте интеграцию или отключите её в protection.yml, затем выполните /wc reload.
    • true: заглушка разрешает каждую точку, а остальные адаптеры продолжают работать.

Глобальный переключатель безопасности при сбоях API:

  • failOpenOnProtectionErrors (в landing.yml)

По умолчанию: false

Когда установлено в true, CannonRTP разрешит приземления, если плагин защиты не может быть безопасно опрошен. При false ошибка запроса блокирует эту точку с причиной its API could not be queried safely. При любом значении ошибки запроса записываются в лог как предупреждения.

Команда /wc probe​

Администраторы могут выполнить /wc probe в любой точке, чтобы проверить её во всех включённых адаптерах защиты. Результат указывает заблокировавший точку плагин и причину либо подтверждает разрешение адаптеров. Команда не проверяет рельеф, вертикальное пространство для высадки или радиус поиска и не вызывает событие API для проверки местоположения.

Файл конфигурации​

Все переключатели защиты находятся в plugins/CannonRTP/protection.yml. Ключи расположены на верхнем уровне (например, worldGuard.enabled, а не protection.worldGuard.enabled).

Поведение по каждому плагину​

WorldGuard​

Ключи конфигурации:

  • worldGuard.enabled
  • worldGuard.allowGlobalRegionOnly
  • worldGuard.allowBuildAllowedRegions
  • worldGuard.allowPassthroughRegions

Поведение по умолчанию:

  • включено по умолчанию
  • точки, покрытые только регионом __global__, разрешены по умолчанию
  • регионы с build=ALLOW разрешены по умолчанию
  • регионы с passthrough=ALLOW разрешены по умолчанию
  • другие совпадающие защищённые регионы блокируются

Towny​

Ключи конфигурации:

  • towny.enabled
  • towny.allowWilderness
  • towny.allowNationZones
  • towny.allowClaimedTownBlocks

Поведение по умолчанию:

  • включено по умолчанию
  • миры, где Towny не включён, всегда разрешены
  • дикая местность разрешена
  • зоны наций блокируются
  • застолблённые блоки городов блокируются

Lands​

Ключи конфигурации:

  • lands.enabled
  • lands.allowUnclaimedAreas
  • lands.allowClaimedAreas

Поведение по умолчанию:

  • включено по умолчанию
  • незастолблённые области разрешены
  • застолблённые области блокируются

GriefPrevention​

Ключи конфигурации:

  • griefPrevention.enabled
  • griefPrevention.allowWilderness
  • griefPrevention.allowAdminClaims
  • griefPrevention.allowPlayerClaims

Поведение по умолчанию:

  • включено по умолчанию
  • дикая местность разрешена
  • административные клеймы блокируются
  • игровые клеймы блокируются

HuskTowns​

Ключи конфигурации:

  • huskTowns.enabled
  • huskTowns.allowWilderness
  • huskTowns.allowAdminClaims
  • huskTowns.allowRegularClaims
  • huskTowns.allowFarmClaims
  • huskTowns.allowPlotClaims

Поведение по умолчанию:

  • включено по умолчанию
  • дикая местность разрешена
  • административные клеймы блокируются
  • обычные городские клеймы блокируются
  • фермерские клеймы блокируются
  • участковые клеймы блокируются

HuskClaims​

Ключи конфигурации:

  • huskClaims.enabled
  • huskClaims.allowWilderness
  • huskClaims.allowAdminClaims
  • huskClaims.allowPlayerClaims

Поведение по умолчанию:

  • включено по умолчанию
  • дикая местность разрешена
  • административные клеймы блокируются
  • игровые клеймы блокируются

Проверки за пределами защиты по-прежнему действуют​

Интеграции с защитой — только одна часть проверки приземления. Точка всё равно может быть отклонена, потому что:

  • она находится за границей мира
  • не существует безопасной поверхности
  • пространство для ног или головы заблокировано
  • рельеф совпадает с настроенными списками небезопасных материалов
  • слушатель CannonRTPLocationValidationEvent отклоняет её (см. API события)

Отчёт о неудачах​

Когда пушка истощается (расходует searchTimeoutAttempts, не найдя достаточно подходящих точек, или прекращает поиск раньше из-за того, что не загрузилась интеграция защиты), статус и сообщения игрокам перечисляют категории отказов за это окно поиска. Защищённая территория упоминается, даже если по этой причине отклонён всего один кандидат. Несмотря на выражения вроде «most samples» в стандартном тексте, сообщение не содержит количеств и не ранжирует категории по частоте. Используйте его для выбора проверок, которые стоит исследовать, а не для определения самой частой причины отказа.