Tags
Creators
Details
1.3.0
Compatibility
Changes
🛠️ DuckyAC v1.3.0 - Detection Expansion, Vehicle Flight & Staff Review
v1.3.0 expands DuckyAC to 75 configurable check variants, adds movement, combat, building and packet detections, and introduces persistent staff review of individual alerts.
This release extends the packet engine introduced in v1.2.0, improves handling of partial blocks and legitimate movement, adds VehicleFlyA, and brings all bundled checks into the official release.
✨ New Features
🚤 VehicleFlyA - Boat Flight Detection
- Adds detection of unsupported hovering, sustained ascent and suppressed airborne gravity in occupied boats, including chest boats.
- Checks the controlling player rather than reporting every passenger.
- Combines accepted server positions with fresh
VEHICLE_MOVEpackets. Missing or sparse packets reset evidence instead of being treated as hovering. - Uses real collision shapes across the boat's footprint, including carpets, slabs, stairs, fences, block edges and supporting entities.
- Includes grace periods for mounting, water transitions, bubble launches, teleports, damage, explosions and authoritative server motion.
- Exempts Creative, Spectator, allowed flight and vehicles with gravity disabled.
- Adds buffered reports, structured detection context, TPS gating, debug output, API metadata and
duckyac.bypass.vehicle-fly-a. - Starts in alert-only mode. The check does not eject passengers or teleport their boats.
- Uses an 8-tick window, 3 anomalous samples, a 2-point buffer and a 300 ms alert cooldown. At 20 TPS, continuous unsupported flight can first alert after approximately 550 ms of eligible sampling, excluding grace periods.
⚔️ Combat and Action Checks
- Adds KillAuraA for repeated rapid target switching and KillAuraB for attacks lacking recent swing evidence.
- Adds CriticalsA to correlate suspicious vertical packet patterns with attacks and confirmed damage. Supports weighted evidence for exact and partial signatures.
- Adds FakeLagA for repeated movement stalls followed by compressed packet flushes, with protection against attacks during suspicious flushes.
- Adds FastBowA for bow releases inconsistent with draw time.
- Adds VehicleOneHitA for short bursts of damage to the same boat or minecart. Excessive hits can be cancelled independently of reporting.
- Adds MultiActionsA for action conflicts such as placing while breaking, attacking while using an item and breaking while using an item.
- MultiActionsA uses fresh server item-use state and expires stale digging sessions before accepting conflict evidence.
🧱 Scaffold and Mining Checks
- Adds ScaffoldA for implausible placement angles and ScaffoldB for unusually regular placement timing.
- Adds FastBreakB to evaluate digging-completion packets against expected vanilla mining time.
- Adds NukerA to evaluate digging bursts and distant targets.
- Adds FastExpA for excessive experience-bottle use in a short window.
- Shares mining-state and break-time models between packet checks, including tool and environment information used by the estimator.
- Keeps check configuration and violation levels separate for each detection.
📡 BadPacketsB-F
- Adds BadPacketsB for invalid pitch values and BadPacketsD for invalid slot data.
- Adds BadPacketsC for contradictory item-use sequences.
- Adds BadPacketsE to validate teleport-confirm IDs against outstanding server-issued IDs. Unknown, duplicate and expired confirmations contribute evidence.
- Restricts movement-grace refreshes to matched teleport confirmations within the configured age limit.
- Adds BadPacketsF for invalid
START,STOPandABORTdigging sequences, with bounded session state, buffers and cooldowns. - Adds packet-gate support so checks can cancel confirmed invalid actions before accepted-action state is updated.
🏃 Movement Detection Expansion
SpeedA, StrafeA & BunnyHopA
- Adds SpeedA coverage for excessive horizontal speed, modified low takeoffs, forced downward motion and early-apex patterns.
- Adds StrafeA for implausible airborne direction changes.
- Adds BunnyHopA for repeated jump cycles containing modified takeoff, pull-down, excessive-speed or air-control evidence.
- Accounts for ground support, head and wall collisions, packet timing, movement attributes, effects and recent external motion.
- Uses shared alert arbitration so overlapping movement evidence reports the strongest result and schedules one safe setback.
VelocityA-B, PhaseA, StepA & InventoryMoveA
- Adds VelocityA and VelocityB to evaluate horizontal and vertical knockback response.
- Adds PhaseA to evaluate movement through solid collision shapes.
- Adds StepA for excessive step height and InventoryMoveA for movement correlated with inventory clicks.
- Uses shared environment snapshots, buffers and response settings while retaining independent check IDs and violation levels.
🕷️ SpiderA-C
- Adds SpiderA for stable upward wall climbing, SpiderB for repeated high wall takeoffs and SpiderC for a distinct vertical climb impulse.
- Covers patterns associated with LiquidBounce's Vanilla, Polar-29.03.2025 and Vulcan288 Spider modes.
- Requires relevant wall contact and clears evidence during exemptions, external motion and obstructed-head conditions.
- Excludes supported half-block steps from wall-jump evidence.
- Adds configurable buffers, cooldowns and safe setbacks.
🪜 FastClimbA-B
- Replaces the event-based FastClimb implementation with packet-backed models.
- Reworks FastClimbA for sustained Motion-style climbing and adds FastClimbB for Clip-style vertical movement.
- Tracks climbable-block contact and requires repeated evidence, with collision and external-motion safeguards.
- Removes the obsolete FastClimb event-cancellation setting during migration.
🌊 JesusA-D & GroundSpoofB
- Adds JesusA for repeated movement over liquid surfaces.
- Adds JesusB for alternating liquid offsets and buoyancy patterns.
- Adds JesusC for alternating ground-state claims near liquid surfaces.
- Adds JesusD for suspicious vertical launches from water, with separate handling of bubble-column conditions.
- Covers patterns associated with LiquidBounce's Vanilla, NoCheatPlus, VerusB3901 and Vulcan291 liquid-walk modes.
- Adds GroundSpoofB for persistent airborne claims while the server confirms stable full-block support.
🪂 Elytra Detection
ElytraFlyA-C
- Adds ElytraFlyA for static hovering, direct vertical control, ascent and horizontal movement overrides.
- Adds ElytraFlyB for sustained deviations from vanilla elytra flight physics, including boost patterns.
- Adds ElytraFlyC for repeated automated pitch cycles associated with Pitch40Infinite behavior.
- Includes a short vertical-axis signature for Static ElytraFly.
- Compares movement with server collision state, attached-firework launches, Riptide and recent external motion.
- Tunes ElytraFlyA/B using reviewed detections, extends grace for real firework momentum and uses direct speed residuals for sustained-flight evidence.
- Shortens sustained ElytraFlyA/B alert intervals to approximately 300-400 ms under the corresponding detection conditions.
ElytraFireworkA & ElytraPacketsA
- Adds ElytraFireworkA for long, highly regular rocket cadence and associated inventory-swap patterns.
- Adds ElytraPacketsA for repeated start-flying actions while the server already considers the player gliding.
- Keeps flight and automation checks alert-only by default. Excessive start-flying actions can be cancelled through their separate prevention setting.
🔍 False-Positive Fixes
🧱 PhaseA and Partial Blocks
- Clears stale collision evidence in Creative, Spectator, allowed flight, vehicle and teleport-grace states.
- Uses the player's current pose dimensions when evaluating movement.
- Evaluates the horizontal movement sweep at step height, including carpets, slabs, stairs, snow layers, diagonal corners and movement out of an existing overlap.
- Checks actual block collision shapes and avoids forcing chunk loads during these collision queries.
- Records pose, collision height and movement measurements in detection context for staff review.
🐌 NoSlowDownG and Shared Movement State
- Corrects the legacy sneak-speed limit that could sit below legitimate vanilla sneak movement.
- Requires server support and clears evidence through airborne and step transitions.
- Preserves exemptions for game modes and legitimate external movement.
- Updates shared item-use state so cancelled actions do not start a new accepted use session.
Movement Timing and Rotation
- Stops SpeedA from amplifying displacement after closely spaced packet arrivals.
- Excludes supported partial-block steps from SpiderB takeoffs.
- Skips BadPacketsA rotation-pattern analysis outside Survival and Adventure.
- Retains grace periods and fresh-environment requirements across movement models.
🧑⚖️ Staff Review and Detection Records
- Adds clickable alert controls to confirm a detection, mark it as a false positive or undo a decision.
- Assigns a unique alert ID to each recorded detection and exposes it through
DuckyViolationEvent. - Stores detection and label events locally in JSON Lines files under the configured
learning-data/directory. - Captures available movement deltas, rotation changes, packet intervals, ping, TPS, player state and check-specific features through
DetectionContext. - Restores labels and structured detection features after plugin or server restarts.
- Removes an active VL contribution when its detection is marked as a false positive; undo restores a contribution that was removed.
- Prevents an already labeled alert from being labeled again until its decision is undone.
- Adds configurable button text, hover text and staff messages, plus the dedicated
duckyac.learning.labelpermission. - Provides
/duckyaclabel <correct|false|undo> <alert-id>for direct review actions. - Collects reviewed examples for future model training and detection tuning.
🧩 Packet Engine and API Improvements
- Extends the shared PacketEvents pipeline with teleport-confirm updates, client vehicle movement and authoritative entity-motion notifications.
- Adds action, block-interaction and entity-interaction gates for sequence-aware prevention.
- Tracks outstanding teleport IDs, accepted item-use state, swing timing, inventory clicks and movement evidence shared by checks.
- Expands packet diagnostics with teleport matches, invalid confirmations and gated packet counts.
- Adds
DetectionContextoverloads to violation reporting so add-ons can attach structured measurements. - Preserves the existing violation-event constructor while adding alert-ID access for integrations.
- Expands built-in check metadata and configuration exposure through the public Bukkit service API.
- Keeps configurable check IDs, violation levels and permissions independent even when their implementation shares a model or engine.
⚙️ Configuration and Upgrade Notes
DuckyAC v1.3.0 uses config-version: 29. PacketEvents remains a required plugin dependency; this build compiles against PacketEvents 2.11.2 and the Spigot 1.20.6 API, targeting Java 21.
- Adds configuration sections for the new movement, combat, building, mining, elytra, packet and vehicle checks.
- Adds
machine-learningsettings for local detection storage and staff labeling. - Migrates older configurations while preserving customized values except where a documented legacy default is replaced.
- Replaces the original VehicleFlyA timing defaults with the faster profile: 12 → 8 window ticks, 4 → 3 anomalous samples, 3 → 2 buffer points and 750 → 300 ms cooldown. Independently customized values are retained.
- Removes retired
aim-assist-aandaim-assist-bconfiguration entries. - Removes previous prerelease heading labels from existing check comments.
- Presents all bundled checks as official release checks in configuration and documentation.
Many new checks default to alert-only: true. KillAuraB and BadPacketsC default to disabled and can be enabled individually. Alert-only mode controls command punishment; cancellation and setbacks have their own settings where supported.
To upgrade:
- Back up
plugins/DuckyAntiCheat/config.ymland the learning-data directory. - Stop the server and replace the DuckyAC JAR, keeping PacketEvents installed.
- Start the server to apply configuration migration.
- Review the new sections, check enable switches, staff permissions and prevention settings.
The current VehicleFlyA timing profile is:
vehicle-fly-a:
enabled: true
alert-only: false
min-tps: 19.0
window-ticks: 8
required-samples: 3
gravity-tolerance: 0.12
buffer-threshold: 2.0
alert-cooldown-ms: 300
max-alerts: 5
command: "kick %player% Invalid boat flight (VehicleFlyA)"
debug: false
📖 Documentation
- Rewrites the README around the current feature set, all 75 check variants, installation, configuration, staff review, permissions and developer integrations.
- Replaces the outdated full configuration dump with a focused example and a link to the maintained defaults.
- Removes recommendations to install other anti-cheat plugins from the project description.
- Updates release information to 1.3.0 and configuration information to version 29.
🧪 Verification
- 226 automated tests passed with 0 failures in the verified build.
- Adds regression coverage for legal falls, upward launches, packet batching and stalls, terrain support, wall-climb and liquid-walk patterns, elytra models, mining sequences and staff-review persistence.
- Verifies the faster VehicleFlyA response against the original profile while retaining legitimate movement and packet-delay cases.
- Checks configuration structure, packet registration, permissions and model defaults.
- Builds successfully with the Gradle wrapper. Automated model tests cover the simulated scenarios described above; behavior on a running server depends on server conditions and the selected settings.
📦 Version
- Updates DuckyAC from 1.2.0 to 1.3.0.
- Keeps all bundled checks in the official release with individual enable and response settings.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:BoCwnbvl:nHvwBj9r"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:BoCwnbvl:nHvwBj9r"
}

