Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
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. 🛡️


