Official Documentation

Auric Chat

A chat plugin focused on simple configuration, built for servers that want full control without the bloat.

PlaceholderAPI · MiniPlaceholders · Packet Chat Bubbles

AuricChat handles formatting, nicknames, private messages, broadcasts, moderation filters and rank prefixes from a single, thoroughly commented config.yml. Every visible message is bilingual out of the box (English and Spanish) and every format string supports full MiniMessage — gradients, hovers, click actions and all.

No dependencies required: LuckPerms, PlaceholderAPI, MiniPlaceholders and packetevents are all completely optional. AuricChat detects each one at startup (and again on /auricchat reload) and quietly enables the matching features — everything else keeps working standalone.

At a glance

Everything you need to know

Whether you're running a small survival server or a full network, this wiki covers every feature, command, permission and configuration option AuricChat has to offer.

Dual Placeholder Support

Every token works both as a PlaceholderAPI %auricchat_x% placeholder and a native MiniPlaceholders <auricchat_x> tag, side by side.

Safe by Default

Chat formatting, nicknames and mentions are parsed through restricted or literal-text MiniMessage layers so players can never inject formatting they're not allowed to use.

Ranks Without LuckPerms

Three interchangeable modes in ranks.yml — pull straight from LuckPerms, match its groups to your own list, or skip LuckPerms entirely using permissions.

Packet Chat Bubbles

An experimental floating text bubble above the sender's head, rendered client-side via packetevents — no permanent entities, no world edits.

Capabilities

Key Features

Everything below is a toggle in config.yml — nothing requires editing code or restarting to test, since /auricchat reload picks up every change live.

MiniMessage Chat Format

One format string controls the whole chat line — {prefix}, {name}, {suffix}, hover text, click-to-whisper, gradients, all of it.

Auto-Link URLs

Players without formatting permission still get clickable links when they paste a plain URL into chat.

Cooldown & Slow Mode

A fixed per-message cooldown plus an admin-toggleable /chatslow for events — the stricter of the two always applies.

Duplicate Message Filter

Blocks near-identical repeats within a time window, with a configurable character-difference tolerance instead of a strict exact match.

Player & Group Mentions

@name highlights and pings a specific player (by username or nickname); @admin / @staff pings every online player with the matching permission.

Anti-Caps & Anti-Swear

Lower-cases excess capitals past a configurable limit and censors a custom word list — both filter the message only, no automatic punishment.

Nicknames

Length limits and uniqueness checks by default, with an optional permission to allow full MiniMessage styling for trusted ranks.

Private Messages & Social Spy

/msg, /reply and /ignore, plus a /socialspy toggle so staff can review private conversations, console included.

Broadcasts

Multi-line announcements via tab completion, automatic centering, an optional border, and a rotating auto-broadcast on a timer.

Join, Quit, Death & Advancement Messages

Replaces each vanilla broadcast with your own template, including a distinct first-join message and a real {attacker}/{victim} death cause.

Emoji Shortcodes

Over 40 shortcodes like :fire: or :) turn into real emoji for everyone, no permission required — fully editable.

Reference

Commands

Every command below also works as /auricchat <name> <args> (e.g. /auricchat nick Steve). The standalone commands like /msg, /broadcast and /clearchat keep working exactly the same either way.

