Only show guides for your app
Shape how chat looks and behaves — rank prefixes on every message, separate channels for staff or local talk, and filters that catch spam and swearing — with the plugins that handle each job.
Default Minecraft chat is a flat grey list of <name> message. A chat plugin turns that into something that reads like a real community — rank prefixes and colors on every line, a staff-only channel, a local chat that only nearby players hear, and filters that quietly stop spam and slurs. This guide sorts the jobs into the plugins that do them and the dependencies that make prefixes possible.
| At a glance | |
|---|---|
| You need | A plugin-capable server (Purpur, PaperSpigot, Spigot family) |
| Foundation | LuckPerms for ranks, Vault so a chat plugin can read them |
| Plan | Any |
"Chat plugins" is really three different needs, and one plugin rarely does all three well:
| Job | What it means | Typical tool |
|---|---|---|
| Formatting | Prefixes, colors, and layout on each message | EssentialsX Chat, or a dedicated chat-format plugin |
| Channels | Separate conversations — global, local, staff, per-world | A channels-capable chat plugin |
| Filters | Block or mute spam, swearing, advertising, caps | An anti-spam / chat-filter plugin |
Start with formatting — it's the one every server wants — and add channels and filters only when you actually need them.
The look most people are after is [Admin] Steve: hello with the rank in color. That comes from two plugins working together:
prefix on each group). See Building a rank ladder.EssentialsX Chat reaches LuckPerms' prefixes through Vault — the API glue that lets a chat plugin, a permissions plugin, and an economy find each other. So the chain is: LuckPerms defines the prefix → Vault exposes it → the chat plugin displays it. Install all three and set a format string like:
format: '{PREFIX}{DISPLAYNAME}&7: &f{MESSAGE}'
{PREFIX} pulls the LuckPerms group prefix, {DISPLAYNAME} is the player's name, and the &-codes color the rest. The exact placeholder names belong to whichever chat plugin you use, so check its config — but the pattern is universal.
🎯 Good to know: If you already run TAB for the tab list, note it does not format chat — TAB handles the player list and nametags, a chat plugin handles the messages. They're complementary, not overlapping.
Once a server grows, one giant chat gets noisy. Channel-capable chat plugins let you split it:
Players usually switch or send to a channel with a command or a prefix character. Set up only the channels you'll use — a staff channel and maybe local is plenty for most servers.
A filter plugin watches messages and acts on the ones that break your rules — muting a spammer, censoring a word, blocking someone pasting another server's IP. Most let you tune a word list, a caps limit, a repeat/rate limit, and an anti-advertising rule.
💡 Tip: Filters are blunt instruments — a swear list catches innocent words ("class-ic") and misses creative spellings. Set sensible defaults, tell players the rules, and back the filter with real moderation rather than expecting it to be perfect. The moderation playbook covers the human side.
Whether players (or you) can put colors in messages is usually a permission the chat plugin controls — grant it to staff, restrict it for regular players so chat stays readable. Formatting comes in two dialects: the classic &-codes (&a, &l) and, on modern software, MiniMessage tags (<green>, <bold>). Which one your plugin uses depends on the plugin and version, so treat the syntax as "check the plugin's docs" while the concept — colored, formatted chat gated by permission — stays constant.
Talk in-game: your message should show your rank prefix in color, formatted the way your template says. Switch to a channel and confirm only the right players see it. Trip the filter on purpose (a test spam or a blocked word) and confirm it acts. If prefixes are missing, that's the LuckPerms → Vault → chat-plugin chain, not the chat plugin alone.
{PREFIX} or a raw code — wrong placeholder name for your chat plugin, or Vault missing. Check the plugin's config reference.&-codes and MiniMessage on a plugin that expects the other. Pick the dialect your plugin uses.