Compatibility
Minecraft: Java Edition
1.21.3–1.21.6
Platforms
Creators
Details
Licensed ARR
Published 3 months ago
Updated 4 months ago
CustomMessage
Bring private messaging to your Bukkit/Spigot server with ease! CustomMessage gives your players a clean, familiar DM system complete with clickable usernames, reply & ignore functionality, social-spy for staff, spam control, and fully-customizable formats.
🚀 Key Features
/msg <player> <message>– Send a private DM with a teal ✉ envelope prefix/r <message>– Quickly reply to your last DM without re-typing the recipient/ignore <player>//unignore <player>– Block or unblock DMs from specific users/socialspy(staff only) – See all DMs in real time with a 🛡 SPY prefix- Spam-control – Configurable cooldown between messages to prevent abuse
- Clickable JSON chat – Click any “Me”, player name, or “You” in DMs to open a
/msgprompt - Fully configurable – Change every prefix, color, usage message, cooldown, and more in
config.yml
📋 Commands & Permissions
| Command | Permission | Default | Description |
|---|---|---|---|
/msg |
custommessage.msg |
✔️ | Send a private message |
/r |
custommessage.msg |
✔️ | Reply to your last private message |
/ignore |
custommessage.ignore |
✔️ | Toggle ignoring DMs from a player |
/unignore |
custommessage.ignore |
✔️ | Stop ignoring a player’s DMs |
/socialspy |
custommessage.socialspy |
OP | Toggle social-spy (staff only) to watch every DM |
Staff note: Anyone with
custommessage.socialspy(default: OP) will see every DM prefixed with 🛡 SPY.
⚙️ Configuration (config.yml)
# config.yml
# ─── Chat formats ─────────────────────────────────────────────────────────
formats:
msg: '&7[Msg] &f%sender% &8→ &f%target% &8: &7%message%'
spy: '&7[Spy] &f%sender% &8→ &f%target% &8: &7%message%'
# ─── Spam control ─────────────────────────────────────────────────────────
# seconds between allowed /msg’s per player
cooldown-seconds: 2
# warning when you hit cooldown (%seconds% will be filled in)
cooldown-message: '&cSlow down! Wait %seconds%s before messaging again.'
# ─── /r (reply) ───────────────────────────────────────────────────────────
reply:
usage: '&eUsage: /r <message>'
no-partner: '&cNo one to reply to.'
offline: '&cYour last chat partner is offline.'
# ─── /ignore & /unignore ───────────────────────────────────────────────────
ignore:
usage: '&eUsage: /ignore <player>'
on: '&cYou are now ignoring &f%target%'
off: '&aYou are no longer ignoring &f%target%'
invalid: '&cInvalid player.'
self: '&cYou cannot ignore yourself.'
blocked: '&cThat player is ignoring you.'
unignore:
usage: '&eUsage: /unignore <player>'
on: '&aYou are no longer ignoring &f%target%'
off: '&eYou were not ignoring &f%target%'
# ─── /socialspy ───────────────────────────────────────────────────────────
socialspy:
on: '&aSocialSpy on'
off: '&cSocialSpy off'
no-permission: '&cYou must be OP to toggle social spy.'
# ─── Generic fallbacks ────────────────────────────────────────────────────
no-permission: '&cYou don’t have permission for that.'
only-players: '&cOnly players can run that command.'
usage-msg: '&eUsage: /msg <player> <message>'



