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
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) <br> bchatmod.reload — reload config (default: op) <br> bchatmod.bypass — bypass chat filter (default: op) <br> <br> 🧩 Placeholders {player} — player name <br> {message} — full original message the player attempted to send <br> {match} — the substring or variant that triggered the block <br>
&b[bChatMod] &7{player} tried cursing: &r{message} &7(matched: &b{match}&7)