Sueta

RPChatPlus

v2.0.0

Simple roleplay-chat setup (Global, local, staff-chat, rp-chat)

·Plugin

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 — /msg and /r (reply), spied on by staff with spy mode
  • Chat spy — staff silently monitor every channel without leaving their own
  • Mentions — @PlayerName highlights 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.color can 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 reload refreshes both config and messages without a restart
  • Fully translatable — every user-facing string is in messages.yml

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

▌ Commands

CommandDescriptionPermission
/global [message]Switch to or send in global chatrpchatplus.global
/local [message]Switch to or send in local (radius) chatrpchatplus.local
/staff [message]Switch to or send in staff chatrpchatplus.staffchat
/rp [message]Switch to or send in RP chatrpchatplus.rp
/msg <player> <message>Send a private messagerpchatplus.msg
/r <message>Reply to your last PMrpchatplus.msg
/rpc reloadReload config and messagesrpchatplus.reload
/rpc spyToggle chat spy moderpchatplus.spy
/rpc mute <player> [channel] [seconds]Mute a player in a channelrpchatplus.mute
/rpc unmute <player> [channel]Unmute a playerrpchatplus.unmute
/rpc info <player>View a player's chat statusrpchatplus.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

NodeDefaultDescription
rpchatplus.*OPAll permissions
rpchatplus.globalEveryoneUse global chat
rpchatplus.localEveryoneUse local chat
rpchatplus.rpEveryoneUse RP chat
rpchatplus.staffchatOPUse staff chat
rpchatplus.msgEveryoneSend private messages
rpchatplus.spyOPChat spy mode
rpchatplus.muteOPMute players in channels
rpchatplus.unmuteOPUnmute players
rpchatplus.reloadOPReload configuration
rpchatplus.infoOPView player chat info
rpchatplus.colorNoneUse & color codes in chat
rpchatplus.bypass.cooldownOPSkip cooldown restrictions
rpchatplus.bypass.antispamOPSkip anti-spam checks
rpchatplus.bypass.muteOPBypass channel mutes

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

▌ Configuration

Everything is configured in plugins/RPChatPlus/config.yml. Every setting has an inline comment explaining it.

Format string variables:

VariableReplaced 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 limit
RP 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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

▌ 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 →