An anticheat compares what the client sends with what's possible in fair play. It goes wrong when fair play on your server looks different from what it expects: packets arrive in a burst because of ping, the server stalls, a plugin launches the player into the air. Ban on a single flag like that and you get false bans, complaints and players who leave.
Where false bans come from
| Cause | What the anticheat sees | What to do |
|---|---|---|
| Ping spikes and packet loss | Packets arrive in a burst — looks like Timer or Blink | Build up evidence, don't ban on one episode |
| TPS drops | The server processes movement late, time-based checks misfire | Find the cause of the lag, see why your server lags |
| Plugins that move players | A launch pad looks like Fly; a dash enchant looks like Speed | Test the mechanic with the anticheat before launch |
| Bedrock players via Geyser | A different client with different movement physics | Ask your anticheat's developer how it checks them |
| Other client versions via ViaVersion | The protocol is translated, but the client follows its own rules | Review bans of players on older clients by hand |
| Allowed mods and keybinds | The client sends packets differently from vanilla | An anticheat that knows the allowed mods |
Ping and packet loss
When a player's connection hiccups, their movement packets get stuck in the network and reach the server all at once. The server sees several ticks of movement arrive within a fraction of a second — which is also what Timer looks like. An anticheat that bans on one such burst punishes people for bad Wi-Fi.
TPS drops
A Minecraft server has 50 ms to finish each tick. When a tick takes longer, player packets get processed in batches, and time-based checks see things that never happened. A common cause is new chunk generation while players fly elytras into unexplored land; pre-generating the world removes it.
Plugins that move players
Launch pads in the lobby, double jump, dashes and speed from custom enchantments, rideable mobs and vehicles from plugins — all of it is movement vanilla doesn't have. An anticheat that doesn't know about it sees flying or Speed. Before you launch an event with a new mechanic, play through it yourself with the anticheat on and see what flags.
Bedrock via Geyser and older clients
Geyser is a bridge between Bedrock Edition and Java Edition: players on phones and consoles join your Java server. But their client moves by Bedrock physics. Geyser's own list of limitations mentions, for example, movement issues around bamboo caused by differences between the editions. GeyserMC keeps a community list of anticheat compatibility — check it, and ask your anticheat's developer how it handles these players.
ViaVersion is a similar story: players on other versions join, the plugin translates packets, but an older client's behaviour doesn't always translate one to one. The further the client version is from the server's, the more carefully you should look at those players' bans.
Build up evidence instead of banning on one flag
The main defence against false bans isn't weaker checks — it's not trusting a single flag. Lag produces one odd episode. A cheat produces them again and again, in different fights and on different fronts.
That's how DGuard works: every flag is a piece of evidence with a weight, VL × the rule's weight. Evidence halves every day, and a ban comes only when the player has 400 points across three separate episodes. One ping spike is one episode, and it can't get anyone banned. Allowed mods and keybinds are written into the code and produce no evidence at all.
Some evidence lag simply can't fake. An honest client sends packets within a tick in a strict order, and a cheat breaks it — KillAura, for example, turns the head before the hit. Lag delays packets but never reorders them, so packet order gives away a cheat, not a bad connection.
No setbacks means no pain for honest players
Many anticheats pull a suspected player back or cancel their hit. That only teaches a cheater how to bypass, and it annoys an honest player with lag: they get yanked back mid-fight or mid-parkour. DGuard works silently, with no cancelled hits and no setbacks. If something flags for an honest player, they never notice, and the evidence halves every day.
Punish in steps
Not every violation deserves a permanent ban. Decide in advance which cheats mean a ban on your server, which a kick, and which just a flag for moderators. For borderline cases use a ladder: warning, kick, temporary ban, ban.
In DGuard you set ban or kick for each cheat function, and evidence weights and thresholds live in the config — from a soft mode to zero tolerance. If your game mode has a lot of unusual mechanics, start softer and tighten up once you're sure honest players aren't affected. Ready-made setups for different game modes are in the config store.
Exemptions for special areas and mechanics
If your anticheat supports exemptions — bypass permissions or check-free regions — use them narrowly: for the lobby launch pad or an arena with a special mechanic, not the whole server. Don't hand bypass to every moderator and donor: a cheater with a bypass permission is the worst case there is.
If a plugin in your game mode moves players in unusual ways and triggers DGuard, tell support which plugin it is and what it does, and attach the ban report if there was one: the fight gets broken down tick by tick and the rule gets fixed.
Appeals: how to review a ban complaint
- 1
Offer one clear channel
A Discord ticket or a form on your website. Put it in the rules and in the ban message so players don't DM every moderator.
- 2
Ask for what you need
Nickname, date and time of the ban, server, what the player was doing, which mods they run.
- 3
Set a response time
Say, 3 days. Put it in the rules and stick to it: silence makes people angrier than a no.
- 4
Someone else reviews it
Not the person who banned. They look at the anticheat report, recordings, the server's TPS at the time and the logs.
- 5
Reply and log the decision
Keep, shorten or lift the ban — with a reason. The decision goes into the log next to the ban.
If the ban was a mistake, lift it, apologise and fix the cause — or next week you'll have another one just like it. With DGuard, send the ban's report to support: we'll go through the fight tick by tick and fix the rule. How to run appeals as a team is covered in building a moderation team, and your appeal procedure belongs in your server rules.
FAQ
Why does my anticheat ban players for lag?
During a ping spike packets reach the server in a burst, and during a TPS drop the server processes them late — time-based checks read that as Timer or Speed. An anticheat that bans on a single flag ends up punishing bad connections.
Can an anticheat ban Bedrock players?
It can: players joining through Geyser move by Bedrock physics, and an anticheat built for the Java client may read that as cheating. Check GeyserMC's anticheat compatibility list and ask your anticheat's developer.
How do I reduce false bans without weakening protection?
Ban on evidence built up across several episodes instead of a single flag, test plugins that move players, and punish in steps. The checks themselves stay the same.
Does DGuard ban for allowed mods?
No. Allowed mods and keybinds are written into DGuard's code and produce no evidence. If a ban still turns out wrong, send its report to support — we'll go through the fight tick by tick and fix the rule.
What should I do if a player was banned by mistake?
Lift the ban, apologise and find the cause: lag, a plugin or a faulty rule. Send the ban report to your anticheat's developer so the mistake doesn't repeat for other players.
Sources
- GeyserMC: what Geyser is
- GeyserMC: current limitations
- GeyserMC: anticheat compatibility
- ViaVersion on Modrinth
- DGuard, the best anticheat for a modern Minecraft server: checks compared with GrimAC, Vulcan, Polar, Intave and Matrix
- DGuard: installation, requirements and troubleshooting
- DGuard: supported Paper and Leaf versions