hChat
A modern and complete chat system for Paper 1.18+ servers.
Direct messages, mentions, spy mode, ignored players, broadcasts, offline messages,
word filter, multi-language support, dynamic chat tokens, and more.
Made with Java • Powered by Adventure • MIT License
✨ Features
| Feature | Description |
| Private Messages | Customizable format with hover tooltips and click-to-reply actions. |
| @Mentions | Configurable sound, highlight color and personal notification. |
| Spy Mode | Monitor private messages with a dedicated permission. |
| Ignore System | Persistent per-player ignore lists that survive reloads. |
| Multi-language | YAML localization with per-player language selection. |
| PlaceholderAPI | Built-in placeholders such as spy status, ignored players, DND, last sender and last seen. |
| Hex Colors | Supports & legacy colors and &#RRGGBB hex colors. |
| Hover & Click | Interactive tooltips and clickable actions throughout chat messages. |
| Broadcasts | Manual /bc broadcasts plus an automatic announcement scheduler. |
| Word Filter | Block, mask or warn when blacklisted words are detected. |
| Offline Messages | Send messages to offline players and deliver them when they join. |
| Chat Logger | Rotating daily private-message logs with configurable retention. |
| Dynamic Chat Tokens | [ping], [item], [coords], [world] and [afk] tokens can be embedded into chat formats. |
⚡ Installation
1. Download the latest hChat JAR from the GitHub Releases.
2. Put hChat.jar inside your server's plugins folder.
3. Install the required dependencies:
- Paper 1.20+
- PlaceholderAPI 2.11+
- LuckPerms 5.4+
4. Restart your server.
On first startup, hChat creates:
Code (Text):
plugins/hChat/config.yml
plugins/hChat/lang/lang_en.yml
Code (Text):
/hchat reload
⌨ Commands
| Command | Aliases | Description | Permission |
| /message <player> <message> | /msg, /tell, /w, /m, /whisper | Send a private message. | hchat.message |
| /reply <message> | /r | Reply to the most recent private message. | hchat.reply |
| /broadcast <message> | /bc | Broadcast a message to the whole server. | hchat.broadcast |
| /ignore <player> | — | Toggle ignoring a specific player. | hchat.ignore |
| /spy | — | Toggle private-message spy mode. | hchat.spy |
| /clear | — | Clear chat for every player. | hchat.clear |
| /hchat reload | — | Reload configuration and language files. | hchat.reload |
| /hchat help | — | Show the in-game help menu. | hchat.help |
| /hchat lang <lang> | — | Change your personal language. | hchat.lang |
Tab completion is available for hChat subcommands, language codes, online/offline player names and configured channel IDs where applicable.
Permissions
| Permission | Default | Description |
| hchat.* | OP | Access to every hChat command and feature. |
| hchat.message | true | Allows private-message commands. |
| hchat.reply | true | Allows /reply and /r. |
| hchat.broadcast | OP | Allows /broadcast and /bc. |
| hchat.broadcast.color | OP | Allows color codes inside broadcast messages. |
| hchat.ignore | true | Allows /ignore <player>. |
| hchat.spy | OP | Allows toggling spy mode. |
| hchat.spy.all | OP | Receive every private message without exception. |
| hchat.clear | OP | Allows /clear. |
| hchat.reload | OP | Allows /hchat reload. |
| hchat.help | true | Allows /hchat help. |
| hchat.lang | true | Allows /hchat lang <lang>. |
| hchat.monitor.filter | OP | Receive warnings when the word filter is triggered. |
| hchat.bypass-log | OP | Send private messages without writing them to the chat logger. |
⚙ Configuration
hChat generates config.yml automatically. The configuration controls chat formatting, sounds, mentions, broadcasts, offline messages, logging and the word filter.
Code (YAML):
lang : en
debug : false
mentions:
sound:
enabled : true
sound : "entity.experience_orb.pickup"
volume : 1.0
pitch : 1.0
colors:
enabled : true
color : "6A3FF"
direct-messages:
sender:
format : "&7[&eYou &7-> &e{receiver}&7] &7{message}"
receiver:
format : "&7[&e{sender} &7-> &eYou&7] &7{message}"
clickable-actions:
enabled : true
reply-command : "/msg {sender}"
spy-format : "&e{sender} &7-> &e{target}&7: &7{message}"
broadcast:
enabled : true
format :
- ""
- "૧F5Broadcast:"
- "{message}"
offline-messages:
max-pending : 10
sound:
enabled : true
sound : "entity.experience_orb.pickup"
volume : 1.0
pitch : 1.0
logging:
private-messages:
enabled : true
path : logs
retention-days : 30
word-filter:
enabled : true
words :
- "blacklist1"
- "blacklist2"
action : "block"
- block — Blocks the message and notifies the sender.
- mask — Replaces matching words with *.
- warn — Allows the message and alerts players with hchat.monitor.filter.
Placeholders & Dynamic Tokens
Format placeholders
| Placeholder | Description |
| {sender} | Sender's display name. |
| {receiver} | Recipient's display name. |
| {target} | Target name in spy messages. |
| {message} | The message body. |
| {player} | Player name used by mentions and offline messages. |
| %player_name% | Resolved through PlaceholderAPI. |
Dynamic chat tokens
hChat can resolve these tokens directly inside chat formats:
| Token | Description |
| [ping] | Colored latency indicator with configurable thresholds and optional ms value. |
| [item] | Main-hand item with hover information including name, enchantments, durability and lore. |
| [coords] | Player position as x, y, z. |
| [world] | Current world name. |
| [afk] | Displays an [AFK] prefix when the player is detected as AFK. |
Example:
Code (Text):
"[ping] [afk]&7{player}&8: &f{message}"
Localization
Language files are stored in:
Code (Text):
plugins/hChat/lang/
Example:
Code (YAML):
# lang_es.yml
no-permission : "&cYou do not have permission!"
player-only : "&cOnly players can use this command!"
player-offline : "&cPlayer is offline!"
mentioned : "&#ffffffYou were mentioned in chat by TFFB8{player}!"
Code (YAML):
lang : es
Code (Text):
/hchat lang <lang>
Code (Text):
plugins/hChat/storage/player-lang.yml
PlaceholderAPI Expansion
When PlaceholderAPI is installed, hChat registers:
| Placeholder | Description |
| %hchat_spy_enabled% | Spy Mode: Enabled / Disabled. |
| %hchat_ignored% | Whether the player is ignoring anyone. |
| %hchat_ignored_<name>% | Per-player ignore check. |
| %hchat_ignored_count% | Number of currently ignored players. |
| %hchat_dnd_enabled% | DND: Enabled / Disabled. |
| %hchat_last_sender% | Player who most recently sent a private message. |
| %hchat_last_message_part% | First 30 characters of the latest received private message. |
| %hchat_last_seen% | Time since the latest private message was received. |
Broadcasts
/broadcast <message> (alias /bc) sends a configurable multi-line announcement to every player.
Broadcasts support placeholders and hex colors. Players with hchat.broadcast.color can use color codes inside the message body.
Scheduled announcements can be configured like this:
Code (YAML):
broadcast:
example1:
enabled : true
message : "&#F52727This is a recurring broadcast every 10 minutes"
interval : 600
display-in-console : true
Players can send a private message to someone who is offline:
Code (Text):
/msg Steve Hello!
- Delivers pending messages in order.
- Removes the delivered messages from storage.
- Optionally plays the configured notification sound.
The amount of pending messages is controlled by offline-messages.max-pending.
Dependencies
Required
| Plugin / Platform | Version | Purpose |
| Paper | 1.20+ | Server API, Adventure and AsyncChatEvent. |
| PlaceholderAPI | 2.11+ | Placeholder support and integrations. |
| LuckPerms | 5.4+ | Permission management. |
Optional
| Plugin | Purpose |
| Vault | Economy and chat formatting hook. |
| DiscordSRV | Detected at startup; cross-server chat bridge is planned for a future release. |
bStats
hChat includes bStats for anonymous plugin statistics. No additional download is required.
Server owners can disable metrics with:
Code (YAML):
metrics:
enabled : false
Support & Development
Source code: GitHub
Bug reports: GitHub Issues
Feature requests / discussions: GitHub Discussions
If you find a bug, please include:
- Minecraft / Paper version
- hChat version
- Java version
- Relevant server log
- Relevant configuration section
- Steps to reproduce the issue
License
hChat is released under the MIT License.
hChat is a free Minecraft Java mod. Compatible with Minecraft 1.18, 1.19, 1.20, 1.20.6 and newer. Downloaded 11 times (via Spigot). Download it and open it directly in the game.