bChatMod (update soon!)
A lightweight, configurable chat moderation plugin: blocks profanity (Italian + English), notifies staff with the full message, and supports anti-bypass modes (normal/strict/ultra). Suitable for lifesteal and SMP
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
bChatMod (update soon!)

bChatMod
A lightweight, configurable chat moderation plugin for Paper/Spigot: blocks profanity (Italian + English), notifies staff with the full message, and supports anti-bypass modes (normal / strict / ultra).
✨ Features
🔧Core Features
- Unicode-aware blacklist matching for words and phrases (reduces false positives). - Staff notifications include the full original message and the detected match (`{message}` + `{match}`). - Configurable anti-bypass modes: - `normal` — pattern-based detection only (least aggressive). - `strict` — pattern + leet & repeat normalization + insertion-only fuzzy detection. - `ultra` — strict + vowel-stripped checks (most aggressive). - Configurable messages and staff formatting. - No automatic muting by default (plugin focuses on detection and notification). - Lightweight, compatible with Paper/Spigot 1.19+ (tested up to 1.21.x).
🛡️ Anti-Bypass Techniques
- Leet normalization (`f4ck` → `fack`). - Reduce repeated letters (`fuuuck` → `fuuck`). - Sliding-window insertion-only fuzzy detection (detects extra-letter bypasses while avoiding substitutions like `duck`). - Vowel-stripped checks (optional `ultra` mode).
❓ Why bChatMod?
- Accurate: word/phrase boundaries and Unicode-aware patterns avoid many false positives. - Configurable: pick the level of aggressiveness for your community. - Transparent: staff receive the full message for context before action.
📦 Installation
1. Build or download the JAR and place it in your server `plugins/` folder. 2. Start the server to generate the default `config.yml`. 3. Edit `plugins/bChatMod/config.yml` to customize blacklist, messages and anti-bypass mode. 4. Reload the plugin with:
/bchatmod reload
⚙️ config.yml
```text
Anti-bypass mode: "normal" | "strict" | "ultra"
anti-bypass-mode: "normal"
Debug (toggle true while tuning)
debug: block-log: false
Messages
player-block-message: "&7You cannot send that message. It contains blocked words." staff-message-format: "&b[bChatMod] &7{player} tried cursing: &r{message} &7(matched: &b{match}&7)"
Permission required to receive staff notifications
staff-notify-permission: "bchatmod.notify"
Blacklist (example entries)
blacklist: - "fuck" - "shit" - "example-offensive-term" ```
📝 Notes Short tokens (length ≤ 3) are handled conservatively to avoid false positives (e.g., "ass" inside "basso"). Use caution when adding short tokens. Use debug.block-log: true during tuning to see which pattern/candidate matched in console.
Commands Command Description /bchatmod reload Reload configuration and rebuild blacklist patterns
🔑 Permissions bchatmod.notify — receive staff notifications (default: op)
bchatmod.reload — reload config (default: op)
bchatmod.bypass — bypass chat filter (default: op)
🧩 Placeholders {player} — player name
{message} — full original message the player attempted to send
{match} — the substring or variant that triggered the block
&b[bChatMod] &7{player} tried cursing: &r{message} &7(matched: &b{match}&7)