Text and Placeholders
MiniMessage formatting, gradients, hex colours, and PlaceholderAPI in voucher text.
Every piece of text in ProVouchers (display names, lore, messages, broadcasts, titles, action bars) is rendered with MiniMessage, and PlaceholderAPI is resolved first when it is installed. This is handled by Strata's text renderer, so the behaviour is consistent everywhere.
MiniMessage basics
MiniMessage uses XML-like tags instead of legacy & codes:
display-name: "<gold>Crate Key"
lore:
- "<gray>Right-click to open"
- "<red>Limited time only"Common tags:
| Tag | Effect |
|---|---|
<gold>, <red>, <gray> | Named colours |
<#FF8800> | Any hex colour |
<bold>, <italic>, <underlined> | Decorations |
<gradient:#FFD700:#FF4500>text</gradient> | A colour gradient |
<rainbow>text</rainbow> | A rainbow |
<hover:show_text:'...'>text</hover> | Hover tooltip |
<click:run_command:'/spawn'>text</click> | Clickable text |
display-name: "<gradient:#FFD700:#FF7F50:#FF4500>Stratosphere</gradient>"
lore:
- "<gray>A pair of <#FFD700>golden</#FFD700> wings"
- "<italic><dark_gray>Season 1</dark_gray></italic>"For the full tag list, see the MiniMessage format reference.
Lore tips
-
An empty string is a blank line:
lore: - "<gray>First line" - "" - "<dark_gray>Footer" -
Names and lore are shown without the default purple italic styling, so what you write is what players see.
PlaceholderAPI
When PlaceholderAPI is installed, its placeholders are resolved in any ProVouchers text, rendered for the redeeming or viewing player:
lore:
- "<gray>Balance: <gold>%vault_eco_balance%"
rewards:
- "message: <green>Welcome back, %player_displayname%!"Resolution order matters
PlaceholderAPI placeholders are resolved first, then the result is parsed as
MiniMessage. This order is fixed and deliberate: doing it the other way around
would let a placeholder's output be reinterpreted as formatting tags. In practice,
write your MiniMessage as normal and drop %placeholders% in wherever you need
dynamic values.
ProVouchers tokens vs placeholders
ProVouchers also substitutes a few tokens (%player%,
{arg}, {random:min-max}) before MiniMessage. These are always available, even
without PlaceholderAPI. Use %player% for the player's name in any text or reward.
When there is no resource pack
Colours, gradients, and decorations are all part of the chat protocol and need no
resource pack. Only custom-model-data and custom provider item models require a
pack (see Items).