Releases: darkstarworks/AntiDupePro
Release list
AntiDupePro-3.5.1
[3.5.1] - 2026-07-08
Load fix for Paper 1.21.11.
Fixed
- Plugin failed to load on Paper 1.21.11. The shaded jar carried duplicate
META-INFresources (Netty'sio.netty.versions.propertiesand a BlockHound service file, both pulled in transitively by lettuce-core), which Paper's plugin remapper rejects with a "Duplicate entries detected" error. These redundant entries are now dropped from the jar — the server provides its own Netty at runtime — so the plugin loads normally again. Thanks to imSpartann for the report (#1).
AntiDupePro-3.5.0
3.5.0 - 2026-07-05
Includes auto-updating for when the next update releases.
Added
- Built-in update checking. AntiDupePro now checks Modrinth (with GitHub Releases as a fallback) for new versions and notifies admins. The new
/adp updatecommand addscheck,download(fetch a new build, verify its checksum, back up the current jar, and stage it in the server's update folder to install on the next restart),restore(roll back), andstatus. Off by default beyond notifications — setupdate.modetodownloadorauto-stagein config.yml to enable installs. Works on Spigot too (notices fall back to plain text where clickable messages aren't available). Servers on the-mc26build follow the mc26 release line automatically.
AntiDupePro-3.4.2
[3.4.2] - 2026-07-02
Rename the tag, and optionally send clients nothing at all.
Added
- Rename the ownership tag. New
ownership.namespace/ownership.key
options change what the tag is called in item data — a leaked screenshot or
stream frame then shows something bland likedata:oinstead of
antidupepro:adp_owner, revealing nothing about which plugin wrote it.
Renaming is safe: the previous name is remembered automatically (marker file
plusownership.legacy_keys), items tagged under the old name stay fully
tracked, and they re-stamp onto the new name as they change hands. The
client-side concealment hides old and new names alike during the transition. - Strict strip mode.
strip_all_custom_data: truestrips every plugin's
custom item data from packets sent to clients, not just AntiDupePro's tag —
anything reaching the client is clean. Off by default because CIT resource
packs and client mods that read item data (sorting helpers, price or tooltip
overlays) will see stripped items as blank. Pair it withstrip_whitelist
to preserve the namespaces your pack or mods need — AntiDupePro's own
namespace is never allowed on the whitelist and is ignored if listed.
AntiDupePro-3.4.1
[3.4.1] - 2026-06-30
Let trusted staff peek at the tag.
Added
antidupe.tag.viewpermission. Withhide_tag_from_clientson, the
ownership tag is hidden from every player's client. Grant this node to an
admin or group and their own client keeps the tag visible — handy for
eyeballing it through an NBT-viewer mod without running/data get. Off by
default, so concealment stays total until you grant it. Applies on next login.
(Admins could already read the tag any time with/data get, which reads the
untouched server-side data — this is purely about client-side visibility.)
AntiDupePro-3.4.0
[3.4.0] - 2026-06-30
Hide the tag, sharpen the witnesses, and split the keys.
Added
- Hide the ownership tag from players. New
hide_tag_from_clientsoption
(on by default). AntiDupePro strips its own tag from items in the
packets sent to players, so anyone poking at item NBT with a client mod just
sees nothing — they can't tell a tracked item from an untracked one, and the
old "swap an item between two accounts to see the tag flip" trick stops
working. The tag is untouched server-side, so detection is exactly as before.
Only AntiDupePro's own data is hidden; other plugins' data and resource-pack
item models are left alone. antidupe.witness.exemptpermission. Anyone with this node is never
counted as a nearby witness — handy for staff who patrol invisibly and
shouldn't accidentally vouch for a player's actions.
Changed
- Vanished staff no longer count as witnesses. Proof of Witness now ignores
vanished players (via the standardvanishedflag that EssentialsX,
SuperVanish and PremiumVanish all set). Previously an invisible admin standing
nearby could quietly raise a duper's trust and hide the solo-farming pattern. - Alerts and ledger commands are now separate permissions. Give a moderator
antidupe.alertsto receive dupe alerts without command access, or
antidupe.ledgerfor the/adp ledgercommands.antidupe.adminstill grants
both, so existing setups are unchanged.
Downloads
- Two builds.
AntiDupePro-3.4.0.jaris for Minecraft 1.21.x (Java 21);
AntiDupePro-3.4.0-mc26.jaris for 26.x (Java 25). Grab the one that matches
your server — 1.21.x servers can't load the 26.x build.
AntiDupePro-3.3.5
(Use AntiDupePro-X.X.X-mc26.jar for Minecraft 26.x)
[3.3.5] - 2026-06-13
Speak your language — and a smoother stash teleport.
Added
- 5 built-in translations. Set
language:in config.yml to switch all
in-game messages at once:pt_BRPortuguês do BrasilesEspañoldeDeutschruРусскийplPolski
- Your own edits in
messages.ymlstill win over the chosen translation,
and anything a translation misses falls back to English. Found a wonky
phrase? Corrections are very welcome on GitHub! - Updating? Add one line to your config.yml:
language: pt_BR(or
whichever you want). Without it the plugin stays English.
Fixed
- Stash teleport no longer shows a scary popup. Newer Minecraft
versions ask "this command requires elevated permissions, are you
sure?" when a chat click runs a vanilla command like/execute.
Clicking stash coordinates now uses the plugin's own teleport
(/adp ledger tp), which goes through without any confirmation
dialog — and works the same in every world.
AntiDupePro-3.3.4
[3.3.4] - 2026-06-12
Get dupe alerts outside the game!
Added
- Webhook notifications — AntiDupePro can now push dupe alerts to:
- Discord (paste a channel webhook URL)
- Telegram (bot token + chat id)
- Slack (incoming webhook URL)
- Anything else via a generic JSON webhook (n8n, Zapier, your own bot)
- All off by default. Set them up in the new
notificationssection of
config.yml— each option has step-by-step comments. - Built-in safety rails:
min_severity(default HIGH) so small wobbles don't ping your phone.rate_limit_seconds(default 30) so an alert burst sends one message,
not hundreds.- A broken webhook never affects the server — it just logs one warning
per minute until it works again.
- Notifications use the same language as your
messages.yml.
Good to know
- Updating from an older version? Your existing
config.ymlis kept,
so the newnotificationssection won't appear automatically. Copy it
from the default config (shown in the user guide) into your file. - The ready-made translations move to a later release — webhooks were the
more-requested feature.
[3.3.3] - 2026-06-12
The plugin is now translatable!
Added
- messages.yml — every message shown in-game (alerts, all
/adp
command output) now lives inplugins/AntiDupePro/messages.yml.
Translate or restyle anything you like:- Colors use
&codes (&c= red,&l= bold). {placeholders}are filled in by the plugin — keep them, but you
can move them around in the sentence.- Any line you delete falls back to the built-in English text, so
updates can add new messages without breaking your translation.
- Colors use
- Console logs stay English on purpose — that keeps errors searchable
and makes it easier to get help. - Ready-made translations (e.g.
messages_de.yml) are planned for 3.3.5.
AntiDupePro-3.3.2
(Use AntiDupePro-X.X.X-mc26.jar for Minecraft 26.x)
[3.3.2] - 2026-06-11
A false-alarm crackdown. If your console ever filled up with repeated
[DUPE] alerts, or honest players got flagged, this update is for you.
Fixed
- Alert flood stopped. When another plugin blocked an item pickup
(vault, claim and loot-protection plugins do this), AntiDupePro could
spam hundreds of CRITICAL dupe alerts per second for a single item.
It now waits one tick and only reacts to pickups that really happened —
and a given item can only trigger that alert once. - Worn gear counted twice. Equipped armor and offhand items were
double-counted, so a worn elytra read as 2 and caused bogus
"has more than the ledger says" alerts. - Double chests were invisible. Items moved in and out of double
chests weren't recorded at all, which slowly built up false alarms. - Chest moves measured, not guessed. Shift-clicks into nearly-full
chests, number-key swaps, offhand swaps, double-click gathering and
drag-moves are now recorded by what actually moved. This removes a
whole family of false alarms (and a loophole dupers could abuse). - Mining drops counted correctly. Fortune could make the real drop
differ from the prediction; the plugin now looks at the real drops. - Placing blocks / dropping items is also double-checked one tick
later, so other plugins undoing those actions can't skew balances. - More stable on busy servers. Inventory checks now run on the
correct thread (proper Folia support) and database writes can no
longer collide with each other. - Suspicion cools down properly. It now only fades while a player
has been quiet, instead of fading constantly. - Stash teleport links now work for stashes in the Nether and End.
Added
- Villager trades are tracked. Buying a tracked item (e.g. an
enchanted book from a librarian) is now recorded properly. - Enchanting a book is tracked — the new enchanted book is credited.
- Alert severity now follows your own
alert_thresholdssettings
instead of a built-in list of "important" items.
Good to know
- If players were wrongly flagged before this update, run
/adp ledger clear <player>once to reset them. - Plugins that hand out items directly (shops, kits, vault plugins like
ElytraVaults) are invisible to any event-based tracker. AntiDupePro is
built to not punish players for that — but if a specific item still
alerts too eagerly, raise its number inalert_thresholds
(materials.yml), or ask the plugin's author to call the
recordSystemGrantAPI.
AntiDupePro-3.3.1
(Use AntiDupePro-X.X.X-paper26-all.jar for Minecraft 26.x)
[3.3.1] - 2026-06-02
Fixed
- Chain integrity false alarm on upgrade from 3.2.x. Pre-3.3.0 entries
stored a global prevHash (each entry linked to the previous one written
server-wide). 3.3.0's per-player verifier expected a per-player prevHash,
which meant the first entry below any player's most-recent legacy entry
read as a chain break on startup. Verification now starts from the most
recent CHAIN_RESET marker, and a one-time migration appends that marker
for every existing player on first 3.3.1 startup. Old entries remain
available for history and balance; the new chain verifies cleanly. detection.on_confirm_commandis now included in the default config.yml.
3.3.0 documented the key but didn't write it on first launch, so fresh
installs had to add it by hand.
Changed
- Startup chain-check log demoted from SEVERE to WARNING — a break is worth
attention but isn't necessarily a dupe; the message now points at
/adp ledger verify <player>for a per-player drill-down.
AntiDupePro-3.3.0
(Use AntiDupePro-X.X.X-paper26-all.jar for Minecraft 26.x)
[3.3.0] - 2026-06-02
A detection-architecture overhaul that eliminates the false-positive classes
seen on raid farms and trial-vault looting, without weakening real detection.
Fixed
- Raid-farm / mob-loot false positives. Mob deaths (and loot-table fills)
now authorise acquisitions, so legitimate looting of evoker totems and raid
drops no longer reads as a dupe. The quantity bound still flags a duped
entity (more items than mobs produced). - Negative-ledger false positives. A negative balance is proof of an
unobserved acquisition (e.g. /give, a shop plugin, a tracking gap), not a
dupe — duping makes a balance go positive, never negative. Reconciliation now
re-baselines to the real inventory and moves on instead of flagging. This was
the root cause of the "has 1 but ledger shows -146" alerts. - Trial-vault / fast-loot false positives. Proof-of-Witness and acquisition-
rate (TMAR) no longer fire standalone alerts; solo play with nobody nearby
never accrues suspicion at all.
Added
- Global
detection.sensitivity(1–100, default 50). One knob from very
lenient to very paranoid; scales the excess needed to alert. - Per-player adaptive suspicion. An earned floor (raised by deterministic
hits and admin confirmation; does not decay) plus transient heat (low-
confidence signals; decays over time). More-suspicious players trip on less. - Confidence-tiered detection. Deterministic detectors (entity-UUID reuse)
alert alone; source-bound excess and balance surplus are gated by suspicion +
sensitivity; TMAR and witness patterns are heat-only signals. - Admin verdict loop.
/adp ledger confirm <player>pins suspicion high and
optionally runsdetection.on_confirm_command({player} placeholder);
/adp ledger clear <player>marks a false positive and resets suspicion. - Baseline-on-join. A never-seen player's owned inventory seeds their ledger
once, so pre-existing items don't read as a surplus. console_log_level(CRITICAL/ERROR/WARNING/INFO/DEBUG) to control verbosity.
Changed
- Source-bound matching consumes authorisations across multiple nearby drops
(fixes a latent excess false-flag when single drops merge into one ground
stack), and is chunk-keyed for O(nearby) performance under farm volume. - TMAR and Proof-of-Witness demoted from triggers to low-confidence signals.