A highly modular, comprehensive, and extensible Anti-Cheat plugin for Spigot/Paper Minecraft servers. Engineered to detect and prevent a wide variety of cheats—such as speed, fly, reach, auto-click, packet rate, and kill aura—and automatically ban or kick offenders once configurable thresholds are exceeded.
-
Modular Check Framework: Each cheat detection (Speed, Fly, Reach, NoFall, FastBreak, AutoClick, PacketRate, KillAura) is implemented as a separate
Check
class, making it easy to add, remove, or customize checks. -
Dynamic Registration: Automatically loads and registers only the checks enabled in
config.yml
. -
Configurable Thresholds: Fine-tune detection sensitivity per check (e.g., maximum distance, CPS, PPS, attack rate, etc.).
-
Violation Counting & Banning: Maintains a cumulative violation count per player. Once the
ban-threshold
is reached, the plugin bans and kicks the offender with a customizable message. -
Bypass Permission: Grant
anticheat.bypass
to exempt trusted players from all checks. -
Admin Commands:
/anticheat status
— List active checks and their settings./anticheat reload
— Reloads configuration without restarting the server.
-
Lightweight & Performant: Designed to minimize overhead by only listening to necessary events and using efficient data structures.
- Java: Java 17+
- Server: Spigot or Paper 1.20.x (compatible with Paper API 1.20.1-R0.1-SNAPSHOT)
- Build Tool: Maven
-
Build the Plugin
git clone https://github.com/icelaterdc/Minecraft-Anti-Cheat.git cd Minecraft-Anti-Cheat mvn clean package
This produces
Minecraft-Anti-Cheat.jar
in thetarget/
directory. -
Deploy to Server
- Copy the JAR to your server’s
plugins/
folder. - Start or restart your server.
- Copy the JAR to your server’s
-
Configuration
- On first run, a folder
plugins/Minecraft-Anti-Cheat/
is created containingconfig.yml
. - Edit
config.yml
to enable/disable checks and adjust thresholds. - Use
/anticheat reload
to apply changes without a full restart.
- On first run, a folder
Each detection check increments a player-specific violation counter when a rule is triggered. When the total count reaches the ban-threshold
, the following occurs:
- The player is added to the server’s ban list.
- The player is immediately kicked with the
ban-message
defined inconfig.yml
.
Check Name | Event Listened | Trigger Condition | Config Keys |
---|---|---|---|
SpeedCheck | PlayerMoveEvent |
Movement distance > max-distance |
max-distance , threshold |
FlyCheck | PlayerMoveEvent |
Vertical movement > max-height |
max-height , threshold |
ReachCheck | PlayerInteractEntityEvent |
Attack distance > max-reach |
max-reach , threshold |
NoFallCheck | EntityDamageEvent |
Fall damage event | threshold |
FastBreakCheck | BlockDamageEvent |
Time between block breaks < max-speed |
max-speed , threshold |
AutoClickCheck | PlayerInteractEvent |
Clicks per second > max-cps |
max-cps , threshold |
PacketRateCheck | PlayerMoveEvent |
Packets per second > max-packets-per-second |
max-packets-per-second |
KillAuraCheck | EntityDamageByEntityEvent |
Attacks per window > attack-threshold (ms window) |
detection-window-ms , attack-threshold |
Note: Multiple detections across different checks accumulate toward the same ban threshold.
checks:
SpeedCheck:
enabled: true
max-distance: 1.2
threshold: 5
FlyCheck:
enabled: true
max-height: 1.5
threshold: 3
ReachCheck:
enabled: true
max-reach: 3.5
threshold: 4
NoFallCheck:
enabled: true
threshold: 3
FastBreakCheck:
enabled: true
max-speed: 0.7
threshold: 5
AutoClickCheck:
enabled: true
max-cps: 12
threshold: 20
PacketRateCheck:
enabled: true
max-packets-per-second: 20
threshold: 10
KillAuraCheck:
enabled: true
detection-window-ms: 1000
attack-threshold: 8
ban-on-violation: true
ban-threshold: 15
ban-message: "You have been banned for cheating! - AntiCheat"
- enable: Activate/deactivate each check.
- threshold: Number of infractions of that type before a violation is recorded.
- global ban-threshold: Total violations before ban.
- ban-message: Kick message shown upon ban.
We welcome contributions and enhancements! To propose changes:
-
Fork the repository.
-
Create a feature branch:
git checkout -b feature/YourFeatureName
-
Commit your changes with clear messages.
-
Push to your fork:
git push origin feature/YourFeatureName
-
Open a Pull Request against
main
in the upstream repository. -
Ensure your code is formatted and documented, and passes existing tests (if any).
Distributed under the MIT License. See LICENSE for details.
- IceLater – Plugin architect, core development
- Contributors – Thanks to everyone who has contributed
For questions, issues, or support, please open an issue on GitHub.