Skip to main content
This guide provides practical examples of using Runway with various plugin types and scenarios. All examples use actual code patterns from the Runway source.

Chat Plugin Integration

Chat plugins are the most common use case for Runway. Here’s how to integrate MiniMessage formatting into chat messages.

EssentialsX Chat

1

Install Runway

Place Runway in your plugins folder alongside EssentialsX and EssentialsXChat.
2

Configure chat format

Edit plugins/EssentialsChat/config.yml:
format: '[mm][p]<gradient:green:blue>{DISPLAYNAME}</gradient> <gray>»</gray> <white>{MESSAGE}'

# For different ranks:
group-formats:
  Admin: '[mm][p]<red>[Admin]</red> <gradient:red:gold>{DISPLAYNAME}</gradient> <gray>»</gray> <white>{MESSAGE}'
  VIP: '[mm][p]<gold>[VIP]</gold> {DISPLAYNAME} <gray>»</gray> <white>{MESSAGE}'
  default: '[mm][p]{DISPLAYNAME} <gray>»</gray> <white>{MESSAGE}'
3

Configure Runway

Ensure system messages are enabled in plugins/Runway/config.yml:
require-prefix:
  minimessage: true  # Requires [mm] prefix
  placeholders: true  # Requires [p] prefix

placeholder-hook:
  placeholderapi: true  # Enable for {DISPLAYNAME} and other placeholders
  miniplaceholders: false

listeners:
  system-messages: true  # Required for chat messages
4

Test the setup

/runway parse <gradient:green:blue>Test Message</gradient>
  • Player names display with gradient colors
  • Messages support full MiniMessage formatting
  • PlaceholderAPI variables like resolve correctly
  • Different ranks can have different color schemes

ChatControl Red

# plugins/ChatControl/messages.yml

Formats:
  Chat:
    Message: '[mm][p]<hover:show_text:"<gray>Rank: <yellow>{vault_rank}</yellow>"><gradient:{primary_color}:{secondary_color}>{player}</gradient></hover> <gray>→</gray> <white>{message}'
  
  Join:
    Message: '[mm][p][actionbar]<green>+ {player} joined the server'
  
  Quit:
    Message: '[mm][p][actionbar]<red>- {player} left the server'

# Custom placeholders for colors
Variables:
  primary_color:
    Admin: 'red'
    Moderator: 'blue'
    Default: 'gray'
  secondary_color:
    Admin: 'gold'
    Moderator: 'aqua'
    Default: 'white'
Features demonstrated:
  • Hover text with rank information
  • Dynamic gradient colors based on player rank
  • Join/quit messages in action bar
  • Placeholder integration for player data

Runway automatically formats inventory titles and item names/lore when the appropriate listeners are enabled.

DeluxeMenus

# plugins/DeluxeMenus/gui_menus/shop.yml

menu_title: '[mm]<gradient:gold:yellow>Server Shop</gradient>'

size: 27

items:
  diamond_sword:
    material: DIAMOND_SWORD
    slot: 13
    display_name: '[mm]<gradient:aqua:blue>Legendary Sword</gradient>'
    lore:
      - '[mm]<gray>A powerful weapon'
      - '[mm]'
      - '[mm][p]<yellow>Price:</yellow> <green>%vault_eco_balance% coins</green>'
      - '[mm]'
      - '[mm]<green>Click to purchase!'
    left_click:
      - '[console] give %player_name% diamond_sword'
      - '[message] [mm][p]<green>Purchased Legendary Sword for <gold>1000</gold> coins!'
Runway configuration:
# plugins/Runway/config.yml

listeners:
  inventory:
    title: true   # Parse menu titles
    items: true   # Parse item names and lore
  items: true     # Also parse items outside inventories

disable-italics: true  # Prevents italic lore text (recommended)
The disable-italics: true setting is highly recommended for GUI plugins. Without it, all lore text will be italic by default (Minecraft behavior), which can look inconsistent with MiniMessage formatting.

ChestCommands

# plugins/ChestCommands/menu/warp.yml

menu-settings:
  name: '[mm]<rainbow>Warp Menu</rainbow>'
  rows: 3

