Skip to main content

CannonRTP Configuration

CannonRTP uses one global config file plus one config file per cannon.

File Layout

  • Global config: plugins/CannonRTP/config.yml
  • Per-cannon configs: plugins/CannonRTP/cannons/<id>.yml

The plugin also ships an example cannon package named example_world_cannon. It is enabled by default and places itself at the first world's spawn.

Global Config Structure

The main config is organized under:

  • runtime.*
  • landing.*
  • messages.*
  • protection.*

Runtime Settings

KeyDefaultBehavior
runtime.particleIntervalTicks15How often idle cannon particles render (minimum 5)
runtime.cannonModelPriority[cannonrtp_premium, cannonrtp]Priority list of FreeMinecraftModels model names, checked top to bottom. The first model found on the server is used for any cannon that does not set its own customModel. If none are found, particles are used instead.

Landing Search Settings

KeyDefaultBehavior
landing.searchAttemptsPerTick2Search attempts per cannon per tick while preloading (minimum 1)
landing.preloadedLocationsPerCannon10Total number of safe destinations the plugin tries to keep queued per cannon (minimum 1)
landing.chargedLocationsPerCannon5How many locations a cannon must have before it is considered charged and launch-ready (minimum 1, capped at preloadedLocationsPerCannon)
landing.searchTimeoutSeconds1000Time in seconds before a still-searching cannon is marked exhausted (minimum 10)
landing.slowFallingSeconds60Slow Falling duration after arrival in seconds; the effect is removed early when the player lands (minimum 1)
landing.failOpenOnProtectionErrorsfalseIf a protection API errors, block the landing by default

Landing Sounds

The following sound keys are configurable:

  • landing.sounds.levitationStart.sound (default: BLOCK_BEACON_ACTIVATE)
  • landing.sounds.levitationStart.volume (default: 1.0)
  • landing.sounds.levitationStart.pitch (default: 1.15)
  • landing.sounds.blastOff.sound (default: ENTITY_GENERIC_EXPLODE)
  • landing.sounds.blastOff.volume (default: 1.0)
  • landing.sounds.blastOff.pitch (default: 0.9)

Sound values use Bukkit Sound registry names or namespaced keys. Invalid sound names are logged as warnings and the sound is silently skipped.

Unsafe Material Lists

CannonRTP rejects candidate landing spots based on two material lists:

  • landing.unsafeGroundMaterials -- blocks that should never be stood on
  • landing.unsafeBodyMaterials -- blocks that should never occupy the feet or head space

Default unsafe ground materials:

  • LAVA
  • MAGMA_BLOCK
  • CAMPFIRE
  • SOUL_CAMPFIRE
  • CACTUS
  • POWDER_SNOW

Default unsafe body materials:

  • LAVA
  • WATER
  • FIRE
  • SOUL_FIRE
  • SWEET_BERRY_BUSH
  • POWDER_SNOW
  • COBWEB

Message Settings

All messages support MagmaCore gradients, MiniMessage tags, and legacy color codes. The $prefix placeholder is replaced with the configured prefix value.

The plugin exposes message keys under:

KeyPlaceholdersDescription
messages.prefix--Prefix used by all CannonRTP messages
messages.helpHeader$prefixHeader shown by /cannonrtp
messages.createdCannon$prefix, $cannon, $id, $pathSent after creating a cannon
messages.deletedCannon$prefix, $cannonSent after deleting a cannon
messages.movedCannon$prefix, $cannonSent after moving a cannon
messages.targetWorldUpdated$prefix, $cannon, $worldSent after changing a cannon's target world
messages.searchCenterUpdated$prefix, $cannonSent after changing a cannon's search center
messages.reload$prefix, $countSent after reloading
messages.noPermission$prefix, $cannonSent when a player can see a cannon but cannot use it
messages.cannonDisabled$prefix, $cannonSent when a player steps into a disabled cannon
messages.queueCalibration$prefix, $cannon, $queued, $target, $secondsSent while a cannon is still preloading
messages.noValidLocationYet$prefix, $cannonSent when no safe location has been found yet
messages.noValidLocationFound$prefix, $cannon, $reasonSent when CannonRTP gives up after timing out
messages.invalidConfiguration$prefix, $cannon, $reasonSent when a configuration error is detected
messages.statusLine$prefix, $cannon, $status, $queued, $target, $reasonLine format used by /wc status and /wc list
messages.probeAllowed$prefixSent by /wc probe when the location is valid
messages.probeBlocked$prefix, $plugin, $reasonSent by /wc probe when the location is blocked
messages.unknownCommand$prefixSent when an admin uses an unrecognized subcommand

