
bChatMod
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
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
ultramode).
❓ 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
- Build or download the JAR and place it in your server
plugins/folder. - Start the server to generate the default
config.yml. - Edit
plugins/bChatMod/config.ymlto customize blacklist, messages and anti-bypass mode. - Reload the plugin with:
/bchatmod reload
⚙️ config.yml
# 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)
