Skip to main content

Overview

Runway can redirect system messages (plugin chat messages) to the action bar using the [actionbar] prefix. This is useful for displaying temporary notifications without cluttering the chat. Action bar messages:
  • Appear above the hotbar
  • Display for 2-3 seconds by default
  • Don’t persist in chat history
  • Can include full MiniMessage formatting
  • Support placeholders

The [actionbar] prefix

Add [actionbar] to any system message to send it to the action bar instead of chat:
message: "[actionbar][mm]<green>✓ Item purchased!"
The prefix can be combined with [mm] and [p] for full formatting support:
balance-update: "[actionbar][mm][p]<gold>Balance: <white>$%vault_eco_balance%"
The [actionbar] prefix is checked in the SystemChatListener and only affects system messages, not player chat.

How it works

From SystemChatListener.java:32-36:
SystemChatListener.java
if (message.contains("[actionbar]")) {
    message = message.replace("[actionbar]", "");
    e.setCancelled(true);
    player.sendActionBar(handler.processComponent(message, player));
}
The implementation:
  1. Checks if the message contains [actionbar]
  2. Removes the prefix from the message
  3. Cancels the original chat packet
  4. Sends the processed message to the player’s action bar
This means the message is intercepted at the packet level before it reaches chat, and redirected to the action bar with full MiniMessage processing.

Configuration requirements

System messages must be enabled in the config for action bar messages to work:
config.yml
listeners:
  system-messages: true  # Required for [actionbar] to work
If system-messages is disabled, the [actionbar] prefix will not be processed and messages will appear in chat normally.

Use cases

Economy notifications

Perfect for transaction confirmations that don’t need to persist in chat:
purchase-success: "[actionbar][mm]<green>✓ Purchased for <gold>$%price%"
purchase-fail: "[actionbar][mm]<red>✗ Insufficient funds"

Status updates

Show temporary status messages without cluttering chat:
quest-progress: "[actionbar][mm][p]<gray>Quest Progress: <gold>%quest_progress%<gray>/<gold>%quest_total%"
level-xp: "[actionbar][mm][p]<green>XP: %player_xp%/%player_xp_to_next_level%"

Game mechanics

Display real-time game information:
low-health: "[actionbar][mm]<red>⚠ Low Health!"
healing: "[actionbar][mm]<green>+ %amount% HP"

Permission checks

Quiet permission denied messages:
no-permission: "[actionbar][mm]<red>✗ You don't have permission to do that"
no-access: "[actionbar][mm]<red>⚠ This area is restricted"

Minigame events

round-start: "[actionbar][mm]<gradient:gold:yellow><bold>ROUND %round% START!</bold></gradient>"
round-end: "[actionbar][mm]<gray>Round ended"

Formatting examples

Basic formatted messages

[actionbar][mm]<green>Operation successful!

With placeholders

[actionbar][mm][p]<gray>Health: <red>%player_health%</red> | Hunger: <gold>%player_food_level%</gold>

Complex formatting

[actionbar][mm][p]<gradient:gold:yellow><bold>⚔ Combat Stats</bold></gradient> <dark_gray>|</dark_gray> <red>❤ %player_health%</red> <dark_gray>|</dark_gray> <gold>Kills: %statistic_player_kills%</gold>

Before & after examples

Economy plugin messages

Chat cluttered with transaction messages:
[Economy] You purchased Stone Sword for $50
[Economy] You purchased Iron Helmet for $75
[Economy] You purchased Health Potion for $25
[Economy] Your balance is: $350

Quest notifications

[Quests] Quest updated: Kill 10 Zombies (5/10)
[Quests] Quest updated: Kill 10 Zombies (6/10)
[Quests] Quest updated: Kill 10 Zombies (7/10)

Multiple prefixes

You can combine all three prefixes for maximum functionality:
message: "[actionbar][mm][p]<gradient:gold:yellow>Balance: <white>$%vault_eco_balance%</gradient>"
Processing order:
  1. [actionbar] - Redirect to action bar
  2. [mm] - Enable MiniMessage parsing
  3. [p] - Enable placeholder parsing
