CannonRTP Protection Integrations
CannonRTP can validate candidate landing locations against several protection plugins before queueing them for use.
Supported Integrations
The current soft dependencies are:
- WorldGuard
- Towny
- Lands
- GriefPrevention
- HuskTowns
- HuskClaims
These are declared as softdepend in plugin.yml. CannonRTP works without any of them installed; missing plugins are silently skipped.
How Protection Checks Work
- Adapters are checked in a fixed order: WorldGuard, Towny, Lands, GriefPrevention, HuskTowns, HuskClaims.
- A protection adapter is registered only when (a) its
enabledtoggle istrueinprotection.ymlAND (b) the plugin is present and loaded on the server. - The first adapter that blocks a location stops the check and becomes the reported reason.
- If a protection API throws an error, CannonRTP blocks that landing by default (fail-closed). This is governed by
failOpenOnProtectionErrorsinlanding.yml.
The global safety toggle for API failures is:
failOpenOnProtectionErrors(inlanding.yml)
Default: false
When set to true, CannonRTP will allow landings to continue when a protection plugin cannot be queried safely.
The /wc probe Command
Admins can stand at any location and run /wc probe to test whether that location passes all enabled protection checks. The result reports which plugin blocked the location and why, or confirms that the location is valid.
Config File
All protection toggles live in plugins/CannonRTP/protection.yml. Keys are top-level (e.g. worldGuard.enabled, not protection.worldGuard.enabled).
Per-Plugin Behavior
WorldGuard
Config keys:
worldGuard.enabledworldGuard.allowGlobalRegionOnlyworldGuard.allowBuildAllowedRegionsworldGuard.allowPassthroughRegions
Default behavior:
- enabled by default
- locations covered only by
__global__are allowed by default - regions with
build=ALLOWare allowed by default - regions with
passthrough=ALLOWare allowed by default - other matching protected regions are blocked
Towny
Config keys:
towny.enabledtowny.allowWildernesstowny.allowNationZonestowny.allowClaimedTownBlocks
Default behavior:
- enabled by default
- wilderness is allowed
- nation zones are blocked
- claimed town blocks are blocked
Lands
Config keys:
lands.enabledlands.allowUnclaimedAreaslands.allowClaimedAreas
Default behavior:
- enabled by default
- unclaimed areas are allowed
- claimed areas are blocked
GriefPrevention
Config keys:
griefPrevention.enabledgriefPrevention.allowWildernessgriefPrevention.allowAdminClaimsgriefPrevention.allowPlayerClaims
Default behavior:
- enabled by default
- wilderness is allowed
- admin claims are blocked
- player claims are blocked
HuskTowns
Config keys:
huskTowns.enabledhuskTowns.allowWildernesshuskTowns.allowAdminClaimshuskTowns.allowRegularClaimshuskTowns.allowFarmClaimshuskTowns.allowPlotClaims
Default behavior:
- enabled by default
- wilderness is allowed
- admin claims are blocked
- regular town claims are blocked
- farm claims are blocked
- plot claims are blocked
HuskClaims
Config keys:
huskClaims.enabledhuskClaims.allowWildernesshuskClaims.allowAdminClaimshuskClaims.allowPlayerClaims
Default behavior:
- enabled by default
- wilderness is allowed
- admin claims are blocked
- player claims are blocked
Non-Protection Validation Still Applies
Protection integrations are only one part of landing validation. A location can still be rejected because:
- it is outside the world border
- no safe surface exists
- the feet or head space is blocked
- the terrain matches the configured unsafe material lists
- a
CannonRTPLocationValidationEventlistener vetoes it (see API Events)
Failure Reporting
When a cannon becomes exhausted (cannot find enough valid locations before searchTimeoutAttempts runs out), the status output and player-facing messages include a breakdown of common rejection reasons. If most rejections came from protected land, that is reported. This helps admins diagnose whether protection settings are too restrictive for their server.