The six Anti-Cheat commands, all 15 permission nodes with their defaults, and the per-check exemption nodes derived from each check.
The command surface is exactly six commands on one base, built on a modern command framework with Brigadier completions on Paper 1.13+, async completions on Paper 1.8.x, and a plain tab-complete fallback on Spigot 1.8.8 — so completion works everywhere the plugin does. Permissions are split per capability, so moderators can watch alerts without holding the configuration reload.
| Command | Permission | What it does |
|---|---|---|
/anticheat | anticheat.help (default op) | Help root — prints the command help from the messages config |
/anticheat alerts | anticheat.alerts (default op) | Toggle violation alerts for the sender; the console toggles console alerts. Toggles persist per player |
/anticheat verbose | anticheat.verbose (default op) | Toggle verbose violation output (implies alerts); the console toggles console verbose |
/anticheat debug [target] | anticheat.debug (default op) | Toggle prediction-level debug output, optionally for a specific online player |
/anticheat reload | anticheat.reload (default op) | Asynchronous reload of the configuration — both config layers are honored without a restart |
/anticheat version | anticheat.version (default op) | Prints the version and author line — the first thing support will ask for |
The build registers fifteen permission nodes. Six govern the commands and alert defaults; the rest form the exemption and spectating model. Defaults are deliberately conservative — anything that changes enforcement is op-only or denied by default.
| Node | Default | Purpose |
|---|---|---|
anticheat.help | op | See the command help |
anticheat.alerts | op | Receive and toggle violation alerts |
anticheat.alerts.enable-on-join | op | Alerts automatically enabled on join |
anticheat.alerts.enable-on-join.silent | false | Silent alert-on-join variant |
anticheat.verbose | false | Receive and toggle verbose output |
anticheat.verbose.enable-on-join | false | Verbose automatically enabled on join |
anticheat.verbose.enable-on-join.silent | false | Silent verbose-on-join variant |
anticheat.debug | op | Prediction debug output |
anticheat.reload | op | Reload the configuration |
anticheat.version | op | Print version and author |
anticheat.spectator | false | Hidden from player lists per the spectator manager settings |
anticheat.exempt | false | Global exemption from all checks |
anticheat.nosetback | false | Global: flagged without setbacks |
anticheat.nomodifypacket | false | Global: no packet modification |
anticheat.disabled | false | Checks off for this player, tracking continues |
On top of the fifteen static nodes, every check in the registry derives three dynamic nodes from its config name: anticheat.exempt.<check>, anticheat.nosetback.<check> and anticheat.nomodifypacket.<check>. That is what makes the exemption system surgical — anticheat.exempt.knockback for a knockback-event minigame, or anticheat.nosetback.scaffoldtower while an event mechanic places blocks fast, without touching anything else. All derived nodes re-evaluate every 40 ticks, so permission changes take about two seconds and never require a reconnect.
The nodes map naturally onto staff tiers. The moderation set is anticheat.alerts plus anticheat.spectator — the day-one grants. anticheat.verbose and anticheat.debug are investigation tools rather than always-on views, so they belong with senior staff. anticheat.reload governs the moment your tuning becomes live and should stay with server administrators. Because every enforcement-side default is op-or-denied, a mis-granted permission can never silently weaken protection.
Tip:When contacting support about a flag, include the output of /anticheat version and the check name from the alert hover — both come from commands your moderators already have, so the report costs nothing extra.
Note:There is no staff GUI by design — alerts, verbose and debug are the complete staff surface, and every one of them works from the console as well as in-game.