- Illegal materials, enchantments, attribute modifiers, oversized components, and deeply nested containers.
- Book pages, titles, total content, serialized components, sign text and click events, and anvil names and costs.
- Command length, frequency, blocked commands, namespaces, and roots.
- Unauthorized creative or spectator mode.
- Excessive entities per chunk and per entity type using maintained counters instead of repeated nearby-entity scans.
- Excessive player movement into new chunks.
Every detection can be written to H2 and JSONL, shown to online staff, and optionally sent to a Discord webhook. English and Russian messages are included.
- Java 25
- Paper, Purpur, or Folia 26.2
- No required plugins or external database
Packet-level exploit filtering is not part of mProtect 1.0. Server software, proxies, and a properly configured firewall should still be kept current.
- Stop the server.
- Put
mProtect-1.0.0.jarinto the server'spluginsdirectory. - Start the server once to create
plugins/mProtect/config.ymland the language files. - Review the limits before opening the server to players.
- Run
/mprotect statusand/mprotect test itemsfrom the console or as an administrator.
Use /mprotect reload after changing checks, limits, alerts, or messages. Changing storage settings requires a restart.
The generated config.yml is the source of truth. Missing options are restored automatically and invalid numeric values are replaced with safe defaults.
items.blocked-materials contains materials players must not possess. Item validation also rejects overstacked items, unsafe enchantments, duplicate or excessive attribute modifiers, oversized serialized data, and nested shulker boxes or bundles beyond the configured depth and item count. Set items.reject-overstacked to false only when another plugin intentionally creates stacks above the vanilla limit.
items.action accepts:
REMOVE— remove the unsafe item.REPLACE— replace it withitems.replacement.LOG— keep it and record the violation.KICK— cancel the action and disconnect the player.
Most checks run when an inventory is actually touched. items.fallback-scan-minutes controls the low-frequency safety scan; it is not a per-tick scan.
The books, signs, and anvils sections set character, component, and repair-cost limits. Set books.strip-formatting or anvils.strip-formatting only if formatting should be removed. Sign click events can be stripped independently with signs.strip-click-events.
commands.blocked matches command names. commands.blocked-namespaces blocks namespaced forms such as minecraft:op. commands.blocked-roots is intended for command roots whose arguments may execute another command. Length and rate limits are applied before command dispatch.
entities.max-per-chunk limits the total tracked entities in a chunk, while entities.max-per-type-per-chunk limits a single type. Existing chunks are counted as they load and counters are updated on spawn and removal.
chunk-loads limits how quickly a player may cross into new chunks. Increase the limit for servers where fast elytra travel is expected.
alerts.staff-chatsends deduplicated alerts to players withmprotect.alerts.alerts.file-logwritesplugins/mProtect/violations.jsonl.alerts.discordcan send alerts to an HTTPS Discord webhook. Keep its URL private.storage.retention-dayscontrols cleanup of the embedded H2 history.
| Command | Description | Permission |
|---|---|---|
/mprotect status |
Show enabled checks and today's counts | mprotect.command.status |
/mprotect violations [player] |
Show the ten newest stored violations | mprotect.command.violations |
/mprotect test <check> |
Validate a configured check | mprotect.command.test |
/mprotect reload |
Reload safe settings and language files | mprotect.command.reload |
The alias /mpr is also available.
mprotect.admin grants all administrative commands, alerts, and player-attributable bypasses. Individual bypass permissions are available for items, commands, books, signs, anvils, creative, and chunks, using the form mprotect.bypass.<check>.
Entity spawn limits intentionally have no bypass permission because many spawn events do not have a reliable player initiator.
mProtect uses bStats to collect anonymous usage statistics when metrics.enabled is true. Server owners can opt out in the global bStats configuration. The collected data and privacy details are documented in the bStats server owner guide.
The update checker only requests public release metadata from Modrinth when updates.enabled is true and a project ID is configured. It never downloads or installs updates.
./gradlew clean buildThe deployable artifact is build/libs/mProtect-1.0.0.jar. Automated tests cover rate windows, configured protection actions, and semantic version ordering.
Report reproducible problems through GitHub Issues or ask for help in Discord. Include the server software, Java version, mProtect version, relevant configuration, and the complete error from the log.
Licensed under the MIT License.
