跳到主要内容

CannonRTP 保护插件集成

CannonRTP 可以在将候选落点加入队列之前,针对多个保护插件对其进行验证。

支持的集成​

支持的保护插件有:

  • WorldGuard(同时需要 WorldEdit,而 WorldGuard 本身也要求它)
  • Towny
  • Lands
  • GriefPrevention
  • HuskTowns
  • HuskClaims

它们在 plugin.yml 中全部被声明为 softdepend(与 WorldEdit 和 FreeMinecraftModels 一起)。即便未安装任何一个,CannonRTP 也能正常工作;缺失的插件会被静默跳过。

保护检查的运作方式​

  • 适配器按固定顺序检查:WorldGuard、Towny、Lands、GriefPrevention、HuskTowns、HuskClaims。
  • 仅当 (a) protection.yml 中的 enabled 开关为 true 且 (b) 该插件已在服务器上加载并存在时,才会注册对应的保护适配器。
  • 第一个阻止该位置的适配器会停止后续检查,并成为上报的原因。
  • 如果保护 API 抛出错误,CannonRTP 默认会阻止该落点(fail-closed,即默认拒绝)。该行为由 landing.yml 中的 failOpenOnProtectionErrors 控制。
  • 如果某个适配器已启用且其插件存在,但适配器本身加载失败(缺失类、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”等说法,但不提供次数,也不按频率排序。请用它判断应调查哪些检查,而不是衡量哪项检查拒绝了最多位置。