NeoModeration 1.4.0 — Coverage
NeoModeration 1.4.0 — Coverage
NeoModeration 1.4.0 makes it useful every day, not just for cloud moderation.
Everything new runs locally first — no API key required — so spam, strikes,
and extra surfaces cost nothing and never wait on the network. Scope comes from
docs/research/2026-07-11-1.4.0-coverage-research.md.
New
- Local anti-spam (
moderation.spam.*): message rate, duplicate/near-
duplicate messages, excessive caps (player names exempt), character floods,
and command-rate limiting. Runs before any cloud call. On by default with
conservative limits; each check disables individually by setting it to 0. - Censor action (
moderation.chat.censorLocalDetections): replace locally-
matched words/links with****and let the rest of the message through,
instead of blocking the whole line. Cloud detections still block by default. - Progressive strikes (
moderation.strikes.*): every detection adds a
strike that decays over time; reaching a configured rung runs an extra action
(default: kick at 4). Strike counts show in staff alerts. - More surfaces (
moderation.surfaces.*): signs, books, anvil renames, and
configured commands (/msg,/tell, …) now run the local rules through the
same pipeline as chat. Each surface is independentlyoff/monitor/
censor/block, and all default to off so upgrades change nothing.
These are synchronous events, so they use local rules only — the cloud is
never in the critical path there. - Local case history (
moderation.cases.*): a SQLite log of every detection
(player, surface, reason, action, mode, time). Browse it with
/nmod cases [player]and/nmod case <id>. Content previews are off by
default (metadata only) to keep the log privacy-clean. - Unified detection pipeline: chat, map-art, and every new surface flow
through one handler, so monitor mode, strikes, staff alerts, and case logging
behave identically everywhere. Staff alerts now show the surface and strike. - Richer
/nmod statusand/nmod doctorreport anti-spam, strikes,
surfaces, and case-history state; new bStats charts (mode, cloud, censor).
Compatibility
- Existing 1.3.x configs upgrade with no behavior change: new surfaces
default off, and missing keys keep prior behavior. Anti-spam and strikes turn
on with conservative defaults — setmoderation.spam.enabled/
moderation.strikes.enabledtofalseto keep chat exactly as it was. - The SQLite driver ships with Spigot/Paper; if it is ever missing, case history
disables itself with one warning and moderation continues. - English and Spanish locales updated; custom locale files gain the new keys on
first load.
Verified
- 74 automated tests pass, including censor mapping, spam checks, strike decay,
and SQLite case storage. - Paper 1.18.2, 1.19.4, 1.20.6, and 1.21.11 pass the full live matrix.
- Smoke-tested on a live Paper server: spam trip, sign flag, censor, strike
escalation,/nmod cases,/nmod doctor.
SHA-256 checksums are attached to the GitHub release.