McGuard (plugin)
A lightweight, event-based server-side anticheat for the whole Bukkit family. One jar runs on CraftBukkit, Spigot, Paper, Purpur, Pufferfish, Folia, and hybrids (Arclight, Mohist). No mixins, no packet interception, no NMS — players join with an unmodified client and nothing to break on the next update.
What it is — and honestly what it is not
McGuard reacts to Bukkit events (move, attack, break, place) and reads server-authoritative state — position deltas, server velocity, server fall distance, ping. It does not simulate the player's movement packet-by-packet the way Grim or Vulcan do.
So be clear-eyed about scope: McGuard will not match a packet-simulation anticheat on subtle movement cheats. What it does do is catch the cheats the overwhelming majority of servers actually see — flight, speed, reach, kill-aura, auto-clicker, nuker, timer, fast-place — cheaply and stably, with lag compensation to keep legitimate high-ping players safe, and with zero maintenance across Minecraft/Forge/Paper patch versions. Run it standalone on a small/medium server, or alongside a packet AC as a cheap second opinion and audit log.
Every default is tuned to under-flag. A false ban on a real player hurts a server more than a cheater surviving another 30 seconds.
The 13 checks
| Check | Signal | Strength on Bukkit |
|---|---|---|
| Speed | horizontal blocks/tick past a modifier-aware envelope, streak-gated | strong |
| Flight | sustained airtime without a legitimate source | strong |
| NoFall | large server-observed descent while server fall distance stayed ~0 | heuristic |
| InvalidMove | teleport-sized delta with no teleport grace | strong |
| Reach | eye-to-hitbox distance beyond vanilla + ping bonus | strong |
| KillAura | look-vs-target angle no legit aim reaches, 3-hit streak | strong |
| AutoClicker | CPS ceiling and click-rhythm regularity (std-dev) | strong |
| Timer | actions/second above the tick-rate ceiling | strong |
| NoSlow | full speed while eating/drinking/blocking/bow-drawing | good (Paper), shield-only (Spigot) |
| FastPlace | blocks placed/second past a human rate | strong |
| FastBreak | block broken faster than an optimised legit setup could | approximate |
| Nuker | many blocks/second | strong |
| X-Ray | valuable-ore ratio implausibly high over a large sample | statistical |
Weaker checks (NoFall, FastBreak, X-Ray) are inherent limits of a pure server-side AC — the client is a black box. They are worth keeping as suspect-surfacing signals, best paired with an ore-obfuscation plugin for X-Ray.
Cross-platform design
- Compiled against the Paper API (a superset of Spigot/Bukkit), so all event types resolve. Paper-only calls are guarded so the jar loads on plain Spigot too.
- Folia-safe.
folia-supported: true. Per-player state is aConcurrentHashMap; each player's events run on their own region thread; punishment happens inline on that thread; the only shared-state write (the ban list) is routed through the global region scheduler. - Graceful degradation.
isHandRaised()(for NoSlow) is resolved reflectively and falls back to shield-only where absent.getPing()is wrapped so a platform without it simply disables lag compensation instead of erroring. The startup line prints which platform and item-use API were detected.
Lag compensation
The single biggest source of anticheat false positives is a laggy player whose
signals look like a cheat. McGuard reads each player's ping and, above a
configurable threshold, widens reach tolerance and the kill-aura angle
proportionally. On by default; tune latency.pingThresholdMs.
Commands & permissions
/mcguard (aliases /mcg, /anticheat) — requires mcguard.admin:
status— everyone currently carrying a violation levelvl <player>— per-check breakdown for one playerreset <player>— clear a player's violationsexempt <player>— toggle exemption (testing / trusted staff)checks— list every check and its descriptionreload— re-readconfig.yml
| Permission | Default | Meaning |
|---|---|---|
mcguard.admin |
op | run commands, receive violation alerts |
mcguard.bypass |
false | exempt the holder from every check |
Install
- Drop
mcguard-<version>.jarinto your server'splugins/folder. - Start the server once —
plugins/McGuard/config.ymlis generated. - Watch
/mcguard statusduring normal play and light PvP. - Tune thresholds, then optionally raise
violations.banEnabledtotrue.
Requires Java 17+ and Minecraft 1.20.x on any Bukkit-based server.
Flags are appended to plugins/McGuard/violations.log as CSV
(timestamp,player,uuid,check,vl,detail) for external dashboards.
Before publishing / going live
- Test on your own server first with
violations.banEnabled: false. These thresholds are a starting point, not gospel. - If you already run a packet-based anticheat (Grim, Vulcan), enable only the checks it does not cover, or run McGuard purely for its audit log — do not stack two auto-banners on the same signal.
- Set a real license and issue-tracker URL before uploading to CurseForge/Modrinth.
Build from source (If u download source code)
./gradlew build # -> build/libs/mcguard-<version>.jar
./gradlew installToServer # also copies the jar into ../../server/plugins
No gallery available for this project.