Why Do You Need an Anti-Cheat System?

Cheating on Minecraft servers seriously damages the player experience. Cheats such as KillAura, Fly, Speed, Reach and X-Ray drive honest players off your server. An anti-cheat system detects these cheats automatically and acts on them.

  • Prevents player loss — Cheaters scare honest players away
  • Protects economic balance — Cheats like X-Ray and duping wreck the economy
  • Keeps PvP fair — KillAura and Reach destroy PvP balance
  • Improves server reputation — Well protected servers attract more players
  • Reduces staff workload — An automatic system instead of manual cheat checks

Installing Grim (GrimAC)

GrimAC is a modern, prediction-based anti-cheat. It simulates player movement server-side and detects deviations from the prediction.

Installing GrimAC

cp GrimAC-2.3.jar /opt/minecraft/plugins/
systemctl restart minecraft

After the first start, the configuration files are created in the plugins/GrimAC/ folder.

yaml
# plugins/GrimAC/config.yml
prefix: "&8[&cGrim&8] "
alerts:
  enable-verbose: true
  verbose-format: "%player% failed %check% VL: %vl%"
checks:
  simulation:
    # Movement prediction - the most important check
    threshold: 0.001
    decay: 0.02
  timer:
    # Timer hack detection
    decay: 0.01
  ground-spoof:
    enabled: true
  vehicle:
    enabled: true

Installing and Configuring Vulcan

Vulcan is a premium anti-cheat based on packet analysis. Installation is simple, but reducing false positives requires detailed tuning.

Installing Vulcan

cp Vulcan-2.8.0.jar /opt/minecraft/plugins/
systemctl restart minecraft
yaml
# plugins/Vulcan/config.yml - Key settings
settings:
  prefix: "&8[&cVulcan&8] &7"
  alert-permission: vulcan.alerts
  verbose-permission: vulcan.verbose
  bypass-permission: vulcan.bypass
  max-ping: 1000
  tick-rate: 20

punishments:
  enabled: true
  commands:
    combat:
      min-vl: 20
      commands:
        - "litebans:ban %player% 7d [Vulcan] Combat cheat detected"
    movement:
      min-vl: 15
      commands:
        - "litebans:ban %player% 7d [Vulcan] Movement cheat detected"
    misc:
      min-vl: 10
      commands:
        - "litebans:kick %player% [Vulcan] Suspicious activity"

Reducing False Positives

A false positive is a legitimate player being flagged unfairly. It hurts the player experience. You can minimise the false positive rate with the following methods:

General Tuning Principles

  • Apply graduated punishments: a warning on the first violation, a kick for repeats, a ban for persistent offenders
  • Raise the VL (Violation Level) thresholds: low thresholds increase false positives
  • Add ping-based exemptions: loosen the checks for players with 200ms+ ping
  • Tune mechanics such as elytra and trident: new mechanics can trigger old checks
  • Try it on a test environment: test before applying it to the production server

Vulcan False Positive Settings

yaml
# Vulcan checks.yml — checks that often produce false positives
checks:
  aim:
    A:
      enabled: true
      max-vl: 25  # Default 15, raise it to reduce FPs
    B:
      enabled: true
      max-vl: 30
  speed:
    A:
      enabled: true
      max-vl: 20  # Raise for fast movement FPs
  scaffold:
    A:
      enabled: true
      max-vl: 15  # For players who bridge

Ban System Integration (LiteBans)

To turn anti-cheat detections into automatic punishments, we recommend using a ban management plugin such as LiteBans.

Installing LiteBans

Download LiteBans and place it in the plugins/ folder. It requires a MySQL/MariaDB database:

yaml
# plugins/LiteBans/config.yml
sql:
  driver: MySQL
  address: 127.0.0.1:3306
  database: litebans
  username: litebans
  password: 'strong-password-here'
  prefix: litebans_

Connecting the Anti-Cheat to LiteBans

You can use LiteBans commands inside Vulcan's punishment commands:

ActionCommandDescription
Temporary Banlitebans:tempban %player% 7d [Anti-Cheat] Reason7 day ban
Permanent Banlitebans:ban %player% [Anti-Cheat] ReasonBan with no expiry
Kicklitebans:kick %player% [Anti-Cheat] ReasonRemoves from the server
Mutelitebans:tempmute %player% 1h Spam1 hour mute
IP Banlitebans:banip %player% [Anti-Cheat] ReasonIP-based ban

Preventing Bypasses

Some cheaters will try to bypass the anti-cheat. You can take extra measures to make that harder:

  • Do not run more than one anti-cheat — it causes conflicts and performance problems. One well configured AC is enough.
  • If you use Geyser — prefer Grim for Bedrock players, it has Bedrock support.
  • Add a packet limiter — use PacketLimiter or a similar plugin to block forged packets.
  • Keep up with updates — always keep your anti-cheat on the latest version.
  • Take player reports seriously — review player reports alongside the automatic system.

Blocking VPNs and Proxies

To stop banned players from coming back through a VPN, you can use a VPN/proxy detection plugin.

Anti-VPN Plugins

PluginPriceAPIDescription
Anti-VPN (egg82)FreeMultiple APIsOpen source, uses several VPN APIs
LiteBans (built-in)PremiumBuilt-inLiteBans already supports IP-based bans
IPQualityScoreFreemiumIPQualityScoreAdvanced VPN/proxy/bot detection
AntiVPN Premium8 USDMultipleEasy setup, webhook support
yaml
# Anti-VPN (egg82) config.yml
kick:
  enabled: true
  message: "VPN/Proxy usage is not allowed on our server."
sources:
  order:
    - iphub
    - proxycheck
    - ipqualityscore
  iphub:
    enabled: true
    key: 'API-KEY-HERE'

Performance and Monitoring

Anti-cheat plugins can affect server performance. Check their impact regularly:

Performance analysis with Spark/Timings

/spark profiler start
# wait 5 minutes
/spark profiler stop

In the Spark profiler report you can see how many ms per tick the anti-cheat plugin consumes. A healthy value is in the 1-3 ms/tick range. If it is higher, optimise the configuration.