items:
  spawn:
    MATERIAL: COMPASS
    POSITION-X: 2
    POSITION-Y: 2
    NAME: '[mm]<gradient:green:lime>Spawn</gradient>'
    LORE:
      - '[mm]<gray>Teleport to spawn'
      - '[mm]'
      - '[mm][p]<yellow>Online:</yellow> <green>%server_online%</green>'
    COMMAND: 'spawn'
  
  pvp:
    MATERIAL: DIAMOND_SWORD
    POSITION-X: 4
    POSITION-Y: 2
    NAME: '[mm]<gradient:red:dark_red>PvP Arena</gradient>'
    LORE:
      - '[mm]<gray>Fight other players!'
      - '[mm]'
      - '[mm][p]<red>⚠</red> <yellow>Players in arena:</yellow> <green>%players_in_world_world_pvp%</green>'
    COMMAND: 'warp pvp'

Economy Plugins

Economy plugins frequently send system messages that can be enhanced with MiniMessage formatting.

Vault-based Economy Messages

# Example from a custom economy plugin or shop plugin

messages:
  purchase_success: '[mm][p][actionbar]<green>✓</green> <white>Purchased <aqua>{item}</aqua> for <gold>${amount}</gold>'
  purchase_fail: '[mm][actionbar]<red>✗</red> <white>Insufficient funds! Need <gold>${amount}</gold>'
  balance: '[mm][p]<gray>Your balance:</gray> <gold>${vault_eco_balance}</gold>'
  pay_sent: '[mm][p]<green>Sent <gold>${amount}</gold> to <aqua>{recipient}</aqua>'
  pay_received: '[mm][p][actionbar]<green>+ ${amount}</green> <gray>from <aqua>{sender}</aqua>'
Runway configuration:
# plugins/Runway/config.yml

require-prefix:
  minimessage: true
  placeholders: true

placeholder-hook:
  placeholderapi: true  # Required for %vault_eco_balance%
  miniplaceholders: false

listeners:
  system-messages: true  # Most economy plugins use system messages

PlayerShops Integration

# plugins/PlayerShops/config.yml

shop:
  name: '[mm][p]<gradient:gold:yellow>%player_name%''s Shop</gradient>'
  
messages:
  shop_created: '[mm]<green>Shop created successfully! Use <click:run_command:/shop><aqua>/shop</aqua></click> to manage it.'
  item_sold: '[mm][p][actionbar]<green>+$%amount%</green> <gray>from selling <white>%item_name%</white>'
  item_bought: '[mm][p]<green>Purchased <aqua>%item_name%</aqua> for <gold>$%amount%</gold>'
  shop_visit: '[mm][p]<gray>Visiting <gradient:gold:yellow>%shop_owner%</gradient>''s shop'

Quest/Progression Plugins

Quest plugins benefit from action bar notifications and formatted objectives.

BetonQuest

# plugins/BetonQuest/QuestPackages/main/events.yml

events:
  quest_start: |
    message [mm]<gradient:blue:cyan>Quest Started:</gradient> <yellow>{quest_name}</yellow>
  
  quest_complete: |
    message [mm][actionbar]<green>✓ Quest Complete!</green>
    message [mm][p]<gradient:gold:yellow>Completed:</gradient> <white>{quest_name}</white>
    message [mm][p]<gray>Reward:</gray> <gold>+{quest_reward} coins</gold>
  
  objective_update: |
    actionbar [mm][p]<yellow>{objective_name}:</yellow> <green>{progress}</green><gray>/</gray><green>{total}</green>
Runway configuration:
# plugins/Runway/config.yml

require-prefix:
  minimessage: true
  placeholders: true

listeners:
  system-messages: true  # For quest messages
  titles: true           # For quest announcements

# Custom placeholders for quest rewards
placeholders:
  # Define in plugins/Runway/placeholders.yml
  custom-placeholders:
    quest_icon: '<gradient:blue:cyan>⭐</gradient>'
    quest_complete_icon: '<green>✓</green>'
    quest_fail_icon: '<red>✗</red>'

Scoreboard & Tab List

Runway can format scoreboards (using Teams) and tab list headers/footers.

TAB Plugin

# plugins/TAB/config.yml

header-footer:
  enabled: true
  header:
    - '[mm]'
    - '[mm]<gradient:blue:cyan>╔═══════════════╗</gradient>'
    - '[mm]<bold><gradient:gold:yellow>MY SERVER</gradient></bold>'
    - '[mm]<gradient:blue:cyan>╚═══════════════╝</gradient>'
    - '[mm]'
  footer:
    - '[mm]'
    - '[mm][p]<gray>Players Online:</gray> <green>%server_online%</green><gray>/</gray><green>%server_max_players%</green>'
    - '[mm][p]<gray>Your Rank:</gray> <gradient:gold:yellow>%vault_rank%</gradient>'
    - '[mm]'

