CannonRTP Messages and Titles
All player-facing strings live in plugins/CannonRTP/messages.yml and are fully overridable. Every value supports MagmaCore gradients (<gradient:#start:#end>...</gradient>), MiniMessage tags, and legacy & color codes. The $prefix placeholder in any message is replaced with the configured prefix value.
Release 1 ships English-only; the language key in config.yml exists so future translation packs can target it.
Prefix and Help Header
| Key | Placeholders | Default | Description |
|---|---|---|---|
prefix | -- | <gradient:#ff9a3d:#ffd166>CannonRTP</gradient> &8| | Prefix injected into every message via $prefix |
helpHeader | $prefix | $prefix &fCannonRTP commands: | Greeting line printed at the top of /cannonrtp, /wc help, and /wc list / /wc status |
Chat Messages
| Key | Placeholders | Description |
|---|---|---|
createdCannon | $prefix, $cannon, $id, $path | Sent after /wc create succeeds |
placedCannon | $prefix, $cannon | Sent after /wc place succeeds |
removedCannon | $prefix, $cannon | Sent after /wc remove succeeds |
deletedCannon | $prefix, $cannon | Sent after /wc delete succeeds |
targetWorldUpdated | $prefix, $cannon, $world | Sent after /wc target succeeds |
searchCenterUpdated | $prefix, $cannon | Sent after /wc center succeeds |
reload | $prefix, $count | Sent after /wc reload finishes |
noPermission | $prefix, $cannon | Sent when a player walks into a cannon they lack requiredPermission for (throttled to once every 3 seconds per player per cannon) |
launchCooldown | $prefix, $cannon, $seconds, $unit | Sent when a player enters any cannon before their accepted-launch cooldown expires. $seconds is rounded up; $unit is second or seconds. Notifications are throttled to once every 3 seconds per player per cannon. |
cannonDisabled | $prefix, $cannon | Reserved. Disabled cannons are excluded from the tick loop entirely, so the current build never sends this message -- the key is written to messages.yml but nothing reads it. |
queueCalibration | $prefix, $cannon, $queued, $target, $attempts | Sent while a cannon is still preloading and a player walks in. In this message $target is chargedLocationsPerCannon; $attempts is the remaining search-attempt budget before the cannon exhausts |
noValidLocationYet | $prefix, $cannon | Sent when no safe location has been queued yet |
noValidLocationFound | $prefix, $cannon, $reason | Sent when CannonRTP gives up after exhausting searchTimeoutAttempts. $reason is a comma-separated summary of the most common rejection reasons |
invalidConfiguration | $prefix, $cannon, $reason | Sent when a configuration error is detected (e.g. unloaded target world) |
statusLine | $prefix, $cannon, $status, $queued, $target, $reason | Line format used for each row of /wc list and /wc status. In this message $target is preloadedLocationsPerCannon (the full reserve target, not the charged threshold) |
probeAllowed | $prefix | Sent by /wc probe when the location is valid |
probeBlocked | $prefix, $plugin, $reason | Sent by /wc probe when the location is blocked |
unknownCommand | $prefix | Reserved. Unrecognized subcommands are handled by the shared MagmaCore command manager, so the current build never sends this message -- the key is written to messages.yml but nothing reads it. |
invalidConfiguration doubles as the generic admin error line: it is also what /wc list / /wc status send when no cannons are placed, and what /wc create, /wc place, /wc remove, /wc delete, /wc target and /wc center send when an id or world cannot be resolved.
Status Labels
The status words used by the floating cannon label, /wc list, and the $status placeholder are configurable.
| Key | Default | Shown when |
|---|---|---|
statusLabels.ready | Ready | The cannon has enough preloaded locations to launch players |
statusLabels.charging | Charging | The cannon is still finding its first safe destination |
statusLabels.maintaining | Maintaining | The cannon is replenishing its destination reserve |
statusLabels.exhausted | Exhausted | The cannon could not find a safe destination |
statusLabels.disabled | Disabled | The cannon is disabled in its config |
statusLabels.invalid | Invalid | Reserved. The current build resolves every status through the three internal search states (READY, SEARCHING, EXHAUSTED) plus the disabled check, so nothing renders this label. A cannon whose targetWorld is unloaded keeps its search-state label and reports the problem through $reason instead. |
These are raw strings, so gradients and color codes work here too. Whatever you set becomes the $status value in statusLine.
Title Pools
Several title slots in the launch sequence are configured as a list rather than a single string. Each launch, CannonRTP picks one entry at random from the list. This keeps repeated launches from feeling identical.
| Key | Placeholders | Phase | Description |
|---|---|---|---|
titles.launchQueuedTitles | $cannon | start of SEARCHING | Pool of title strings shown when a launch starts |
titles.launchQueuedSubtitles | $cannon | start of SEARCHING | Pool of subtitles paired with the launch start title |
titles.destinationPreviewTitles | -- | SEARCHING | Pool of titles shown while randomized coordinates flicker by. One entry is picked when the phase begins and held for the whole phase. |
titles.destinationPreviewSubtitle | $x, $y, $z | SEARCHING (every tick) | Single subtitle string showing the flickering randomized coordinates |
titles.destinationConfirmedTitles | $x, $y, $z, $world | start of FIRING | Pool of titles shown the moment the true destination is locked in |
titles.destinationConfirmedSubtitle | $x, $y, $z, $world | start of FIRING | Single subtitle showing the real destination |
titles.arrivalTitles | $x, $y, $z, $world | TELEPORTING | Pool of titles shown right after the airdrop teleport |
titles.arrivalSubtitles | $x, $y, $z, $world | TELEPORTING | Pool of subtitles shown alongside the arrival title |
Placeholders are substituted into the title and its subtitle from the same set, so any placeholder listed for one half of a pair also works in the other. $prefix resolves everywhere, though it is rarely wanted inside a title.
Single vs. pool
destinationPreviewSubtitleanddestinationConfirmedSubtitleare single strings because they contain dynamic coordinates that must always be rendered. The other title and subtitle slots are pools, and one entry is picked at random from each per launch.
Default Title Pools
The defaults shipped in messages.yml:
launchQueuedTitles -- Launching, Ignition, Liftoff (orange-gold gradient)
launchQueuedSubtitles -- $cannon (warm gold)
destinationPreviewTitles -- Calibrating, Scanning, Targeting (orange-gold)
destinationConfirmedTitles -- Locked, Set, Engaged (green)
arrivalTitles -- Arrived, Touchdown, Airborne (cool white)
arrivalSubtitles -- Good luck., Stick the landing., Eyes up. Ground soon., Wind check complete. Good luck., Drop zone acquired. Good luck.
Placeholder Reference
| Placeholder | Resolved to |
|---|---|
$prefix | The value of messages.yml -> prefix |
$cannon | The cannon's displayName |
$id | The cannon's config id (sanitized lowercase) |
$path | Absolute path to the freshly created cannon config file (only in createdCannon) |
$world | Target world name |
$count | Number of cannons loaded after a reload |
$queued | Current queue size for a cannon |
$target | Context-dependent: chargedLocationsPerCannon in queueCalibration, preloadedLocationsPerCannon in statusLine. Both keys live in landing.yml. |
$attempts | Remaining search attempts before the cannon exhausts |
$seconds | Rounded-up remaining launch cooldown |
$unit | second or seconds, matching $seconds |
$status | The matching statusLabels.* value -- by default Ready, Charging, Maintaining, Exhausted, or Disabled |
$reason | Human-readable detail of a status or failure |
$plugin | The name of the protection plugin that blocked a location |
$x, $y, $z | Coordinates (one decimal place) |
Localization Note
Every key listed above runs through MagmaCore's color/gradient processor before being shown to the player. Translation packs targeting language in config.yml will be wired in through the same translatable() hook (currently a passthrough in Release 1).