Title Messages

KeyPlaceholdersDescription
messages.titles.launchQueuedTitle$cannonTitle shown when a launch starts
messages.titles.launchQueuedSubtitle$cannonSubtitle shown when a launch starts
messages.titles.destinationPreviewTitle$x, $y, $zTitle shown during the searching phase
messages.titles.destinationPreviewSubtitle$x, $y, $zSubtitle shown during the searching phase
messages.titles.destinationConfirmedTitle$x, $y, $z, $worldTitle shown at the start of the firing phase and again after teleporting
messages.titles.destinationConfirmedSubtitle$x, $y, $z, $worldSubtitle shown at the start of the firing phase and again after teleporting
messages.titles.arrivalSubtitles--List of titles; one is picked at random and shown as the title after the player is dropped over the destination

The coordinate preview during the searching phase does not show the actual destination -- it shows randomized coordinates within the cannon's search area as a visual effect. The true destination is revealed only in the confirmed title at the start of the firing phase.

Per-Cannon Config Fields

Each cannon file (plugins/CannonRTP/cannons/<id>.yml) stores these fields:

FieldDefaultNotes
isEnabledtrue for newly created cannonsDisabled cannons do not trigger
displayNameCannonRTP (or the name provided at creation)Used in messages, status output, and the floating label
cannonLocationRequiredWhere the cannon trigger exists
targetWorldCurrent world at creation timeMust be loaded at runtime
searchCenternull (falls back to the target world's spawn)If unset, the plugin uses the target world's spawn location
triggerRadius1.75Radius used to detect nearby players (minimum 0.5)
minSearchRadius500Minimum landing search distance from the search center (minimum 0)
maxSearchRadius5000Maximum landing search distance from the search center (always at least minSearchRadius + 1)
verticalBoostTicks45Ticks of upward velocity before teleport (minimum 0)
verticalBoostVelocity1.35Upward velocity applied during launch (minimum 0)
enableParticlestrueControls idle cannon particle animation (only used when no custom model is active)
requiredPermissionblankOptional extra permission gate for this specific cannon
customModelblankOptional FreeMinecraftModels model name for this specific cannon. If blank, the plugin falls back to runtime.cannonModelPriority

Cannon Creation Defaults

When you run /wc create <id>:

  • the cannon id is lowercased and characters other than a-z, 0-9, _, and - are replaced with _
  • the display name defaults to CannonRTP if not specified, or the provided name with underscores converted to spaces
  • cannonLocation is set to your current location
  • targetWorld is set to your current world
  • searchCenter is not set (falls back to the target world's spawn)

After creation, the plugin prints the config file path and suggests which fields to edit manually: displayName, customModel, requiredPermission, verticalBoostTicks, and verticalBoostVelocity.

FreeMinecraftModels Integration

If a cannon resolves to a valid FreeMinecraftModels model (either through its own customModel field or the global runtime.cannonModelPriority list) and FreeMinecraftModels is installed:

  • A static model entity is spawned at the cannon location
  • The floating text label is raised higher to avoid overlapping the model
  • Idle particle animations are suppressed while a model is active
  • When a player launches, the model plays its fire animation (if one exists in the model file)

Runtime Validation Behavior

CannonRTP rejects candidate landing locations when any of these checks fail:

  • the target world is unloaded
  • the search center is invalid
  • the random sample lands outside the world border
  • no safe solid surface is found
  • the feet or head space is blocked
  • the terrain or body blocks match the configured unsafe material lists
  • a protection integration blocks the landing

If a cannon cannot find enough valid locations before landing.searchTimeoutSeconds, it becomes exhausted and starts returning the configured failure message instead of launching players. The failure message includes a summary of the most common rejection reasons.

The cannon's search window restarts whenever it needs to refill consumed locations (e.g. after a player launches and a slot opens up).

Interaction Guard

CannonRTP prevents a player from triggering a cannon while they are already in an active launch sequence. Once the current launch finishes (landing or disconnect), the player can use a cannon again. There is no additional cooldown timer.