/auricchat [help]
Shows the command list. Running /auricchat with no arguments does the same thing. Aliases: /ac
/auricchat reload
Reloads config.yml, both language files and ranks.yml, restarts the auto-broadcast timer, and re-checks for PlaceholderAPI/MiniPlaceholders in case they were installed afterward. Permission: auricchat.command.reload
/auricchat preview [rank] [message]
Shows you exactly how your chat format renders. With no arguments, previews your own live prefix/suffix. Give it a key from ranks.yml to preview as that rank instead, and optionally a custom sample message. Permission: auricchat.command.preview
/msg <player> <message>
Sends a private message. Accepts a real username or a nickname. Aliases: /tell, /w, /whisper · Permission: auricchat.command.msg
/reply <message>
Replies to the last private message you sent or received. Alias: /r · Permission: auricchat.command.reply
/ignore <player>
Toggles ignoring private messages from that player. Running it again on the same player un-ignores them. Permission: auricchat.command.ignore
/socialspy
Toggles seeing every private message sent between other players. Permission: auricchat.command.socialspy
/nick <nickname|off>
Sets or removes your chat nickname. Length and uniqueness are enforced unless you have the unsafe permission, and </> are blocked unless you have the custom-format permission. Permission: auricchat.command.nick (+ .custom, .unsafe)
/broadcast <message>
Sends a server-wide announcement. Press tab while typing to insert line2:, line3: and so on for line breaks — everything after each marker becomes its own centered line. Alias: /bc · Permission: auricchat.command.broadcast
/chatslow <seconds|off>
Sets a temporary slow mode for everyone in chat, on top of the base message-cooldown from config.yml. Permission: auricchat.command.chatslow
/chatmute <duration|off>
Mutes the entire chat for everyone without auricchat.bypass.chatmute. Accepts compound durations like 10m, 1h or 1h30m, or no duration at all for a permanent mute until off. Permission: auricchat.command.chatmute
/clearchat
Pushes everyone's chat history off-screen with a configurable number of blank lines. Permission: auricchat.command.clearchat

Access control

Permissions

Every command has its own node under auricchat.command.*, so you can hand out individual features without granting the rest.

Example: auricchat.admin has every staff command as a child node — granting just that one permission is the same as granting reload, preview, msg, reply, ignore, socialspy, nick, broadcast, chatslow, chatmute and clearchat individually.

General

auricchat.admin

Parent node for every staff command, plus receiving update notifications when a new version is available on Modrinth.

Commands

auricchat.command.reload

Reload the configuration and language files.

auricchat.command.preview

