CannonRTP 保护插件集成
CannonRTP 可以在将候选落点加入队列之前,针对多个保护插件对其进行验证。
支持的集成
当前的软依赖为:
- WorldGuard
- Towny
- Lands
- GriefPrevention
- HuskTowns
- HuskClaims
它们在 plugin.yml 中被声明为 softdepend。即便未安装任何一个,CannonRTP 也能正常工作;缺失的插件会被静默跳过。
保护检查的运作方式
- 适配器按固定顺序检查:WorldGuard、Towny、Lands、GriefPrevention、HuskTowns、HuskClaims。
- 仅当 (a)
protection.yml中的enabled开关为true且 (b) 该插件已在服务器上加载并存在时,才会注册对应的保护适配器。 - 第一个阻止该位置的适配器会停止后续检查,并成为上报的原因。
- 如果保护 API 抛出错误,CannonRTP 默认会阻止该落点(fail-closed,即默认拒绝)。该行为由
landing.yml中的failOpenOnProtectionErrors控制。
API 失败时的全局安全开关为:
failOpenOnProtectionErrors(位于landing.yml)
默认:false
设为 true 时,当无法安全查询保护插件时,CannonRTP 仍会允许落地继续。
/wc probe 命令
管理员可以站在任意位置并执行 /wc probe 来测试该位置是否能通过所有已启用的保护检查。结果会报告是哪个插件阻止了该位置以及原因,或确认该位置有效。
配置文件
所有保护开关都位于 plugins/CannonRTP/protection.yml。键为顶层键(例如 worldGuard.enabled,而非 protection.worldGuard.enabled)。
各插件行为
WorldGuard
配置键:
worldGuard.enabledworldGuard.allowGlobalRegionOnlyworldGuard.allowBuildAllowedRegionsworldGuard.allowPassthroughRegions
默认行为:
- 默认启用
- 仅被
__global__覆盖的位置默认允许 build=ALLOW的区域默认允许passthrough=ALLOW的区域默认允许- 其他匹配的受保护区域被阻止
Towny
配置键:
towny.enabledtowny.allowWildernesstowny.allowNationZonestowny.allowClaimedTownBlocks
默认行为:
- 默认启用
- 荒野允许
- 国家区域被阻止
- 已认领的城镇方块被阻止
Lands
配置键:
lands.enabledlands.allowUnclaimedAreaslands.allowClaimedAreas
默认行为:
- 默认启用
- 未认领区域允许
- 已认领区域被阻止
GriefPrevention
配置键:
griefPrevention.enabledgriefPrevention.allowWildernessgriefPrevention.allowAdminClaimsgriefPrevention.allowPlayerClaims
默认行为:
- 默认启用
- 荒野允许
- 管理员领地被阻止
- 玩家领地被阻止
HuskTowns
配置键:
huskTowns.enabledhuskTowns.allowWildernesshuskTowns.allowAdminClaimshuskTowns.allowRegularClaimshuskTowns.allowFarmClaimshuskTowns.allowPlotClaims
默认行为:
- 默认启用
- 荒野允许
- 管理员领地被阻止
- 常规城镇领地被阻止
- 农场领地被阻止
- 地块领地被阻止
HuskClaims
配置键:
huskClaims.enabledhuskClaims.allowWildernesshuskClaims.allowAdminClaimshuskClaims.allowPlayerClaims
默认行为:
- 默认启用
- 荒野允许
- 管理员领地被阻止
- 玩家领地被阻止
非保护类验证依然适用
保护插件集成只是落点验证的一部分。落点仍可能因以下原因被拒绝:
- 位于世界边界之外
- 不存在安全表面
- 脚部或头部空间被阻挡
- 地形匹配已配置的不安全材料列表
- 有
CannonRTPLocationValidationEvent监听器否决了它(见 API 事件)
失败原因上报
当炮台变为耗尽状态(在 searchTimeoutAttempts 用完前找不到足够的有效落点)时,状态输出和面向玩家的消息中会包含常见拒绝原因的分类汇总。如果大多数拒绝来自受保护的领地,则会如实上报。这有助于管理员判断其服务器的保护设置是否过于严格。