scoreboard:
  enabled: true
  title: '[mm]<bold><gradient:red:gold>SERVER</gradient></bold>'
  lines:
    - '[mm]<gray>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬'
    - '[mm]'
    - '[mm][p]<yellow>Rank:</yellow> <gradient:gold:yellow>%vault_rank%</gradient>'
    - '[mm][p]<yellow>Balance:</yellow> <green>$%vault_eco_balance%</green>'
    - '[mm]'
    - '[mm][p]<yellow>Players:</yellow> <green>%server_online%</green>'
    - '[mm]'
    - '[mm]<gray>▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬'
Runway configuration:
# plugins/Runway/config.yml

listeners:
  tablist: true        # Required for TAB header/footer
  scoreboards: true    # Required for scoreboard (uses Teams)
  system-messages: true

placeholder-hook:
  placeholderapi: true  # For %vault_rank%, %server_online%, etc.
Scoreboard support uses Minecraft Teams and may not work with all scoreboard plugins. Test with your specific setup. Set scoreboards: false if you experience issues.

Title & Subtitle Messages

Plugins that send titles can use MiniMessage formatting through Runway.

Title Configuration Example

# Example from a custom plugin or TitleManager

titles:
  welcome:
    title: '[mm]<gradient:gold:yellow>Welcome Back!</gradient>'
    subtitle: '[mm][p]<gray>Last login: <aqua>%player_last_join%</aqua>'
    fade-in: 10
    stay: 40
    fade-out: 10
  
  achievement:
    title: '[mm]<gradient:green:lime>Achievement Unlocked!</gradient>'
    subtitle: '[mm]<white>{achievement_name}</white>'
    fade-in: 5
    stay: 60
    fade-out: 10
  
  death:
    title: '[mm]<red><bold>YOU DIED</bold></red>'
    subtitle: '[mm][p]<gray>Killed by <red>{killer_name}</red>'
    fade-in: 5
    stay: 40
    fade-out: 10
Runway configuration:
# plugins/Runway/config.yml

listeners:
  titles: true  # Required for title parsing

require-prefix:
  minimessage: true
  placeholders: true

Advanced Patterns

Custom Placeholders

Define your own static placeholders in Runway for consistent styling across plugins.
# plugins/Runway/placeholders.yml

custom-placeholders:
  # Color schemes
  primary_color: '<gradient:blue:cyan>'
  secondary_color: '<gradient:gold:yellow>'
  error_color: '<red>'
  success_color: '<green>'
  
  # Common UI elements
  separator: '<gray>━━━━━━━━━━━━━━━━━━━━</gray>'
  arrow: '<gray>→</gray>'
  bullet: '<dark_gray>•</dark_gray>'
  checkmark: '<green>✓</green>'
  crossmark: '<red>✗</red>'
  
  # Server branding
  server_name: '<bold><gradient:red:gold>MY SERVER</gradient></bold>'
  prefix: '<gradient:blue:cyan>[MS]</gradient>'
  
  # Common messages
  no_permission: '<red>You do not have permission to do this!</red>'
  invalid_arguments: '<red>Invalid arguments! Check /help for usage.</red>'
Usage in plugins:
# Any plugin config
messages:
  welcome: '[mm]<primary_color>Welcome to <server_name><primary_color>!'
  denied: '[mm]<prefix> <no_permission>'
  separator: '[mm]<separator>'
How it works:
  • Custom placeholders are loaded from placeholders.yml (ProcessHandler.java:37-49)
  • Keys are normalized: lowercase, spaces/dashes → underscores
  • Applied after PlaceholderAPI/MiniPlaceholders resolution
  • Available in all messages, even without [p] prefix

Clickable Messages

Combine MiniMessage click events with Runway for interactive messages.
# Example custom plugin or announcement system

messages:
  help: |
    [mm]<separator>
    [mm]<gradient:gold:yellow><bold>HELP MENU</bold></gradient>
    [mm]
    [mm]<click:run_command:/spawn><hover:show_text:'<green>Click to teleport'><green>[Spawn]</green></hover></click> <gray>Return to spawn
    [mm]<click:run_command:/help><hover:show_text:'<green>Click for help'><aqua>[Help]</aqua></hover></click> <gray>View commands
    [mm]<click:open_url:'https://example.com'><hover:show_text:'<blue>Click to visit'><blue>[Website]</blue></hover></click> <gray>Visit our website
    [mm]<click:suggest_command:/msg ><hover:show_text:'<yellow>Click to message staff'><yellow>[Contact]</yellow></hover></click> <gray>Message staff
    [mm]
    [mm]<separator>
  
  rules: |
    [mm]<red><bold>SERVER RULES</bold></red>
    [mm]
    [mm]<bullet> <white>No griefing
    [mm]<bullet> <white>No cheating
    [mm]<bullet> <white>Be respectful
    [mm]
    [mm]<gray>Click to accept:</gray> <click:run_command:/accept rules><green><bold>[ACCEPT]</bold></green></click>