Preview your own (or any rank's) chat format.

auricchat.command.msg

Send private messages. Granted to everyone by default.

auricchat.command.reply

Reply to the last private message. Granted to everyone by default.

auricchat.command.ignore

Ignore or stop ignoring a player. Granted to everyone by default.

auricchat.command.socialspy

View other players' private messages.

auricchat.command.nick

Change your own chat nickname. Granted to everyone by default.

auricchat.command.nick.custom

Allows colors and MiniMessage formatting inside the nickname itself.

auricchat.command.nick.unsafe

Bypasses the nickname length and uniqueness checks from config.yml.

auricchat.command.broadcast

Send server-wide announcements.

auricchat.command.chatslow

Toggle chat slow mode.

auricchat.command.chatmute

Mute or unmute the entire chat temporarily.

auricchat.command.clearchat

Clear the chat for everyone on the server.

Bypass

auricchat.bypass.chatmute

Keep chatting even while the chat is muted.

auricchat.bypass.chatslow

Ignore both the base cooldown and any active slow mode.

auricchat.bypass.filters

Skip the duplicate-message check, the allowed-pattern regex, anti-caps and anti-swear.

Chat Formatting

auricchat.chat.format

Use safe MiniMessage formatting — colors, gradients, decorations — inside typed chat messages. Off for everyone by default.

auricchat.chat.advanced

Everything chat.format allows, plus clickable links and click/hover actions. Keep this op-only.

Group Mention Notifications

auricchat.notification.admin

Receives the highlight and sound when someone writes @admin in chat.

auricchat.notification.staff

Receives the highlight and sound when someone writes @staff in chat. Both are defined under chat.group-mentions in config.yml and can be renamed or extended freely.

Ranks

auricchat.rank.<key>

Only used when ranks.yml is set to mode: 'permissions'. The <key> must match one of your rank keys exactly (e.g. auricchat.rank.owner). See Ranks & Prefixes for the full explanation.

Setup

Configuration Guide

config.yml controls every aspect of AuricChat. Every single option in the file ships with a bilingual comment above it (English then Spanish), so this guide follows the exact same order top to bottom.

1 General

The four settings at the top of the file: which language to use, what to call the console, where nicknames/ignore lists are saved, and whether to check Modrinth for updates on startup.

language

Must match a file in the languages folder (en or es out of the box). Falls back to en if the file doesn't exist.

console-name

What AuricChat calls the console wherever a sender name is shown, such as /clearchat's broadcast. Not tied to language — it's your own choice.

storage.file

The YAML file, inside the plugin folder, where nicknames and ignore lists live.

check-updates

Checks Modrinth once on startup. If a newer version exists, staff with auricchat.admin get notified on join and a warning is logged to console.

View example
YAML
language: 'en'
check-updates: true
console-name: 'Console'

storage:
  file: 'data.yml'

2 Chat Formatting

One template controls how every chat line looks. It's parsed as MiniMessage, so hovers, click actions and gradients all work directly inside it.

{player}

The player's real Minecraft username, ignoring any nickname.

{name}

The player's nickname if they've set one with /nick, otherwise their real username.

{id}

The player's UUID.

{prefix} / {suffix}

Resolved from ranks.yml — see Ranks & Prefixes for the three ways this can work.

<message>

Where the actual typed text goes. This is the only MiniMessage tag (not a curly-brace token) since it's inserted as a pre-built component, never re-parsed.

View example
YAML
chat:
  formatting:
    enabled: true
    format: '<hover:show_text:"<gray>Click to whisper</gray>"><click:suggest_command:"/msg {player} ">{prefix}{name}{suffix}</click></hover><dark_gray> » </dark_gray><white><message></white>'

Whatever a player actually types is always inserted as literal text through <message>, never re-parsed. Colors and click actions typed in chat itself are a separate system — see the next section.

4 Message Cooldown & Allowed Pattern

A base throttle on how often anyone can send a message, and an optional whitelist regex for message content.

message-cooldown

Seconds a player must wait between messages. 0 disables it. Combines with /chatslow — whichever is stricter at that moment wins.

allowed-pattern

A regex the whole message must match to be allowed. Leave empty to disable — this is off by default since it's easy to lock chat down too far with an overly strict pattern.

View example
YAML
chat:
  message-cooldown: 2
  allowed-pattern: ''

5 Duplicate Message Check

Blocks a message that's too similar to the same player's previous one, using a Levenshtein-style character distance rather than a strict exact match.

seconds

Only compares against the previous message if it was sent within this window.

ignore-spacing

Strips spaces, punctuation and symbols before comparing, so only letters and numbers count.

max-difference

How many characters two messages can differ by and still count as duplicates. 0 means only exact matches are blocked.

View example
YAML
chat:
  duplicate-check:
    enabled: true
    seconds: 30
    ignore-spacing: true
    max-difference: 2

6 Mentions & Group Mentions

@name highlights and plays a sound to a specific player — it matches both real usernames and nicknames. group-mentions defines extra keywords, like @admin, that notify everyone online with the matching permission instead of one player. Group mention keys also show up in the client's own @ chat suggestions.

color

Must be a named Adventure color (like yellow or red), not a hex code. Falls back to yellow if invalid.

sound.name

Any name from Paper's Sound enum. An invalid name just skips the sound instead of erroring.

View example
YAML
chat:
  mentions:
    enabled: true
    color: 'yellow'
    sound:
      enabled: true
      name: 'ENTITY_EXPERIENCE_ORB_PICKUP'
      volume: 1.0
      pitch: 1.0

  group-mentions:
    admin:
      permission: 'auricchat.notification.admin'
    staff:
      permission: 'auricchat.notification.staff'

7 Anti-Caps & Anti-Swear

Two independent, off-by-default filters that only touch the message itself — neither one warns, mutes or punishes the player. See Moderation for how these fit together with the rest of the toolkit.

anti-caps.max-chars

Uppercase letters beyond this count get lower-cased automatically.

anti-swear.words

A plain list of words to censor, not case-sensitive. Empty by default.

anti-swear.replacement-char

The character used to replace each letter of a censored word, e.g. f***.

View example
YAML
chat:
  anti-caps:
    enabled: false
    max-chars: 10

  anti-swear:
    enabled: false
    replacement-char: '*'
    words: []

8 Nickname Length

Only the length boundaries live here — the uniqueness check (no two players sharing the same visible nickname) always runs regardless of these values, and both can be bypassed entirely with auricchat.command.nick.unsafe.

View example
YAML
nickname:
  min-length: 2
  max-length: 16

9 Private Messages

Controls how /socialspy and console logging behave for private messages sent through /msg.

console-socialspy

Always logs private messages to console, independent of whether any player has /socialspy toggled on.

socialspy-format

Uses {player} and {receiver} — real usernames, not nicknames, so staff can always identify the real accounts involved.

View example
YAML
private-messages:
  console-socialspy: true
  socialspy-format: '<dark_gray>[<gray>Spy<dark_gray>] <white>{player} <dark_gray>-> <white>{receiver}<dark_gray>:</dark_gray> <gray><message></gray>'

10 Join & Quit Messages

Both replace the vanilla broadcast entirely. Join messages support a distinct first-join template shown only the very first time a player ever connects — both use the same {prefix}/{name}/{suffix} tokens as chat formatting, minus <message>.

View example
YAML
join-message:
  enabled: true
  format: '<green>[+] {prefix}{name}{suffix}</green>'
  first-join:
    enabled: true
    format: '<gold>[+] Welcome for the first time, {name}!</gold>'

quit-message:
  enabled: true
  format: '<red>[-] {prefix}{name}{suffix}</red>'

11 Death & Advancement Messages

Both are off by default. Death messages resolve {attacker} from the real last damage source — a player (by nickname), another entity, or an environmental cause — not from parsing the vanilla death text, so it always matches your configured language. {victim} is the one who died. Pet deaths reuse the exact same {attacker} logic and add {pet} for the animal type.

hide-vanilla

If enabled is false, this alone removes the vanilla death message without showing a custom one instead.

pets.enabled

Only fires for tamed animals with an online player owner.

{achievement}

The advancement name, exactly as Minecraft would show it in brackets.

View example
YAML
death-message:
  enabled: false
  hide-vanilla: false
  format: '<gray>{prefix}{name}{suffix} was defeated by {attacker}</gray>'
  pets:
    enabled: false
    format: '<gray>{prefix}{name}{suffix}''s {pet} was defeated by {attacker}</gray>'

advancement-message:
  enabled: false
  format: '<yellow>{prefix}{name}{suffix} has made the advancement [{achievement}]</yellow>'

12 Broadcasts

Covers both manual /broadcast messages and the automatic rotating announcer.

centered

Pads each line with spaces so it looks centered in a default-width chat box.

border.line

A decorative line printed above and below every broadcast. Leave enabled: false to skip it.

auto.messages

Sent in order on a loop every interval-seconds, looping back to the first message at the end.

View example
YAML
broadcast:
  format: '<yellow><message></yellow>'
  centered: true
  border:
    enabled: true
    line: '<dark_gray><strikethrough>                    </strikethrough></dark_gray>'
  auto:
    enabled: false
    interval-seconds: 600
    messages:
      - 'Welcome to the server! Remember to read the rules.'
      - 'Need help? Ask the staff team.'

Type line2:, line3: and so on inside /broadcast (tab-completed for you) to split one announcement into several independently centered lines.

13 Clear Chat

A single number: how many blank lines /clearchat sends to every online player to push old messages off-screen.

View example
YAML
clearchat:
  empty-lines: 100

14 Chat Bubbles EXPERIMENTAL

Shows a floating text bubble above the sender's head whenever they chat, following them for the configured duration. AuricChat picks the best available renderer automatically — nothing to choose in config.yml.

With packetevents Best performance

The bubble is sent as raw packets and rendered entirely by the client — the server never tracks a real entity for it, so there's effectively no server-side overhead beyond sending a few packets per tick.

Without packetevents Fallback

AuricChat spawns a real, temporary TextDisplay entity through the standard Paper API instead. It still follows the player and removes itself automatically, but — being a real entity — it costs a little more than the packet-only version, and visibility follows normal view-distance rules rather than the radius setting below.

duration-seconds

How long the bubble stays visible (and keeps following the player) before it's removed, in either mode.

radius

How many blocks away another player can be and still see the bubble. Only enforced in packet mode — see above.

View example
YAML
chat-bubbles:
  enabled: false
  duration-seconds: 5
  radius: 32

packetevents is fully optional. Installing it doesn't unlock the feature — it just switches this feature to the lighter, client-side rendering path. Check your console log on startup for a line confirming which mode is active.

15 Emojis

A shortcode-to-emoji dictionary applied to every message, for every player, no permission required. Over 40 shortcodes are included by default — add, remove or rename any of them freely.

View example
YAML
emojis:
  enabled: true
  list:
    ':)': '🙂'
    ':fire:': '🔥'
    ':heart:': '❤️'
    '<3': '❤️'

Deep dive

Ranks & Prefixes

ranks.yml decides where {prefix} and {suffix} come from. It's a completely separate file from config.yml so you can hand it to a co-owner without giving them the rest of the settings.

Everything is controlled by a single mode key, which can be one of three values:

'luckperms' Default

Prefix and suffix are pulled straight from LuckPerms, exactly as LuckPerms itself has them configured. The list below mode in ranks.yml is ignored entirely.

'luckperms-groups'

AuricChat still asks LuckPerms for the player's primary group, but looks up the prefix/suffix from your own list below instead of from LuckPerms directly — useful when you want AuricChat's chat prefixes to look different from LuckPerms' own tab-list or nametag prefixes.

'permissions' No LuckPerms needed

LuckPerms isn't touched at all. Each key in the list below becomes a permission, auricchat.rank.<key> — the first one the player has wins.

View example — ranks.yml
YAML
mode: 'luckperms'

owner:
  prefix: '<gradient:#ff5100:#ffce00><b>[Owner]</b></gradient> '
  suffix: ''
staff:
  prefix: '<gold>[Staff]</gold> '
  suffix: ''

Order matters in 'permissions' mode. Ranks are checked top to bottom, and the first key the player has auricchat.rank.<key> for wins — so put your highest rank first, same idea as weight in a permissions plugin.

Testing a rank without switching it live

/auricchat preview <rank> [message] renders the chat format using that rank's prefix/suffix, without needing to actually hold the permission or LuckPerms group yourself. Tab completion suggests every valid key for the current mode.

Deep dive

Moderation Toolkit

Five independent tools that can be mixed and matched — none of them are punishments, they only affect what actually reaches other players. Combine them with a real punishment plugin for anything that needs to leave a mark on a player's record.

Always-on filters
Anti-caps and anti-swear quietly rewrite the message before it's sent — lower-casing excess capitals, censoring listed words. The player never sees an error, the message just looks different to everyone else.
Rejected outright
Duplicate check and allowed-pattern block the message entirely and show the player a rejection message instead of silently altering it — the difference is these two stop a message from sending at all, while anti-caps/anti-swear let it through in a modified form.
Two layers of throttling
message-cooldown in config.yml is the permanent baseline. /chatslow is a temporary, admin-toggled layer on top for busy moments — whichever of the two is currently stricter for a given player is the one that applies.
The nuclear option
/chatmute stops chat completely, for everyone without auricchat.bypass.chatmute. Give it a duration for a timed mute, or nothing at all for a permanent one you lift manually with /chatmute off.

Bypassing the toolkit

Three permissions let specific players skip parts of this — none of them are granted by default:

auricchat.bypass.filters

Skips duplicate check, allowed-pattern, anti-caps and anti-swear all at once.

auricchat.bypass.chatslow

Ignores both message-cooldown and any active /chatslow.

auricchat.bypass.chatmute

Keeps chatting normally even while /chatmute is active.

All three bypass permissions default to op. Most public-facing ranks should never need them — they exist for staff who need to communicate during an active mute or slow mode, not as a reward tier.

Integration

Placeholders

AuricChat registers the same five values twice — once as a PlaceholderAPI expansion, once as a native MiniPlaceholders expansion — so you can use whichever your other plugins already expect, or both at once.

%auricchat_name%

MiniPlaceholders: <auricchat_name>
The player's nickname if set, otherwise their real username.

%auricchat_player%

MiniPlaceholders: <auricchat_player>
Always the real Minecraft username, ignoring any nickname.

%auricchat_hasname%

MiniPlaceholders: <auricchat_hasname>
Resolves to true or false — whether the player currently has a nickname set.

%auricchat_prefix%

MiniPlaceholders: <auricchat_prefix>
The player's rank prefix, resolved through whichever ranks.yml mode is active.

%auricchat_suffix%

MiniPlaceholders: <auricchat_suffix>
The player's rank suffix, same resolution as the prefix above.

View example — using AuricChat placeholders elsewhere
TEXT
PlaceholderAPI syntax (TAB menus, scoreboards, other plugins):
  %auricchat_name%
  %auricchat_prefix%

MiniPlaceholders syntax (native Adventure tag, no string parsing):
  <auricchat_name>
  <auricchat_prefix>

Both expansions are detected automatically — nothing to enable in config.yml. If you install PlaceholderAPI or MiniPlaceholders after AuricChat has already started, running /auricchat reload picks them up without a restart.