MiniMessage is a modern text formatting system for Minecraft that replaces legacy color codes with a powerful, tag-based syntax. Unlike traditional &c color codes, MiniMessage supports:
Gradients and smooth color transitions
Hex colors for precise color matching
Interactive elements (hover text, click events)
Font changes and text decorations
Clean, readable syntax
Runway brings MiniMessage support to any plugin by intercepting and processing packets at the protocol level, meaning you can use MiniMessage formatting in plugins that don’t natively support it.
By default, Runway requires the [mm] prefix to identify text that should be formatted with MiniMessage. This prefix can appear anywhere in the text and is removed during processing.
broadcast: "[mm]<gradient:red:blue>Welcome to the server!</gradient>"
Here’s the actual implementation from ProcessHandler.java:66-82:
ProcessHandler.java
boolean requirePrefixMM = config.getOrDefault("require-prefix.minimessage", true);if (requirePrefixMM && !s.contains("[mm]")) { if (s.contains("§")) return Component.text(s); else return miniMessage.deserialize(s);}if (s.contains("§")) { if (ignoreLegacy) { s = s.replace("§", "&"); } else { config.set("ignore-legacy", true); Bukkit.getLogger().log(Level.WARNING, "Detected Legacy colors! Runway is now ignoring legacy colors."); }}s = s.replace("[mm]", "");s = s.replace("\\<", "<");
The prefix is checked first, then removed before processing. You can disable the prefix requirement in config:
config.yml
require-prefix: minimessage: false # Format ALL text with MiniMessage
Disabling the prefix means all plugin messages will be processed as MiniMessage. This may cause issues with plugins that use < and > characters literally.
[mm]<gradient:gold:yellow><bold><hover:show_text:'<green>Click to teleport!'><click:run_command:/spawn>Teleport to spawn</click></hover></bold></gradient>
This creates clickable, hoverable text with a gradient effect.