Description
Werchat
Channel-based chat system for Hytale servers. Multiple channels, quick-chat routing, private messaging, nicknames, and moderation — all in one plugin.
Features
Channel System — Multiple channels with custom colors, nicknames, distance-based and world-restricted delivery.
Quick Chat — Prefix symbols to route messages to any channel without switching. ! for Global, ~ for Trade.
Private Messaging — /msg and /r with reply tracking, ignore lists, and offline detection.
Player Nicknames — Custom display names up to 20 characters with hex colors and two-color gradients.
Mention System — @player highlighting with configurable color and bold formatting.
Moderation Tools — Per-channel ban, mute, moderators, word filter (censor/block modes), and chat cooldown.
Permission Integration — HyperPerms and LuckPerms prefix/suffix support with hex color codes.
PlaceholderAPI Integration — Supports external %...% placeholders in channel format text and includes a built-in %werchat_*% expansion.
Plugin API — Exposes a lightweight WerchatAPI for other plugins to query channels, manage membership/focus, and submit chat through Werchat's pipeline.
Message Colors — Independent message text colors and gradients, separate from nickname colors.
Persistent Storage — JSON-based data with dirty + debounced saves (20s) and a final flush on shutdown.
Quick Start
- Drop
Werchat-1.1.9.jarin yourmods/folder - Start your server — four default channels are created automatically
- Use
/ch listto see channels,/ch join <channel>to join one - Type
!helloto quick-chat in Global or~hellofor Trade
/ch list # List all channels
/ch global # Switch to Global channel
/ch join trade # Join the Trade channel
/msg Steve Hey! # Send a private message
/ch playernick CoolName # Set your nickname
Default Channels
| Channel | Nick | Color | Range | Auto-Join | Quick-Chat Symbol |
|---|---|---|---|---|---|
| Global | Global | White (#ffffff) |
Unlimited | Yes | ! |
| Local | Local | Gray (#808080) |
100 blocks | Yes | — |
| Trade | Trade | Gold (#ffd700) |
Unlimited | Yes | ~ |
| Support | Support | Green (#00ff00) |
Unlimited | Yes | — |
Commands
Player Commands
| Command | Aliases | Description |
|---|---|---|
/ch list |
/ch l |
List all channels |
/ch join &lt;channel&gt; [password] |
/ch j |
Join a channel |
/ch leave &lt;channel&gt; |
— | Leave a channel |
/ch &lt;channel&gt; |
— | Switch active channel |
/ch who &lt;channel&gt; |
/ch w |
View channel members |
/ch info &lt;channel&gt; |
— | View channel details |
/ch create &lt;name&gt; [nick] |
— | Create a new channel |
/ch playernick &lt;name&gt; [#color] [#gradient] |
/ch pnick, /ch nickname |
Set your nickname |
/ch msgcolor &lt;#color&gt; [#gradient] |
/ch chatcolor |
Set your message color |
/ch help |
/ch ? |
Show command help |
Messaging Commands
| Command | Aliases | Description |
|---|---|---|
/msg &lt;player&gt; &lt;message&gt; |
/whisper, /w, /tell, /pm |
Send a private message |
/r &lt;message&gt; |
/reply |
Reply to last PM |
/ignore &lt;player&gt; |
— | Toggle ignore on a player |
/ignorelist |
— | List ignored players |
Admin / Moderator Commands
| Command | Aliases | Description |
|---|---|---|
/ch color &lt;channel&gt; &lt;#hex&gt; [#hex] |
— | Set channel tag color (and optional message color) |
/ch nick &lt;channel&gt; &lt;nick&gt; |
— | Set channel shortcut name |
/ch rename &lt;channel&gt; &lt;newname&gt; |
— | Rename a channel |
/ch password &lt;channel&gt; [password] |
/ch pass |
Set or clear channel password |
/ch distance &lt;channel&gt; &lt;blocks&gt; |
/ch range |
Set range (0 = unlimited) |
/ch world &lt;channel&gt; add|remove &lt;world&gt; |
— | Restrict channel to worlds |
/ch mod &lt;channel&gt; &lt;player&gt; |
/ch moderator |
Add a channel moderator |
/ch unmod &lt;channel&gt; &lt;player&gt; |
— | Remove a channel moderator |
/ch ban &lt;channel&gt; &lt;player&gt; |
— | Ban a player from a channel |
/ch unban &lt;channel&gt; &lt;player&gt; |
— | Unban a player |
/ch mute &lt;channel&gt; &lt;player&gt; |
— | Mute a player in a channel |
/ch unmute &lt;channel&gt; &lt;player&gt; |
— | Unmute a player |
/ch remove &lt;channel&gt; |
/ch delete, /ch del |
Delete a channel |
/ch reload |
— | Reload Werchat config and channel data from disk |
Channel moderators can use admin commands on their own channels without needing global permission nodes.
| All Permissions | Permission | Description |
|---|---|---|
werchat.* |
All Werchat permissions (wildcard) | |
werchat.list |
List channels | |
werchat.join |
Join channels | |
werchat.leave |
Leave channels | |
werchat.create |
Create channels | |
werchat.who |
View channel members | |
werchat.info |
View channel info | |
werchat.switch |
Switch active channel | |
werchat.color |
Set channel colors | |
werchat.nick |
Set channel nick | |
werchat.password |
Set channel password | |
werchat.rename |
Rename channels | |
werchat.remove |
Delete channels | |
werchat.mod |
Manage channel moderators | |
werchat.distance |
Set channel range | |
werchat.ban |
Ban/unban from channels | |
werchat.mute |
Mute/unmute in channels | |
werchat.world |
Set world restrictions | |
werchat.reload |
Reload Werchat config/channel data | |
werchat.msg |
Send private messages | |
werchat.ignore |
Ignore players | |
werchat.quickchat |
Use quick-chat symbols | |
werchat.playernick |
Set own nickname | |
werchat.playernick.others |
Set other players' nicknames | |
werchat.nickcolor |
Set nickname color/gradient | |
werchat.msgcolor |
Set own message color | |
werchat.msgcolor.others |
Set other players' message color | |
werchat.cooldown.bypass |
Bypass chat cooldown |
Players with werchat.* or * also bypass cooldowns and the word filter.
Per-channel permission nodes:
werchat.channel.<channel>.joinwerchat.channel.<channel>.speakwerchat.channel.<channel>.read(primary receive/read node)
These nodes are enforced in normal /ch + chat flow only when channelPermissions.enforce is enabled.
Configuration
Config file: mods/com.werchat_Werchat/config.json
View full config
{
"defaultChannelName": "Global",
"autoJoinDefault": true,
"showJoinLeaveMessages": true,
"allowPrivateMessages": true,
"channelPermissions": {
"enforce": false
},
"banMessage": "You have been banned from {channel}",
"muteMessage": "You have been muted in {channel}",
"wordFilter": {
"enabled": false,
"mode": "censor",
"replacement": "***",
"notifyPlayer": true,
"warningMessage": "Your message contained inappropriate language.",
"words": ["..."]
},
"cooldown": {
"enabled": false,
"seconds": 3,
"message": "Please wait {seconds}s before sending another message.",
"bypassPermission": "werchat.cooldown.bypass"
},
"mentions": {
"enabled": true,
"color": "#FFFF55"
},
"ignoreChatCancellations": false
}
| Key | Default | Description |
|---|---|---|
defaultChannelName |
"Global" |
Default channel players are placed in |
autoJoinDefault |
true |
Auto-join default channel on connect |
showJoinLeaveMessages |
true |
Broadcast join/leave messages to channels |
allowPrivateMessages |
true |
Whether /msg is enabled |
channelPermissions.enforce |
false |
Enforce per-channel join/speak/read nodes in normal /ch + chat flow |
banMessage |
"You have been banned from {channel}" |
Message shown to banned players |
muteMessage |
"You have been muted in {channel}" |
Message shown to muted players |
wordFilter.enabled |
false |
Enable the word filter |
wordFilter.mode |
"censor" |
censor replaces bad words, block rejects the message |
wordFilter.replacement |
"***" |
Replacement string in censor mode |
wordFilter.notifyPlayer |
true |
Warn the player when filtered |
wordFilter.warningMessage |
"Your message contained..." |
Warning message text |
wordFilter.words |
(default list) | Words to filter (case-insensitive) |
cooldown.enabled |
false |
Enable chat cooldown |
cooldown.seconds |
3 |
Seconds between messages |
cooldown.message |
"Please wait {seconds}s..." |
Cooldown message |
cooldown.bypassPermission |
"werchat.cooldown.bypass" |
Permission to bypass cooldown |
mentions.enabled |
true |
Enable @mention highlighting |
mentions.color |
"#FFFF55" |
Hex color for mention highlights |
ignoreChatCancellations |
false |
Process chat even if cancelled by other plugins |
When channelPermissions.enforce is enabled:
joinchecks run in/ch joinand/ch <channel>auto-join.speakchecks run before sending messages.readchecks run for sender selection and per-recipient delivery.- Password checks still apply; permission nodes never bypass channel passwords.
Channel Format Placeholders
Custom channel message formats support these placeholders:
| Placeholder | Description |
|---|---|
{name} |
Full channel name |
{nick} |
Channel nick/abbreviation |
{color} |
Channel color code |
{sender} |
Player display name |
{msg} |
Message content |
{prefix} |
Player's permission prefix (HyperPerms/LuckPerms) |
{suffix} |
Player's permission suffix (HyperPerms/LuckPerms) |
Default format: {nick} {sender}: {msg}
Format literals also support PlaceholderAPI placeholders when PlaceholderAPI is installed.
Werchat also registers a built-in PlaceholderAPI expansion with identifier werchat. You can find all possible ones in the Github ReadMe
Links
Part of the HyperSystems suite: HyperPerms | HyperHomes | HyperFactions | Werchat


