
DuckyAC
Lightweight, modular, and fully configurable anti-cheat plugin for Minecraft Servers
Список изменений
🛠️ DuckyAC v1.1.7 - Developer API & Player Check Expansion
In v1.1.7, we're introducing a brand-new public developer API, adding two new player checks — FastEatA and FastBreakA — and improving the internal registration of PacketEvents-based checks such as BadPacketsA.
This update significantly expands DuckyAC's integration possibilities while improving detection coverage for abnormal eating, drinking, and block-breaking behavior.
🔍 Fixes
📡 BadPacketsA -- Packet Listener Registration Fix
- Fixed the internal registration of BadPacketsA.
- Removed duplicate PacketEvents listener registration from the check constructor.
- Packet-based checks are now registered centrally through the main plugin class.
- Prevents checks from being registered more than once and improves consistency across PacketEvents-based detections.
- Updated the internal check counter so both Bukkit and PacketEvents checks are included in the startup registration message.
✨ New Features
🍗 FastEatA (New Check)
-
Added a new player check: FastEatA.
-
Detects food and potion consumption completed faster than vanilla item-use timing allows.
-
Uses PacketEvents to detect when the player begins using an item.
-
Uses the trusted Bukkit
PlayerItemConsumeEventto verify when consumption finishes. -
Compares both:
- elapsed server ticks,
- elapsed real time in milliseconds.
-
Supports main-hand and off-hand item use.
-
Includes protection against false positives caused by:
- high player ping,
- low server TPS,
- Creative and Spectator modes,
- mismatched or changed items,
- expired item-use data.
-
Includes local violation decay and configurable alert thresholds.
-
Supports dedicated bypass permissions and debug logging.
⛏️ FastBreakA (New Check)
-
Added a new player check: FastBreakA.
-
Detects blocks broken faster than Minecraft's calculated vanilla mining speed allows.
-
Calculates the expected break duration using the block's real break speed.
-
Takes into account:
- block hardness,
- the held tool,
- preferred tool status,
- tool changes during mining,
- Haste,
- Mining Fatigue,
- player block-break speed attributes,
- server TPS,
- player ping.
-
Uses both server ticks and real elapsed milliseconds before reporting a violation.
-
Ignores blocks that can normally be broken almost instantly.
-
Supports configurable tolerance values to reduce false positives.
-
Can cancel suspicious block breaking when enabled.
-
Cleans up unfinished breaking sessions when a player stops mining or leaves the server.
🔌 Developer API
🧩 Public DuckyAntiCheat API
- Added a new public API for external plugins and DuckyAC add-ons.
- The API is registered through Bukkit's Services Manager.
- External plugins can access it using
DuckyAntiCheatProvider. - The service is automatically unregistered when DuckyAC is disabled.
Example dependency declaration:
softdepend: [DuckyAntiCheat]
Example API usage:
import pl.barpad.duckyanticheat.api.DuckyAntiCheatAPI;
import pl.barpad.duckyanticheat.api.DuckyAntiCheatProvider;
import pl.barpad.duckyanticheat.api.PlayerViolationProfile;
DuckyAntiCheatAPI api = DuckyAntiCheatProvider.require();
int vl = api.getViolationLevel(player, "ReachB");
boolean flyEnabled = api.isCheckEnabled("fly-a");
int reachLimit = api.getMaxAlerts("reach-b");
PlayerViolationProfile profile = api.getPlayerProfile(player);
int totalVl = profile.getTotalViolationLevel();
Available API Features
The new API provides access to:
- Plugin lifecycle and API readiness.
- Check metadata and categories.
- Enabled and disabled check lists.
- Check configuration values.
- Player violation levels.
- Violation timestamps and snapshots.
- Highest and top violations.
- Manual violation reporting.
- Manual punishment execution.
- Clearing individual or global violations.
- Permission bypass state.
- Alert timeout configuration.
- Custom violation and punishment events.
🧱 External Check Registration
External plugins can register their own runtime checks:
import pl.barpad.duckyanticheat.api.CheckCategory;
api.registerExternalCheck(
"MyAuraA",
"My Aura A",
CheckCategory.COMBAT,
"Detects suspicious combat behavior from my add-on."
);
int newVl = api.reportViolation(player, "my-aura-a", 2);
- External checks can use DuckyAC's violation storage and punishment systems.
- Check IDs are normalized, meaning values such as
ReachB,reach-b, andReach Bresolve to the same check. - Runtime external checks are removed after a plugin or server reload.
📂 New API Classes
Added API structures for:
DuckyAntiCheatAPIDuckyAntiCheatProviderDuckyAntiCheatApiImplCheckCategoryCheckInfoViolationInfoPlayerViolationProfileDuckyViolationEventDuckyPunishmentEvent
Checks can be grouped into the following categories:
COMBATELYTRAMOVEMENTPLACEPLAYERCUSTOM
⚙️ Config Additions
⚠️ Important: Updating your config.yml is required when upgrading to v1.1.7.
The new FastBreakA and FastEatA configuration sections must be added manually if you're keeping your existing configuration file.
Failure to add these sections may prevent the new checks from working correctly.
FastBreakA
# FAST BREAK A
# Detects block breaks completed faster than vanilla mining speed allows.
fast-break-a:
enabled: true
cancel-event: true
max-ping: 300
min-tps: 18.0
min-check-ticks: 4
tick-tolerance: 2
millis-tolerance: 150
start-expire-ms: 30000
max-alerts: 5
command: "kick %player% Fast breaking (FastBreakA)"
debug: false
FastEatA
# FAST EAT A
# Detects food and potion consumption that finishes faster than vanilla item use.
fast-eat-a:
enabled: true
min-ticks: 32
min-millis: 1400
max-ping: 250
min-tps: 18.0
vl-decay-seconds: 30
alert-vl: 3
max-alerts: 6
command: "kick %player% Fast eating (FastEatA)"
debug: false
🔧 Internal Improvements
📋 Improved Check Registration
- PacketEvents checks are now stored separately from Bukkit listener checks.
- The startup message now reports the correct total number of registered checks.
- Added centralized access to the DuckyAC API through the main plugin instance.
- Bukkit service registrations are properly removed during plugin shutdown.
🚨 Violation System API Integration
- Updated the violation system to expose violation data through the public API.
- Added support for custom violation and punishment events.
- External plugins can now listen for detections and punishments without modifying DuckyAC's internal code.
- Added player violation profiles and structured violation information for dashboards, statistics, and integrations.
📦 Version
- Updated plugin version to 1.1.7
📌 Summary
DuckyAC v1.1.7 introduces a complete public developer API, allowing external plugins to read check information, access player violation data, execute punishments, clear violations, listen for events, and register custom runtime checks.
The update also adds FastEatA for detecting abnormally fast consumption and FastBreakA for detecting block breaking faster than vanilla mechanics allow.
Additionally, BadPacketsA and other PacketEvents checks now use improved centralized listener registration, preventing duplicate registration and ensuring the plugin correctly reports the total number of loaded checks.
⚠️ Server owners upgrading from an older version must add the new FastBreakA and FastEatA sections to their existing config.yml before starting the updated plugin.
