# 🦆 DuckyAC
**DuckyAC** 是一个轻量级、模块化且完全可配置的 Spigot/Paper Minecraft 服务器反作弊插件。
它检测玩家在放置方块、移动和其他互动中的不自然行为,以有效防止作弊。
> ✅ **推荐**: 建议将 **DuckyAC** 与 **[Vulcan](https://www.spigotmc.org/resources/vulcan-anti-cheat-advanced-cheat-detection-1-8-1-21-5.83626/)** 和 **[GrimAC](https://modrinth.com/plugin/lightning-grim-anticheat)** 结合使用,以获得最大的作弊检测覆盖范围。
---
## ⚙️ 功能
- 🔍 **检查列表**:
- `AirJumpA`: 检测空跳
- `AirPlaceA`: 检测玩家在空中建造
- `AutoTotemA`: 检测可疑的信标植入 (beta 检查)
- `ElytraAimA`: 检测玩家在飞行 elytra 时速度过快
- `ElytraCriticalsA`: 检测玩家在极短时间内飞行 elytra 时造成过多的暴击伤害
- `GroundSpoofA`: 检测玩家发送虚假位置信息
- `FastClimbA`: 检测玩家爬梯子、藤蔓等速度过快
- `FastPlaceA`: 检测玩家同时放置过多的方块
- `FlyA`: 检测玩家飞行 *基础飞行*
- `InvalidPlaceA`: 检测玩家以错误角度放置方块
- `NoSlowDownA-G`: 玩家在某些活动中行走过快的一系列功能
- `NoWebA`: 检测玩家在蛛网中移动速度过快
- `ReachA-B`: 检测玩家与实体/方块互动距离过远
- `ThruBlocksA-B`: 检测玩家穿墙攻击其他玩家
- `TimerA-D`: 检测玩家发送过多的数据包
- 📉 违规等级 (VL) 系统,用于跟踪重复违规行为
- 🔧 完全可配置的阈值、惩罚和启用检查
- 🛡 基于权限的绕过支持(例如,管理员)
- 🔔 聊天和控制台中发送给授权人员 (`duckyac.alerts`) 的警报
- 📩 发送日志和惩罚的 Discord webhook 支持
- 🧠 配置设置缓存,用于性能优化
- 🔄 可选命令重新加载配置 (`/duckyac reload`)
---
## 🧪 示例配置 (`config.yml`)
```yaml
# === DUCKY ANTICHEAT CONFIGURATION ===
# 所有检查按字母顺序排列。每个检查在其上方都有一个简短的英文描述。
# 玩家违规行为重置的时间(以秒为单位)。
# 例如:如果一个玩家对某个检查有 2 个报告,则在超时后,他的计数器将重置为 0。
alert-timeout: 300
# === VIOLATION ALERT MESSAGE TEMPLATE ===
# 用于广播给工作人员/控制台的警报消息格式。
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)
# 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: 3.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: 3.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.'
```
---
## 🔐 权限
| 权限 | 描述 |
|------------|-------------|
| `duckyac.bypass` | 完全禁用此玩家的检查 |
| `duckyac.bypass.-` | 仅禁用定义检查,适用于此玩家 |
| `duckyac.*` | 完全访问(绕过 + 管理员权限) |
| `duckyac.alerts` | 在聊天中收到警报消息 |
| `duckyac.update` | 收到有关可用更新的消息 |
---
## 🚀 安装
1. 将 `DuckyAC-x.x.x.jar` 放入服务器的 `plugins/` 文件夹中。
2. 启动你的服务器。
3. 在 `plugins/DuckyAC/config.yml` 中配置插件。
4. 使用 `/duckyac reload` 重新加载插件。
5. 完成!
---
## 🛠 计划中的功能
- 添加更多战斗检查!
---
## 🤝 贡献/支持
发现了漏洞或有建议?
通过 Discord 联系或在 GitHub 存储库中打开问题!
---
## 📜 许可证
DuckyAC 使用 GPL-3.0 许可证。
您可以在许可证条款下自由使用、修改和重新分发它。
---
## 💡 建议
为获得最佳的防现代作弊客户端保护,强烈建议运行 **DuckyAC 旁边 [Vulcan](https://www.spigotmc.org/resources/vulcan-anti-cheat-advanced-cheat-detection-1-8-1-21-5.83626/)** 和 **[GrimAC](https://modrinth.com/plugin/lightning-grim-anticheat)**。
每个插件都涵盖不同类型的漏洞,它们结合在一起形成强大的防御。
---