RPChatPlus
A feature-rich roleplay chat plugin with PlaceholderAPI, Vault & EssentialsX support
Paper / Spigot · Java 17+ · v2.0.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Overview
RPChatPlus started as a small quality-of-life chat plugin for roleplay servers and grew into something much more complete. It handles your entire chat pipeline — from global announcements to whispered emotes — without needing three other plugins to fill the gaps.
Every format string supports PlaceholderAPI out of the box. Vault prefix/suffix is pulled automatically. EssentialsX mutes, vanish, and ignore lists are all respected without any extra configuration. If you don't have any of those installed, the plugin runs perfectly fine on its own.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Features
- Four chat channels — Global, Local (radius-based), Staff, and Roleplay
- PlaceholderAPI — drop any
%placeholder%directly into your format strings - Vault — prefix and suffix pulled from any Vault-compatible permissions plugin
- EssentialsX — respects server mutes, vanish status, and ignore lists
- Private messaging —
/msgand/r(reply), spied on by staff with spy mode - Chat spy — staff silently monitor every channel without leaving their own
- Mentions —
@PlayerNamehighlights the token and plays a ping sound to the recipient - Anti-spam — configurable flood protection and duplicate-message blocking
- Per-channel cooldowns — throttle chat frequency on a per-channel basis
- Channel mutes — mute a player in one specific channel, with optional expiry time
- Color codes — players with
rpchatplus.colorcan use&codes and hex&#rrggbb - Persistent preferences — active channel and spy state survive server restarts (SQLite)
- Tab completion — every command and sub-command has context-aware suggestions
- Hot reload —
/rpc reloadrefreshes both config and messages without a restart - Fully translatable — every user-facing string is in
messages.yml
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Commands
| Command | Description | Permission |
/global [message] | Switch to or send in global chat | rpchatplus.global |
/local [message] | Switch to or send in local (radius) chat | rpchatplus.local |
/staff [message] | Switch to or send in staff chat | rpchatplus.staffchat |
/rp [message] | Switch to or send in RP chat | rpchatplus.rp |
/msg <player> <message> | Send a private message | rpchatplus.msg |
/r <message> | Reply to your last PM | rpchatplus.msg |
/rpc reload | Reload config and messages | rpchatplus.reload |
/rpc spy | Toggle chat spy mode | rpchatplus.spy |
/rpc mute <player> [channel] [seconds] | Mute a player in a channel | rpchatplus.mute |
/rpc unmute <player> [channel] | Unmute a player | rpchatplus.unmute |
/rpc info <player> | View a player's chat status | rpchatplus.info |
Channel command aliases: /g, /gc · /l, /lc · /sc, /staffchat · /roleplay · /tell, /pm, /whisper, /w · /reply
How channel switching works
Running a channel command with no arguments (e.g. /global) toggles your active channel. Every message you type goes there until you switch.
Running it with a message (e.g. /global Hey everyone!) sends a one-off message to that channel without changing your active mode. Handy for a quick staff reply without leaving your RP channel.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Permissions
| Node | Default | Description |
rpchatplus.* | OP | All permissions |
rpchatplus.global | Everyone | Use global chat |
rpchatplus.local | Everyone | Use local chat |
rpchatplus.rp | Everyone | Use RP chat |
rpchatplus.staffchat | OP | Use staff chat |
rpchatplus.msg | Everyone | Send private messages |
rpchatplus.spy | OP | Chat spy mode |
rpchatplus.mute | OP | Mute players in channels |
rpchatplus.unmute | OP | Unmute players |
rpchatplus.reload | OP | Reload configuration |
rpchatplus.info | OP | View player chat info |
rpchatplus.color | None | Use & color codes in chat |
rpchatplus.bypass.cooldown | OP | Skip cooldown restrictions |
rpchatplus.bypass.antispam | OP | Skip anti-spam checks |
rpchatplus.bypass.mute | OP | Bypass channel mutes |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Configuration
Everything is configured in plugins/RPChatPlus/config.yml. Every setting has an inline comment explaining it.
Format string variables:
| Variable | Replaced with |
{player} | Display name (Essentials nickname if available) |
{prefix} | Vault group prefix |
{suffix} | Vault group suffix |
{world} | Current world name |
{message} | The chat message |
%any_papi% | Any PlaceholderAPI placeholder |
Example config snippet
channels:
global:
format: "&8[&6Global&8] &7{prefix}&f{player}&7{suffix}&8: &f{message}"
switch-message: "&aYou are now in &6Global Chat&a."
cooldown: 0
log-to-console: true
local:
format: "&8[&cLocal&8] &7{prefix}&f{player}&7{suffix}&8: &f{message}"
radius: 100
rp:
speech-color: "&f&o"
action-color: "&b&o"
radius: 0 # 0 = no radius limitRP formatting
Wrap text in *asterisks* for actions/emotes. Everything else is treated as speech.
Hello! *waves*Produces: 'Hello!' waves
Speech uses speech-color and actions use action-color — both freely configurable.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Requirements
- Java 17 or newer
- Paper or Spigot 1.19.4+
- (Optional) PlaceholderAPI
- (Optional) Vault + a permissions plugin (e.g. LuckPerms)
- (Optional) EssentialsX
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▌ Source Code
The full source code is available on GitHub. Pull requests and bug reports are welcome.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Made with care by Axmon / Anonventions
Similar projects
Plugin →Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta
Common Network
Forge and Fabric Unified Networking Solution
3.9MSueta
Set Home
A lightweight plugin for players to set their homes.
3.8MSueta