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.
✅ Recommended: Use DuckyAC in combination with Vulcan and GrimAC for maximum cheat detection coverage.
- 🔍 Checks List:
AirJumpA: Detects Jumping in airAirPlaceA: Detects when player are building mid airAutoTotemA: Detects suspicious totem planting (beta check)AutoTrapA: Detects suspicious trap placingElytraAimA: Player was detected to be hitting too fast while flying an elytraElytraCriticalsA: Detects when a player deals too much critical damage while flying an elytra in too short a timeGroundSpoofA: Detects when player is sending false informations about his positionFastClimbA: Detects to fast player climbing on ladder, vines etc.FastPlaceA: Detects when a player places too many blocks at a timeFlyA: Detects when player is flying basic flyInvalidPlaceA: Detects when a player has placed a block at the wrong angleNoSlowDownA-G: Many features of the player walking too fast during certain activitiesNoWebA: Detects player movement that is too fast while in a webReachA-B: Detects when player is interacting with entities/blocks to far away his distanceThruBlocksA-B: Detects when a player hits another player through a wallTimerA-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)
# === 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: "**AntiCheatSystem**\nPlayer: **%player%**\nCheck: **%check%**\nViolation: **%vl%**"
punishment-message-template: "**Punishment Executed**\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.'| 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 |
- Place
DuckyAC-x.x.x.jarin your server’splugins/folder. - Start your server.
- Configure the plugin in
plugins/DuckyAC/config.yml. - Reload plugin with
/duckyac reload. - Done!
- Add more combat checks!
Found a bug or have a suggestion?
Reach out via Discord or open an issue in the GitHub repository!
DuckyAC is licensed under the GPL-3.0 License.
You are free to use, modify, and redistribute it under the terms of the license.
For the best protection against modern cheat clients, it is strongly recommended to run DuckyAC alongside Vulcan and GrimAC.
Each plugin covers different types of exploits, and together they form a powerful defense.