Available Prefixes
Runway supports three main prefixes that can be included anywhere in your message text:[mm] - MiniMessage Prefix
Enables MiniMessage formatting for the message. Whenrequire-prefix.minimessage is set to true (default), messages must contain [mm] to be processed.
- If
require-prefix.minimessage: trueand no[mm]is found, the message is not formatted - The
[mm]prefix is removed before processing (ProcessHandler.java:81) - If the message contains legacy color codes (§) and no prefix, it’s returned as plain text
The
[mm] prefix can appear anywhere in the message - front, middle, or end. Runway searches the entire string for the prefix.[p] - Placeholder Prefix
Enables PlaceholderAPI and MiniPlaceholders resolution. Whenrequire-prefix.placeholders is set to true (default), placeholder parsing only occurs when [p] is present.
- Checks if PlaceholderAPI or MiniPlaceholders is enabled in config
- If
require-prefix.placeholders: true, looks for[p]in the message - Removes the
[p]prefix before processing - Applies PlaceholderAPI placeholders first (if enabled)
- Then applies MiniPlaceholders with player context (if enabled)
- Falls back to custom placeholders from
placeholders.yml
[actionbar] - Action Bar Prefix
Redirects system messages to display in the player’s action bar instead of chat. Only works for system messages (plugin messages).- Only processes packets of type
SYSTEM_CHAT_MESSAGE - When
[actionbar]is found, the original chat packet is cancelled - The message is stripped of
[actionbar]and sent viaplayer.sendActionBar() - Still processes through the full formatting pipeline (MiniMessage + placeholders)
The action bar prefix only works for system messages sent by plugins. Player chat messages cannot be redirected to the action bar.
Configuration: require-prefix
Therequire-prefix section in config.yml controls whether prefixes are mandatory:
minimessage: true (Default - Recommended)
- Behavior
- Use Case
- Example
- Only messages with
[mm]are formatted with MiniMessage - Gives plugins and players explicit control over formatting
- Prevents unexpected formatting in plain text messages
- Legacy plugins continue working without modifications
minimessage: false
- Behavior
- Use Case
- Example
- All messages are automatically formatted with MiniMessage
- No need to add
[mm]prefix - The
[mm]prefix is still recognized but not required - Legacy color codes (§) trigger warnings
placeholders: true/false
Follows the same logic asminimessage but for placeholder resolution:
true: Requires[p]prefix to parse PlaceholderAPI/MiniPlaceholdersfalse: Automatically parses placeholders in all messages
Combining Prefixes
You can combine multiple prefixes in a single message. The order doesn’t matter, but understanding the processing order does:Processing Order (ProcessHandler.java:56-101)
- Check for
[mm]prefix requirement - Handle legacy color codes (§)
- Remove
[mm]prefix - Add italic disable tag if configured
- Check for
[p]prefix requirement - Remove
[p]prefix - Apply PlaceholderAPI placeholders
- Apply MiniPlaceholders with player context
- Parse MiniMessage tags
- Apply custom placeholders from config
Examples
Prefix order doesn’t affect functionality.
[mm][p] and [p][mm] produce identical results.Best Practices
Keep require-prefix enabled for production
Keep require-prefix enabled for production
Setting
require-prefix.minimessage: true prevents accidental formatting of messages that weren’t intended to use MiniMessage. This is especially important when:- Running legacy plugins that might send messages with angle brackets
- Players can input text that gets broadcasted (chat plugins)
- You want explicit control over which messages use formatting
Use [p] only when placeholders exist
Use [p] only when placeholders exist
Don’t add This improves performance by skipping unnecessary placeholder resolution.
[p] to every message. Only include it when you’re actually using PlaceholderAPI or MiniPlaceholders:Test prefix combinations
Test prefix combinations
Use Note:
/runway parse to test how your prefixes work together:/runway parse automatically adds [mm], so you don’t need to include it in your test.Document prefix requirements
Document prefix requirements
If you’re a plugin developer, document whether your plugin requires prefixes:
Use [actionbar] sparingly
Use [actionbar] sparingly
Action bar messages are temporary and can be overwritten by other plugins. Best used for:
- Quick notifications (quest updates, achievement unlocks)
- Temporary status displays (health, position)
- Non-critical information that shouldn’t clutter chat
- Important warnings or errors
- Messages that need to be read carefully
- Information players might want to reference later
Troubleshooting
MiniMessage not working
MiniMessage not working
Symptoms: Tags like
<red> appear as plain textSolutions:- Check if
require-prefix.minimessage: true- if so, add[mm]to your message - Verify the message is being sent through a supported listener (check config.yml
listenerssection) - Test with
/runway parse <red>test</red>to confirm Runway is working
Placeholders not resolving
Placeholders not resolving
Symptoms: Placeholders like
%player_name% display literallySolutions:- Verify PlaceholderAPI or MiniPlaceholders is installed and loaded
- Enable the hook in config:
placeholder-hook.placeholderapi: true - Add
[p]prefix ifrequire-prefix.placeholders: true - Confirm the placeholder exists:
/papi parse me %player_name% - Check that the message has a player context (some system messages don’t)
Action bar not showing
Action bar not showing
Symptoms: Message appears in chat instead of action barSolutions:
- Confirm the message is a system message (plugin-sent), not a player chat message
- Check
listeners.system-messages: truein config.yml - Verify
[actionbar]prefix is included in the message - Some plugins send messages through different packet types - action bar only works with SYSTEM_CHAT_MESSAGE packets
Legacy colors (§) appearing as plain text
Legacy colors (§) appearing as plain text
Symptoms: Messages with § codes don’t show colorsSolution: This is intentional. Runway converts § to & to prevent conflicts (ProcessHandler.java:73). Update your messages to use MiniMessage format:
Technical Reference
For developers interested in the implementation details:- Prefix checking: ProcessHandler.java:66 (mm), ProcessHandler.java:87 (p)
- Prefix removal: ProcessHandler.java:81 (mm), ProcessHandler.java:91 (p), SystemChatListener.java:33 (actionbar)
- Action bar logic: SystemChatListener.java:32-35
- Config loading: config.yml:1-5
- Processing pipeline: ProcessHandler.java:56-101