Перейти к содержимому
Mineforgian

AntiDupePro

Detect Duplicated items in a smart way

Загрузки
353
Подписчики
5
Обновлён
8 июля 2026 г.
Лицензия
CC-BY-NC-ND-4.0

Опубликован 30 мая 2026 г.

adp-banner

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

  1. Download the jar that matches your server: plain for Minecraft 1.21.x, -mc26 for 26.x.
  2. Drop it into plugins/.
  3. Start the server. Defaults are sensible; the plugin generates config.yml and materials.yml on first launch.
  4. Done. Run /adp help in-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 settings
  • materials.yml — tracked materials, rate limits, alert thresholds
  • messages.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

Ченджлог

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-INF resources (Netty's io.netty.versions.properties and 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-INF resources (Netty's io.netty.versions.properties and 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 update command adds check, 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), and status. Off by default beyond notifications — set update.mode to download or auto-stage in config.yml to enable installs. Works on Spigot too (notices fall back to plain text where clickable messages aren't available). Servers on the -mc26 build 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 update command adds check, 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), and status. Off by default beyond notifications — set update.mode to download or auto-stage in config.yml to enable installs. Works on Spigot too (notices fall back to plain text where clickable messages aren't available). Servers on the -mc26 build 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.key options change what the tag is called in item data — a leaked screenshot or stream frame then shows something bland like data:o instead of antidupepro:adp_owner, revealing nothing about which plugin wrote it. Renaming is safe: the previous name is remembered automatically (marker file plus ownership.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: true strips 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 with strip_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.
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.key options change what the tag is called in item data — a leaked screenshot or stream frame then shows something bland like data:o instead of antidupepro:adp_owner, revealing nothing about which plugin wrote it. Renaming is safe: the previous name is remembered automatically (marker file plus ownership.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: true strips 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 with strip_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.
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.view permission. With hide_tag_from_clients on, 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_clients option (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.exempt permission. 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 vanished flag 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.alerts to receive dupe alerts without command access, or antidupe.ledger for the /adp ledger commands. antidupe.admin still 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.view permission. With hide_tag_from_clients on, 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_clients option (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.exempt permission. 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 vanished flag 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.alerts to receive dupe alerts without command access, or antidupe.ledger for the /adp ledger commands. antidupe.admin still grants both, so existing setups are unchanged.

Комментарии

Загружаем…