
AntiDupePro
Detect Duplicated items in a smart way
- Загрузки
- 353
- Подписчики
- 5
- Обновлён
- 8 июля 2026 г.
- Лицензия
- CC-BY-NC-ND-4.0
Опубликован 30 мая 2026 г.
A forensic-grade item-duplication detector for Paper, Folia and Spigot servers.
Most anti-cheat plugins focus on movement, reach and combat exploits. AntiDupePro focuses on a category they usually ignore: the steady drip of duped items that silently inflates your server's economy. It does this by writing an append-only, tamper-evident ledger of every item movement and reconciling each player's actual inventory against what the ledger says they should hold.
If something doesn't add up, you get an alert before the dupe spreads.
Compatibility
| Server software | Paper, Folia, Spigot, and Paper-compatible forks (Purpur, Pufferfish, etc.) |
| Minecraft versions | 1.21.x (plain jar) · 26.x (-mc26 jar) |
| Java | 21+ for 1.21.x · 25+ for 26.x |
| External services | None required (SQLite is bundled). Redis is optional for multi-server networks. |
What it catches
A non-exhaustive list of dupe families AntiDupePro detects:
- Stack-clone exploits — click-timing, cursor desync, drag-and-place tricks
- Shulker / bundle laundering — recursive content scan at any nesting depth
- Item frame dupes — piston-into-frame, chunk-race, end-crystal interaction variants
- Entity inventory dupes — horses, donkeys, llamas, chest boats, chest minecarts
- Hopper laundering — items passing through automation are scanned
- Workstation outputs — smithing, anvil, loom, stonecutter, cartography, grindstone, furnaces
- Container transfers — chests (single and double), barrels, ender chests, lecterns, decorated pots — recorded by what actually moved, so shift-clicks, number-key swaps, double-click gathering and drags are all measured exactly
- Villager trades & enchanting — buying a tracked item or enchanting a book is credited properly
- Chunk-load entity respawn — the "same item entity picked up twice" family
- Drop-pickup race — same-NBT dupes via item-entity persistence
- Acquisition-rate abuse — TMAR (Theoretical Max Acquisition Rate) thresholds per material
- Witness-less acquisitions — Proof of Witness flags players whose actions are never seen by others (vanished staff are correctly ignored, so invisible patrols can't skew trust)
Full coverage matrix and the rare edge cases are documented in the user guide.
How it works
Every tracked item carries the owner's UUID in NBT — items still stack vanilla-style.
Every gain and loss event (mine, craft, pickup, container put/take, frame put/take,
workstation output, etc.) is recorded as a SHA-256-linked ledger entry. The chain
is tamper-evident: editing the database directly breaks the hash chain and
/adp ledger verify reports exactly where.
Reconciliation walks the player's inventory recursively — including the contents of held shulkers and bundles — and compares the total to the ledger balance. A surplus is a dupe.
Invisible to players. The ownership tag is stripped from the packets sent to
clients (on by default), so even players running NBT-viewer mods can't see it,
test it, or tell a tracked item from an untracked one — while the server-side
data stays fully intact for detection. The tag's very name is configurable, so
nothing in a leaked screenshot or stream frame reveals which plugin wrote it —
and renaming is safe: previously tagged items stay tracked and migrate to the
new name automatically. A strict mode can go further and strip every plugin's
custom item data from outbound packets, with a whitelist for the namespaces
your resource pack or client mods need. Staff with antidupe.tag.view keep
the tag visible in their own client.
Built to be false-alarm shy: actions are verified one tick after they happen (so other plugins cancelling a pickup or block place can't skew the books), items handed out by shop/kit/vault plugins are never held against the player, and every alert is gated through per-material thresholds you control.
Storage backends
Pick one, configurable in config.yml:
- SQLite (default) — file-based, persistent, zero ops. Perfect for single-server setups.
- Redis — fast and shareable across multiple servers behind a proxy.
- Memory — in-process only, lost on restart. Dev/testing only.
Installation
- Download the jar that matches your server: plain for Minecraft 1.21.x,
-mc26for 26.x. - Drop it into
plugins/. - Start the server. Defaults are sensible; the plugin generates
config.ymlandmaterials.ymlon first launch. - Done. Run
/adp helpin-game to see admin commands.
Commands
All commands live under /adp (aliases: /antidupe, /antidupepro).
| Command | What it does |
|---|---|
/adp ledger status |
Chain tip, current suspects, system health |
/adp ledger balance <player> |
Expected balances for each tracked material |
/adp ledger history <player> |
Recent ledger entries |
/adp ledger witness <player> |
Witness statistics and suspicion analysis |
/adp ledger suspects |
List all currently flagged players |
/adp ledger reconcile <player> |
Force a balance check on an online player |
/adp ledger trust <player> |
Show accumulated trust score |
/adp ledger verify |
Verify the entire hash chain |
Permissions are split so staff roles can be scoped: antidupe.alerts receives
dupe alerts in chat (no command access), antidupe.ledger grants the commands
above, and antidupe.admin includes both. antidupe.witness.exempt keeps
invisibly-monitoring staff out of the witness pool, and antidupe.tag.view
lets a trusted admin see the (otherwise hidden) ownership tag in their own client.
Configuration
Three YAML files in plugins/AntiDupePro/:
config.yml— storage backend, modes (shadow / auto-delete), ledger settingsmaterials.yml— tracked materials, rate limits, alert thresholdsmessages.yml— every in-game message; fully translatable (missing keys fall back to English)
Speaks your language: English, Português do Brasil, Español, Deutsch, Русский
and Polski are built in — one language: line in config.yml switches everything.
Alerts can also be pushed outside the game: Discord, Telegram, Slack, or any
custom JSON webhook (n8n, Zapier, your own bot) — with severity filtering and
burst protection built in. See the notifications section of config.yml.
Both are documented inline. Sensible defaults; you can add your own materials to the list at any time and restart.
Free and open source
No license key, no telemetry, no "premium" gating. The source is on GitHub. Issues and pull requests are welcome.
Links
- Source / issues: github.com/darkstarworks/AntiDupePro
- User guide: gitbook/user-guide
- Notifications & translation guide: gitbook/notifications-and-translation
- Changelog: gitbook/changelog
Ченджлог
3.5.1-mc26Релиз26.1.1, 26.1.2, 26.2 · 8 июля 2026 г.
[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).
3.5.1Релиз1.21.9, 1.21.10, 1.21.11 · 8 июля 2026 г.
[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).
3.5.0-mc26Релиз26.1.1, 26.1.2, 26.2 · 6 июля 2026 г.
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.
3.5.0Релиз1.21.9, 1.21.10, 1.21.11 · 6 июля 2026 г.
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.
3.4.2-mc26Релиз26.1.1, 26.1.2, 26.2 · 2 июля 2026 г.
[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.keyoptions change what the tag is called in item data — a leaked screenshot or stream frame then shows something bland likedata:oinstead ofantidupepro: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_whitelistto preserve the namespaces your pack or mods need — AntiDupePro's own namespace is never allowed on the whitelist and is ignored if listed.
3.4.2Релиз1.21.9, 1.21.10, 1.21.11 · 2 июля 2026 г.
[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.keyoptions change what the tag is called in item data — a leaked screenshot or stream frame then shows something bland likedata:oinstead ofantidupepro: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_whitelistto preserve the namespaces your pack or mods need — AntiDupePro's own namespace is never allowed on the whitelist and is ignored if listed.
3.4.1-mc26Релиз26.1.1, 26.1.2, 26.2 · 1 июля 2026 г.
[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.)
[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 standard
vanishedflag 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, orantidupe.ledgerfor the/adp ledgercommands.antidupe.adminstill grants both, so existing setups are unchanged.
3.4.1Релиз1.21.9, 1.21.10, 1.21.11 · 1 июля 2026 г.
[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.)
[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 standard
vanishedflag 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, orantidupe.ledgerfor the/adp ledgercommands.antidupe.adminstill grants both, so existing setups are unchanged.
Комментарии
Загружаем…