What players may type
Channel formats are yours; the message body is not. Everything a player writes goes
through a permission gate before it is parsed, configured in
modules/minimessage-tags.yml.
Regular players cannot use any formatting until you grant it. Tags they may not use
are shown as plain text or removed, depending on unauthorized-mode.
unauthorized-mode
Section titled “unauthorized-mode”| Mode | What happens to a disallowed tag |
|---|---|
escape |
it stays visible as literal text, e.g. <red> |
strip |
it is removed from the message |
Colors and formatting
Section titled “Colors and formatting”| Permission | What it unlocks |
|---|---|
voxen.chat.tag.color |
named colors: <red>, <gold>, <color:red> |
voxen.chat.tag.hex |
hex colors: <#ff0000>, <color:#ff0000> |
voxen.chat.tag.gradient |
<gradient:...> |
voxen.chat.tag.rainbow |
<rainbow> |
voxen.chat.tag.transition |
<transition:...> |
voxen.chat.tag.pride |
<pride> flag gradients |
voxen.chat.tag.keybind |
<key:...> client keybind names |
voxen.chat.tag.font |
<font:...>, disabled by default, needs a resource pack |
voxen.chat.tag.newline |
<newline>, disabled by default, fake message risk |
voxen.chat.tag.bold |
<bold> |
voxen.chat.tag.italic |
<italic> |
voxen.chat.tag.underlined |
<underlined> |
voxen.chat.tag.strikethrough |
<strikethrough> |
voxen.chat.tag.obfuscated |
<obfuscated> |
voxen.chat.tag.hover |
<hover:...> |
voxen.chat.tag.click |
<click:...>, each action also has its own node |
voxen.chat.tag.insertion |
<insertion:...> |
voxen.chat.tag.shadow |
<shadow:#RRGGBB> |
voxen.chat.tag.sprite |
<sprite:...> item and mob icons, needs MiniMessage 5+ |
voxen.chat.tag.head |
<head:...> player heads, needs MiniMessage 5+ |
voxen.chat.tag.translatable |
<lang:...>, disabled by default |
voxen.chat.tag.fallback |
<lang_or:...>, disabled by default |
voxen.chat.tag.selector |
<selector:...>, disabled by default |
voxen.chat.tag.score |
<score:...>, disabled by default |
voxen.chat.tag.nbt |
<nbt:...>, disabled by default |
voxen.chat.tag.reset |
<reset> |
voxen.chat.tag.* |
everything above at once |
voxen.chat.legacy.color |
&c style color codes |
voxen.chat.legacy.hex |
&#ff0000 style hex codes |
voxen.chat.legacy.format |
&l, &o style format codes |
voxen.chat.legacy.* |
all legacy codes at once |
<selector>, <score>, <nbt>, <lang> and <lang_or> are disabled in the config by
default: they read server-side data or let a player imitate another message. Enable them
in modules/minimessage-tags.yml only for ranks you trust.
Legacy codes need legacy.enabled: true in modules/minimessage-tags.yml on top of the
permission.
Gating single arguments
Section titled “Gating single arguments”The base node allows every argument of a tag. Base node plus the arguments, with :
replaced by ., allows exactly one combination:
voxen.chat.tag.gradient.red.blueThat player can write <gradient:red:blue> and nothing else.
The same nodes work as denials. Setting one to false in LuckPerms blocks that use
even for someone holding the base node:
voxen.chat.tag.color.red: falseFor colors this covers both spellings, <color:red> and <red>.
If one message contains both a permitted and an unpermitted use of the same tag, that tag stays unparsed for the whole message.
Placeholders in messages
Section titled “Placeholders in messages”Players can also be allowed to put placeholders in what they type. These are gated the same way, down to a single placeholder:
| Permission | Effect |
|---|---|
voxen.chat.papi |
parses every %papi% placeholder |
voxen.chat.papi.player_health |
parses only %player_health% |
voxen.chat.miniplaceholders |
parses every MiniPlaceholders tag |
voxen.chat.miniplaceholders.luckperms_prefix |
parses only <luckperms_prefix> |
Colors coming out of a PlaceholderAPI placeholder additionally need the matching
voxen.chat.legacy.* permission, otherwise the codes are left alone.
Per-tag config
Section titled “Per-tag config”Under tags: in modules/minimessage-tags.yml every built-in tag can be disabled, given
a different permission, aliases, and blocked-params — a list of regexes checked against
the tag’s arguments. click additionally takes per-action permissions under actions:.
custom-tags: gates tags rendered by other plugins, for example Nexo glyphs:
custom-tags: glyph: enabled: true permission: voxen.chat.tag.glyphvoxen.chat.tag.glyph allows every argument, voxen.chat.tag.glyph.smile allows only
<glyph:smile>. Voxen does not render these tags itself, it only decides whether they
survive in the message. Prefer strip here, since an escaped tag may still be picked up
by whichever plugin renders it.