ChatSentinel
Chat filter for Paper, Folia, Purpur, Spigot and Bukkit 1.21+. Messages with insults or slurs are cancelled before they hit the chat. Staff can get an in-game ping and an optional Discord webhook log.
What it catches
Spacing, punctuation, repeated letters, leetspeak, accents, full-width characters and look-alike letters. Typos are handled with a fuzzy match. Abbreviations like hs or kys can be listed separately. Safe words such as class or assassin go on the whitelist.
Modes: SMART (default), SUBSTRING, WORD.
Languages
German, English, Spanish, French, Italian, Portuguese, Dutch, Polish, Russian, Turkish. Each file under plugins/ChatSentinel/languages/ has UI text and a word list. A global slur list is always loaded.
When a message is blocked
- message is cancelled
- sender can be notified
- staff with
chatsentinel.notifycan be alerted - optional console commands (
%player%,%word%,%message%) - optional escalation after repeated hits in a time window
Commands
| Command | What it does |
|---|---|
/cs reload |
reload config and language files |
/cs test <message> |
check if a message would be blocked |
/cs info |
loaded word count |
| Permission | Default |
|---|---|
chatsentinel.admin |
op |
chatsentinel.bypass |
false |
chatsentinel.notify |
op |
Install
Drop the jar into plugins, start the server, edit config.yml, run /cs reload. Java 21.
| Typos / misspellings | huhrensohn ยท arschlosch | โ
|
| Soft variations | nega ยท naga | โ
|
| Abbreviations | hs ยท kys ยท hdf | โ
|
๐ง The fuzzy engine generalizes beyond your word list โ you don't have to predict every variation players invent. A built-in whitelist keeps safe words like
class,assassin,analysisandgrassfrom ever being flagged.
Three matching modes let you pick your aggressiveness: SMART (default), SUBSTRING, or WORD.
๐ Languages Included
๐ฉ๐ช German ยท ๐ฌ๐ง English ยท ๐ช๐ธ Spanish ยท ๐ซ๐ท French ยท ๐ฎ๐น Italian ยท ๐ต๐น Portuguese ยท ๐ณ๐ฑ Dutch ยท ๐ต๐ฑ Polish ยท ๐ท๐บ Russian ยท ๐น๐ท Turkish
Each language lives in /plugins/ChatSentinel/languages/<code>.yml and contains both the UI messages and the blocked-word list. Want another language? Copy a file, rename it, translate it โ done.
๐ Discord Webhook Logging
Enable the webhook and every blocked message is pushed to your staff channel as a rich embed:
๐ก๏ธ Message blocked
Player: Steve
Trigger word: idiot
Blocked count: 3
Original message: you are an idiot
ChatSentinel โข 2026-07-08 14:33:07 UTC
- ๐จ Custom username, avatar & embed color
- ๐ฃ Optional role ping when something is blocked
- ๐งต Sent fully asynchronously โ zero impact on chat performance
โป๏ธ Auto-Config Updater
The feature server owners love. When a new plugin version adds config options:
- You just drop in the new
.jar - ChatSentinel detects the older config, backs it up, and merges in the new keys
- Every value you configured is kept โ nothing to delete, nothing to re-enter โ
โก Actions When a Message Is Blocked
- ๐ซ Cancel the message so nobody sees it
- ๐ฌ Tell the sender "Your message was blocked by the system"
- ๐ฎ Alert online staff in-game
- ๐ฅ๏ธ Run custom console commands (
%player%ยท%word%ยท%message%) - ๐ Escalation โ auto-punish after X blocked messages within a time window
๐งฐ Commands & Permissions
| Command | Description |
|---|---|
/cs reload |
Reload config & language files |
/cs test <message> |
Test whether a message would be blocked |
/cs info |
Show status & loaded word count |
| Permission | Default | Description |
|---|---|---|
chatsentinel.admin |
op | Access to /cs commands |
chatsentinel.bypass |
false | Players who are never filtered |
chatsentinel.notify |
op | Receive in-game block alerts |
๐ฆ Installation
- Download
ChatSentinel.jar - Drop it into your server's
/pluginsfolder - Start the server (generates the config & language files)
- Edit
config.ymlโ set your language, add your Discord webhook, tune the filter - Run
/cs reloadโ you're protected! ๐
Requirements: Paper ยท Folia ยท Purpur ยท Spigot ยท Bukkit 1.21+ ยท Java 21
โ๏ธ Configuration
Everything is configurable in config.yml. Click to expand the full default file:
๐ config.yml (click to view)
config-version: 2
language:
selected: "en"
load-all-word-lists: true
detection:
enabled: true
obfuscation:
ignore-case: true
strip-accents: true
normalize-leetspeak: true
collapse-repeats: true
strip-separators: true
mode: "SMART"
fuzzy:
enabled: true
max-distance: 2
min-word-length: 4
blocked-abbreviations:
- "hs"
- "hdf"
- "htf"
- "kys"
- "stfu"
- "gtfo"
- "vpd"
- "ndh"
whitelist:
- "assassin"
- "class"
- "grass"
- "analysis"
- "cockpit"
- "shitake"
extra-blocked-words: []
action:
block-message: true
notify-sender: true
notify-staff: true
commands: []
escalation:
threshold: 0
window-seconds: 300
commands:
- "kick %player% Repeated inappropriate language."
discord:
enabled: false
webhook-url: ""
username: "ChatSentinel"
avatar-url: ""
use-embed: true
embed-color: 15158332
ping-role-id: ""
misc:
log-to-console: true
startup-banner: true
๐ฌ Support & Feedback
Found a false positive or want another language bundled? Leave a comment โ contributions welcome! โค๏ธ
Keep your chat clean. Keep your community safe. ๐ก๏ธ
No gallery available for this project.
| Version | Minecraft | Loader | Download |
|---|---|---|---|
|
ChatSentinel 1.1.1 1.1.1 |
1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3
|
bukkit, folia, paper, purpur, spigot
|
Download |
|
ChatSentinel 1.0.0 1.0.0 |
1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2
|
bukkit, folia, paper, purpur, spigot
|
Download |