DuckyAC
Lightweight, modular, and fully configurable anti-cheat plugin for Minecraft Servers
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
DuckyAC
🦆 DuckyAC
DuckyAC is a lightweight, modular, and fully configurable anti-cheat plugin for Spigot/Paper Minecraft servers. It detects unnatural player behavior in block placing, movement, and other interactions to effectively prevent cheating.
> ✅ DuckyAC: Use DuckyAC in combination with DuckyAC and %%MD1%% for maximum cheat detection coverage.
---
⚙️ Features
- 🔍 Checks List: - `AirJumpA`: Detects Jumping in air - `AirPlaceA`: Detects when player are building midair - `AutoTotemA`: Detects suspicious totem planting (beta check) - `AutoTrapA`: Detects suspicious trap placing - `BadPacketsA`: Detects abnormal yaw/pitch ratio (aim step / packet manipulation) - `ElytraAimA`: Player was detected to be hitting too fast while flying an elytra - `ElytraCriticalsA`: Detects when a player deals too much critical damage while flying an elytra in too short a time - `GroundSpoofA`: Detects when player is sending false information about his position - `FastClimbA-B`: Detects to fast player climbing on ladder, vines etc. - `FastPlaceA`: Detects when a player places too many blocks at a time - `FlyA`: Detects when player is flying *basic fly* - `InvalidPlaceA`: Detects when a player has placed a block at the wrong angle - `NoSlowDownA-G`: Many features of the player walking too fast during certain activities - `NoWebA`: Detects player movement that is too fast while in a web - `ReachA-B`: Detects when player is interacting with entities/blocks to far away his distance - `ThruBlocksA-B`: Detects when a player hits another player through a wall - `TimerA-D`: Detects when a player sends too many packets - 📉 Violation Level (VL) system for tracking repeated offenses - 🔧 Fully configurable thresholds, punishments, and enabled checks - 🛡 Permission-based bypass support (e.g., for admins) - 🔔 Alerts in chat and console to authorized staff (`duckyac.alerts`) - 📩 Discord webhook support for sending logs and punishments - 🧠 Config setting caching for performance optimization - 🔄 Optional command to reload config (`/duckyac reload`)
---
🧪 Sample Configuration (`config.yml`)
```yaml
=== DUCKY ANTICHEAT CONFIGURATION ===
All checks are listed alphabetically. Each check has a short English description above it.
Time after which a player's violations reset (in seconds).
Example: if a player gets 2 reports for a check, after this timeout their counter resets to 0.
alert-timeout: 300
=== VIOLATION ALERT MESSAGE TEMPLATE ===
Message format used when broadcasting alerts to staff / console.
alert-message: "&d&lDuckyAC &8» &fPlayer &7»&f %player% &7»&6 %check% &7(&c%vl%VL&7)"
=== CHECKS (alphabetically ordered) ===
AIR JUMP A
Detects jumping in the air
air-jump-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting ignore-external-velocity: true min-upward-velocity-y: 0.25 detect-pressure-plates: true jumppad-plate-grace-ms: 450 min-horizontal: 0.02 external-velocity-grace-ms: 700 vertical-threshold: 0.3 damage-ignore-millis: 500 detect-wind-charge: true wind-charge-grace-ms: 900 ignore-potion-boost: false # Keep it false; it's a disabling player checking when player has Jump Boost effect max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Unnatural air jump detected (AirJumpA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
AIR PLACE A
Detects block placements in midair (no supporting blocks nearby).
air-place-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-alerts: 3 # Number of reports after which the command is executed command: "kick %player% Invalid block placement (AirPlaceA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
AUTO TOTEM A
Detects extremely fast totem swaps (auto totem macros).
auto-totem-a: enabled: true # Function to enable/disable check min-delay: 150 # Minimum allowed swap interval in ms tick-interval: 3 max-ping: -1 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Too fast totem swap (AutoTotemA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
AUTO TRAP A
Detects quick enclosing of a player with wood blocks and cobwebs (auto trap macros).
auto-trap-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will cancel the block placement max-time: 2000 # Maximum time in milliseconds to detect the trap pattern min-blocks: 6 # Minimum wood blocks required to consider it a trap max-distance: 5.0 # Maximum distance from the placed block to the nearest player max-alerts: 3 # Number of reports after which the command is executed command: "kick %player% Suspicious auto-trap detected (AutoTrapA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
ELYTRA AIM A
Detects abnormal aiming/targeting while using an Elytra (aim assistance).
elytra-aim-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-firework-delay: 200 # Time in milliseconds when a player hits another player a second time within the set time will be reported max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Cheating with Elytra (ElytraAimA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
ELYTRA CRITICALS A
Detects repeated "critical" hits while using Elytra that may indicate cheats.
elytra-criticals-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting critical-hits-required: 3 # The number of critical hits a player can land in a time frame to report the player. timeframe: 700 # Timeframe in milliseconds to count critical hits max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Cheating with Elytra (ElytraCriticalsA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
FAST CLIMB A
Detects unnatural fast ladder/climb movement.
fast-climb-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-climb-speed: 0.15 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% You climbed too fast (FastClimbA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
FAST PLACE A
Detects placing blocks too quickly (anti-fast-place).
fast-place-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-per-tick: 4 max-alerts: 3 # Number of reports after which the command is executed command: "kick %player% Too fast block placement (FastPlaceA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
FLY A
fly-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting ignore-jump-boost: true ping-threshold: 250 hover-delta: 0.01 hover-ticks: 15 ascend-delta: 0.42 ascend-ticks: 8 damage-ignore-millis: 1500 teleport-ignore-millis: 2000 detect-wind-charge: true wind-charge-grace-ms: 900 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Flying (FlyA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
=== GROUND SPOOF A ===
Heuristic check for clients that lie about being "on ground".
Conservative defaults chosen to minimise false positives.
ground-spoof-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting ping-threshold: 300 check-depth: 3.0 min-ground-distance: 0.50 vertical-tolerance: 0.02 damage-ignore-millis: 300 teleport-ignore-millis: 500 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Suspected ground spoof (GroundSpoofA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
HITBOX A
Detects attackers that appear to hit targets outside reasonable hitbox angles/distances.
hitbox-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-angle: 40.0 max-distance: 3.5 max-tolerance: 0.2 ping-threshold: 300 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Too large hitboxes (HitboxA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
INVALID PLACE A
Detects block placements with an invalid looking angle (player not plausibly looking at placement).
invalid-place-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-angle: 50 # Maximum angle allowed between a look direction and placed block max-alerts: 3 # Number of reports after which the command is executed command: "kick %player% Invalid block placement (InvalidPlaceA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
NO WEB A
Detects suspicious movement while in cobwebs (NoWeb cheats).
no-web-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-alerts: 3 # Number of reports after which the command is executed command: "kick %player% Suspicious movement in cobwebs (NoWebA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
NO SLOWDOWN B / C / D
NoSlowDown checks for different situations (bow, crossbow, shield).
no-slowdown-max-distance: 1.0 # ignore distance used by multiple NoSlowDown checks
no-slowdown-a:
Detects walking too fast while eating.
enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-eating-speed: 0.20 max-distance: 1.0 ignored-speeds: - 0.5072 - 0.3024 - 0.2933 - 0.4822 - 0.5013 - 0.5014 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast while eating (NoSlowDownA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-b:
Detects walking too fast with a drawn bow.
enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-bow-speed: 0.20 ignored-speeds: - 0.5072 - 0.3024 - 0.2933 - 0.4822 - 0.5013 - 0.5014 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast with a drawn bow (NoSlowDownB)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-c:
Detects walking too fast while drawing a crossbow.
enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-speed: 0.20 ignored-speeds: - 0.5072 - 0.3024 - 0.2933 - 0.4822 - 0.5013 - 0.5014 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player walked too fast while drawing the crossbow (NoSlowDownC)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-d:
Detects walking too fast while holding a shield.
enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-speed: 0.20 ignored-speeds: - 0.5072 - 0.3024 - 0.2933 - 0.4822 - 0.5013 - 0.5014 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast while holding a shield (NoSlowDownD)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-e:
Detects walking too fast on honey blocks.
enabled: true # Function to enable/disable check max-speed: 0.170 max-alerts: 5 command: "kick %player% Player was walking too fast on honey block (NoSlowDownE)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-f:
Detects walking too fast on soul sand.
enabled: true # Function to enable/disable check max-speed: 0.170 max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast on soul sand (NoSlowDownF)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-g:
Detects walking too fast while sneaking.
enabled: true # Function to enable/disable check max-speed: 0.135 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast while sneaking (NoSlowDownG)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
no-slowdown-h:
Detects walking too fast while drinking; includes an "ignore-after-speed" threshold.
enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-speed: 0.20 ignore-after-speed: 1.0 # The player is unable to go faster than a value of 1, so any value above that will be false, this feature prevents false reports max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% Player was walking too fast while drinking (NoSlowDownH)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
REACH A
Detects interacting with (placing or breaking) a block from an impossible distance.
Takes into account per-player block_interaction_range attribute where available, plus tolerance and ping adjustments.
reach-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting base-range: 5.0 # Default base reach (used when player attribute is not available) tolerance: 0.2 # Extra tolerance added to reach checks ping-threshold: 300 # If player's ping exceeds this, the check will grant an extra 0.5 block tolerance for player max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Interacting with distant block (ReachA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
REACH B
Detects attacking players/mobs from an impossible (too far) distance.
Uses configurable base range, tolerance, and ping threshold.
reach-b: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting base-range: 4.0 # Default base reach (used when player attribute is not available) tolerance: 0.2 # Extra tolerance added to reach checks ping-threshold: 300 # If player's ping exceeds this, the check will grant an extra 0.5 block tolerance for player max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Interacting with distant player (ReachB)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
THRU BLOCKS A
Detects hitting entities through blocks (A variant).
thru-blocks-a: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Hitting through blocks (ThruBlocksA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
THRU BLOCKS B
Detects hitting entities through blocks (B variant).
thru-blocks-b: enabled: true # Function to enable/disable check cancel-event: false # Enabling this feature will take you back to the position before reporting max-alerts: 5 # Number of reports after which the command is executed command: "kick %player% Hitting through blocks (ThruBlocksB)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
TIMER checks (A.D)
Detects abnormal packet timing / fast-clicking / timer manipulation.
timer-a: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-packets-per-second: 24 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% You send too many packets (TimerA)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
timer-b: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-packets-per-second: 24 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% You send too many packets (TimerB)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
timer-c: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-packets-per-second: 24 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% You send too many packets (TimerC)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
timer-d: enabled: true # Function to enable/disable check cancel-event: true # Enabling this feature will take you back to the position before reporting max-packets-per-second: 30 max-alerts: 10 # Number of reports after which the command is executed command: "kick %player% You send too many packets (TimerD)" # The command that will be executed when the maximum number of reports is reached debug: false # Enable verbose debugging (may cause log spam / lag)
=== DISCORD / MESSAGES / MISC ===
Discord integration settings (optional).
discord: enabled: false discord-webhook-url: "https://discord.com/api/webhooks/your-webhook-id" username: "DuckyAntiCheat" avatar-url: "https://i.imgur.com/ahbEPVO.png" violation-message-template: "%player%nPlayer: %player%nCheck: %player%nViolation: %player%" punishment-message-template: "%player%nPlayer: %player%nCommand: `%command%`"
Misc messages and labels used by plugin commands.
no-permission: "&d&lDuckyAC &8» &cNo Permission!" incorrect-usage: '&d&lDuckyAC &8» &cUsage: /duckyac reload' update-available: "&d&lDuckyAC &8» &eA new version is available: &c%version%" update-download: "&d&lDuckyAC &8» &eDownload: &a%url%" update-check-failed: "&d&lDuckyAC &8» &cCould not check for updates." player-only: "&d&lDuckyAC &8» &cOnly Players can use this command." config-reloaded: '&d&lDuckyAC &8» &aConfiguration reloaded.' plugin-reloaded: '&d&lDuckyAC &8» &aPlugin successfully reloaded.' ```
---
🔐 Permissions
| Permission | Description | |------------|-------------| | `duckyac.bypass` | Completely disables checks for the player | | `duckyac.bypass.<checkname>-<check-letter example- a>` | Disables only defined check for the player | | `duckyac.*` | Full access (bypass + admin permissions) | | `duckyac.alerts` | Receive alert messages in chat | | `duckyac.update` | Receive messages in chat about an available update |
---
🚀 Installation
1. Place `DuckyAC-x.x.x.jar` in your server’s `plugins/` folder. 2. Start your server. 3. Configure the plugin in `plugins/DuckyAC/config.yml`. 4. Reload plugin with `/duckyac reload`. 5. Done!
---
🛠 Planned Features
- Add more combat checks!
---
🤝 Contributing / Support
Found a bug or have a suggestion? Reach out via Discord or open an issue in the GitHub repository!
---
📜 License
DuckyAC is licensed under the GPL-3.0 License. You are free to use, modify, and redistribute it under the terms of the license.
---
💡 Recommendation
For the best protection against modern cheat clients, it is DuckyAC alongside %%MD1%% to run DuckyAC alongside %%MD1%% and DuckyAC alongside %%MD1%%. Each plugin covers different types of exploits, and together they form a powerful defense.
---