All prefixes are removed before the final message is displayed.
The order of prefixes doesn’t matter. [mm][p][actionbar] works the same as [actionbar][mm][p].

Practical plugin configurations

Shop plugin

purchase:
  success: "[actionbar][mm]<green>✓ Purchased <white>%item%</white> for <gold>$%price%"
  insufficient-funds: "[actionbar][mm]<red>✗ You need <gold>$%required%</gold> more"
  item-sold: "[actionbar][mm]<green>+ $%amount% from selling <white>%item%"

Skills plugin

skill-up: "[actionbar][mm][p]<gradient:gold:yellow><bold>%skill% LEVEL UP!</bold></gradient> <gray>(<green>%level%<gray>)"
xp-gain: "[actionbar][mm]<gray>+%xp% <gold>%skill%</gold> XP"
ability-ready: "[actionbar][mm]<green>✓ %ability% ready! (Right-click)"
ability-cooldown: "[actionbar][mm]<red>%ability% on cooldown: %time%s"

Claims/Protection plugin

enter-claim: "[actionbar][mm]<gradient:green:blue>%owner%'s claim</gradient>"
leave-claim: "[actionbar][mm]<gray>Wilderness"
cannot-build: "[actionbar][mm]<red>✗ You can't build here"
claim-created: "[actionbar][mm]<green>✓ Claim created: %size% blocks"

Teleport plugin

teleporting: "[actionbar][mm]<gold>Teleporting in <white>%seconds%s<gold>..."
teleport-success: "[actionbar][mm]<green>✓ Teleported to <white>%destination%"
teleport-cancelled: "[actionbar][mm]<red>✗ Teleport cancelled (moved)"
cooldown: "[actionbar][mm]<red>Teleport cooldown: <white>%time%s"

Best practices

1

Use action bar for temporary info

Reserve action bar for information that doesn’t need to persist:
  • Transaction confirmations
  • Progress updates
  • Temporary status messages
  • Cooldown notifications
2

Keep chat for important messages

Leave important information in chat:
  • Announcements
  • Direct player messages
  • Error messages requiring attention
  • Information players might need to reference
3

Avoid action bar spam

Don’t send action bar messages more than once per second. Rapid updates can be distracting and hard to read.
4

Use clear visual indicators

Include symbols to quickly convey message type:
  • ✓ for success
  • ✗ for failure
  • ⚠ for warnings
  • ⏱ for timers
  • ❤ for health

Timing considerations

Action bar messages display for approximately 2-3 seconds. Plan your message frequency accordingly:
For real-time stats (health, XP), send updates every 1-2 seconds:
health-display: "[actionbar][mm][p]<red>❤ %player_health%<gray>/<red>%player_max_health%"
For events (purchases, achievements), send once per event:
purchase: "[actionbar][mm]<green>✓ Purchase complete!"
For information that should stay visible, consider using the scoreboard instead of action bar.

Troubleshooting

  1. Verify system-messages: true in config
  2. Ensure the message is a system message (plugin message), not player chat
  3. Check that the [actionbar] prefix is present
  4. Reload Runway: /runway reload
The [actionbar] prefix is only processed for system messages (chat packets from plugins). If you see the message in chat:
  • It might be a player chat message, not a system message
  • System messages listener might be disabled
  • The packet type might not be SYSTEM_CHAT_MESSAGE
Remember to include all necessary prefixes:
# Wrong - no [mm] prefix
message: "[actionbar]<green>Success!"

# Right - includes [mm]
message: "[actionbar][mm]<green>Success!"
Action bar has limited space. If your message is cut off:
  • Shorten the text
  • Remove unnecessary decorations
  • Use abbreviations
  • Split into multiple sequential messages

Testing action bar messages

Use the parse command to test action bar messages:
/runway parse [actionbar][mm]<gradient:gold:yellow>Test message</gradient>
This will send the formatted message to your action bar.
The parse command is perfect for testing different formats and placeholders before adding them to plugin configs.

Next steps

MiniMessage formatting

Learn about gradients, colors, and interactive elements

Placeholder integration

Add dynamic placeholders to action bar messages

Build docs developers (and LLMs) love