Conditional Formatting

Use PlaceholderAPI extensions for conditional MiniMessage formatting.
# Requires PlaceholderAPI with CheckItem/Player extensions

messages:
  # Different colors based on health
  health_display: '[mm][p]<yellow>Health:</yellow> %player_health_color%%player_health%</yellow>'
  
  # Where %player_health_color% is a custom placeholder returning:
  # <green> if health > 15
  # <yellow> if health > 10
  # <red> if health <= 10
  
  # Different prefix based on rank
  chat_format: '[mm][p]%vault_rank_color%[%vault_rank%]</> <white>%player_name%: {message}'
  
  # Where %vault_rank_color% returns appropriate color tags
Setup:
  1. Install PlaceholderAPI expansion for conditional logic
  2. Create custom placeholders that return MiniMessage tags
  3. Use [mm][p] to process the dynamic tags

Complete Server Configuration

Here’s a comprehensive Runway configuration for a full-featured server:
# plugins/Runway/config.yml

require-prefix:
  minimessage: true   # Safe default - explicit control
  placeholders: true  # Prevents unnecessary parsing

placeholder-hook:
  placeholderapi: true      # For Vault, player stats, etc.
  miniplaceholders: true    # For modern placeholder support

disable-italics: true  # Cleaner inventory/item formatting

ignore-legacy: true    # Convert § to & automatically

listeners:
  system-messages: true   # Chat, announcements, plugin messages
  tablist: true           # Tab header/footer
  titles: true            # Title/subtitle messages
  scoreboards: true       # Scoreboard teams (may need tuning)
  inventory:
    title: true           # Menu titles
    items: true           # Item names and lore in menus
  items: true             # Items in world/player inventory
# plugins/Runway/placeholders.yml

custom-placeholders:
  # Branding
  server_name: '<bold><gradient:red:orange:yellow:green:blue:purple>RAINBOW SERVER</gradient></bold>'
  server_prefix: '<gradient:blue:cyan>[RS]</gradient>'
  
  # UI Components
  separator: '<dark_gray><strikethrough>                                                  </strikethrough></dark_gray>'
  arrow_right: '<dark_gray>→</dark_gray>'
  arrow_left: '<dark_gray>←</dark_gray>'
  bullet: '<dark_gray>•</dark_gray>'
  
  # Status indicators
  online_indicator: '<green>●</green>'
  offline_indicator: '<red>●</red>'
  
  # Common icons
  coin_icon: '<gold>⛃</gold>'
  heart_icon: '<red>❤</red>'
  star_icon: '<yellow>⭐</yellow>'
  warning_icon: '<red>⚠</red>'
  info_icon: '<blue>ℹ</blue>'

Testing Your Configuration

1

Test MiniMessage parsing

/runway parse <gradient:red:blue>Test Message</gradient>
Should show formatted gradient text.
2

Test placeholder resolution

/runway parse [p]Your name is %player_name%
Should replace %player_name% with your actual name.
3

Test custom placeholders

/runway parse <server_prefix> Welcome!
Should show your custom prefix from placeholders.yml.
4

Test plugin integration

Send a test message through your chat plugin or open a GUI menu to verify formatting appears correctly.
5

Reload after changes

/runway reload
Always reload after editing configuration files.

Common Recipes

Gradient Player Names

format: '[mm][p]<gradient:{color1}:{color2}>%player_name%</gradient>'

Clickable Help

help: '[mm]<click:run_command:/help><green>[?]</green></click>'

Hover Info

rank: '[mm]<hover:show_text:"<aqua>VIP Member">[VIP]</hover>'

Action Bar Updates

status: '[mm][p][actionbar]<yellow>Coins:</yellow> <gold>%vault_eco_balance%</gold>'

Rainbow Text

message: '[mm]<rainbow>Rainbow message!</rainbow>'

Styled Separators

separator: '[mm]<gradient:blue:purple><strikethrough>          </strikethrough></gradient>'

Additional Resources

MiniMessage Format

Complete MiniMessage tag reference

PlaceholderAPI Placeholders

Available PlaceholderAPI placeholders

MiniMessage Web Viewer

Test MiniMessage formatting online

Color Picker

Generate gradient colors

Build docs developers (and LLMs) love