DupeWatch

Changelog

Every release, newest first. Licensed servers on version: auto get new releases on their next restart.

Latest release 1.6.0·15 Sep 2026

1.6.0

Latest

Confiscation, Money Watch and detection fixes

Before you update

  • Licensed servers on version: auto get 1.6.0 on their next restart. The loader jar you already have is fine.
  • config.yml and messages.yml upgrade on first start. The old copies are saved in plugins/DupeWatch/OLD-BACKUP/.
  • dupewatch.bypass now exempts players from item rules too. OPs don't get it by default, but a * wildcard in your permissions plugin does.

Fixed

  • With quarantine.mode: QUARANTINE, confiscating from the case menu or the spread graph deleted items instead of quarantining them. They're quarantined now, and handed back to the player if they can't be stored.
  • Items inside a shulker box inside another shulker box or a bundle were counted as confiscated but stayed with the player. They're actually removed now, and the count only includes what was taken.
  • Watch rules ignored dupewatch.bypass, so players with it were still flagged. Rules respect it now, like Money Watch and Exploit Guard already did.
  • Auto-fingerprinted items like tools and armour are now checked when a chest or shulker box is opened, not only when they come back out.
  • A watched shulker box could be flagged as a duplicate of itself.
  • Voting on a case trained the machine learning model on the staff member who voted instead of the suspect.
  • Flagged players showed as clean in placeholders, the API, the case view and /dw money.
  • /dw reload made players logging off look like they had created money.
  • Money Watch and Pay-All didn't start if your economy plugin loaded after DupeWatch.
  • Stopping a server where Money Watch never started deleted the saved money flags.
  • A player could stay stuck as “scan in progress” until restart, and menus that ask you to type in chat could miss your answer.
  • Console commands refused for permissions threw an error instead of saying why.
  • A corrupted inventory snapshot could crash the server.
  • On licensed servers, config and message upgrades used outdated defaults, so new settings and messages were missing. They catch up on first start.
  • The automatic database backup ran on every restart. It now runs at most once a day.
  • Fresh installs no longer create an OLD-BACKUP/${project.version}_to_... folder on first start.
  • exploitGuard.maxEnchantLevel could never trigger at its old default of 255. The default is 254, and configs still on 255 move to 254 once.
  • The ON/OFF labels and a few menu hints stayed in English on translated servers.

Improved

  • Discord webhooks time out instead of hanging, refuse redirects and require an https URL.
  • Machine learning models and inventory snapshots are checked before they load, so a damaged or tampered file is rejected.

Removed

  • alerts.cooldownSeconds and alerts.globalRateLimit. Nothing read them. alerts.alertThreshold controls how often staff are alerted.

Known issue

  • With an older loader jar, the menu's version line and %dupewatch_version% show the loader's version instead of 1.6.0. Replacing the loader jar with the 1.6.0 one fixes the display.

1.5.9

Translatable menus

For translators

  • Menu text lives in the lore: section of messages.yml. Change the text on the right of each line and leave the key alone.

New

  • Every line inside DupeWatch's menus can be translated: labels, headers, click hints, buttons and footers.
  • Lines you leave out fall back to English, so a partial translation just shows partly translated.
  • Colour codes work in translations, so you can restyle a line as well as reword it.

1.5.8

Safer config upgrades and quarantine returns

Fixed

  • One YAML mistake in messages.yml or config.yml used to reset the whole file to English defaults on restart. DupeWatch now logs the broken line, runs on defaults and leaves your file alone. Fix the line and run /dw reload.
  • Returning items from quarantine could give an item back twice, or lose it, when returns overlapped or the player was offline.
  • Two different items could end up with the same fingerprint and be flagged as duplicates of each other.
  • Machine learning predictions could block retraining and server shutdown.
  • Confiscation failed on Folia when staff and the player were in different regions.
  • The live inventory view hid part of the player's inventory. All 36 slots show now.
  • Panic Mode reported evidence as saved before it was.
  • Odd-increment detection could never trigger.
  • /reload left background scan threads running.
  • A licensed plugin that fails to start now disables cleanly instead of staying half enabled.

1.5.7

Folia performance

Improved

  • Checking an item uses less CPU, which adds up on busy servers.

Fixed

  • Teleporting to a player from the case menus failed on Folia.

1.5.6

Hopper lag fix

Fixed

  • On Folia servers with lots of hoppers, DupeWatch could stall region threads and cause mass disconnects.

New

  • identity.hopperTransferCheck.enabled turns the hopper check off on its own, and intervalSeconds sets how often a chest is rechecked. Items are still checked on clicks, pickups and chest opens.

1.5.4 – 1.5.5

Sharper replays

Improved

  • Item, block and text displays, armour stand poses and mob variants now show up in replays.
  • Particles are recorded, including coloured dust, splash potions, bone meal and dragon breath.
  • A replay recorded on one Minecraft version plays back correctly on another.

1.5.3

Reliability and working backups

Changed

  • New installs default quarantine.mode to QUARANTINE instead of DELETE, so evidence is kept.

Improved

  • The cases menu opens instantly, even with a long case history.

Fixed

  • Quarantined items could be returned twice, or lost, when two staff acted at once.
  • If an item can't be saved to quarantine, it goes back to the player instead of disappearing.
  • Automatic database backups failed every time on SQLite.
  • Backups garbled item names and notes that weren't in English.
  • A menu bug let players take items out of DupeWatch menus.
  • A cancelled confiscation could go through later from an unrelated chest click.
  • Machine learning only retrained once per restart.
  • Troll Mode kept running after the player left.
  • Shutdown could stop halfway and skip saving.
  • License errors now say what went wrong.

1.5.0 – 1.5.2

Usage statistics and lighter replays

New

  • Anonymous usage statistics through FastStats, alongside bStats. No player names, UUIDs or IP addresses are sent. Turn it off with faststats.enabled: false.

Changed

  • New installs record a 5×5 chunk area around each case instead of 11×11, which takes less storage. Existing servers keep their setting.

Fixed

  • Bug fixes and stronger protection against leaks.

1.4.5 – 1.4.9

PlaceholderAPI support

New

  • PlaceholderAPI support with 131 placeholders for cases, rules, quarantine, Money Watch, Panic Mode, Clean Sweep and per-player stats. See every placeholder.

Changed

  • Old Money Watch scoring settings are removed from config.yml automatically. Money Watch now flags money that appears from nowhere, which can't be tuned into false positives.

Fixed

  • Container Watch flooded the console once it hit its log limit.
  • Stronger protection against leaks and cracking.

1.4.4

Clean Sweep on by default

Changed

  • Clean Sweep's background audit and confiscation are on by default. This is applied to existing configs once. Set sweep.background.enabled or sweep.confiscate back to false and it stays off. Anything Sweep takes can be put back with /dw sweep undo.

1.4.0

Forensic Replay, Panic Mode, Exploit Guard and Clean Sweep

Before you update

  • DupeWatch now needs Minecraft 1.21.5 or newer. Servers on 1.20 to 1.21.4 should stay on 1.3.9.
  • Panic Mode and Clean Sweep need dupewatch.panic and dupewatch.sweep before anyone can use them.
  • The developer API jar is now dupewatch-api-1.4.0.jar. Everything from 1.3.9 still works.

New

  • Forensic Replay. Every case comes with a recording of the incident. DupeWatch keeps the last 120 seconds for everyone online and freezes the area around a case, so you can watch the suspect, nearby players, drops and block changes in the order they happened. Play, pause, scrub from 0.25× to 4×, and jump to chest opens, commands and inventory changes on the timeline. Playback needs PacketEvents, which is free.
  • Panic Mode. For when a dupe is happening and you don't know who or how. /dw panic saves every online player's replay, inventory and ender chest in under a second, stops paying, trading and dropping items, then finds items that exist in two places and reports who had them. It never bans or confiscates on its own, and lifting it puts everything back instantly.
  • Exploit Guard. Watches for twelve known duplication methods as they happen. Packets a normal client can't send are blocked. The rest open a case instead, so players with bad internet aren't punished. Two more are caught from your server log.
  • Clean Sweep. /dw sweep audits every container on the server, including chunks nobody has loaded in months, without generating terrain. It uses 2 ms per tick, pauses when TPS drops and picks up where it left off after a restart. Anything it confiscates can be put back with /dw sweep undo.
  • Items returned from quarantine get a fresh identity, so they aren't flagged again.
  • Crate and kit plugins can call DupeWatchAPI.get().items().resetFingerprint(item) so reward copies aren't mistaken for dupes.

Changed

  • Runs on Minecraft 1.21.5 through 26.x on Paper, Spigot and Folia.
  • CoreProtect is no longer needed. Evidence capture is built in, and CoreProtect still works alongside DupeWatch.
  • Item fingerprints no longer change between Minecraft versions. Existing rules are re-baselined on first start, and cases and history are untouched.
  • Every menu was reworked, and about 120 settings that needed config edits are now in the settings menu.

Removed

  • Heatmaps, including /dw heatmap and /dw cleanup. Forensic Replay replaces them.

1.3.7

Better detection of duped gear

Improved

  • Duped tools, armour and named or enchanted items are recognised as copies of each other, even though they don't stack.

Fixed

  • Duplicated non-stackable items could be detected but not confiscated. Every copy is removed now.
  • A burst of new cases could crash the server by opening too many database threads.

Hotfix · 28 Jun 2026

  • The console showed version 1.3.5 instead of 1.3.7.

1.3.5

Minecraft 26 and automatic updates

Updating from 1.3.4 or older

  • Delete the old DupeWatch jar before starting the server. You can keep the DupeWatch folder.
  • Your license key now goes in loader.yml instead of config.yml. The plugin won't start until it's there.

New

  • Support for Minecraft 26.x, with one jar for 1.21.5 through 26.x.
  • Automatic updates. DupeWatch downloads new versions with your license key.
  • Download tamper protection. If a version's file changes after its first download, DupeWatch refuses to load it.

Changed

  • Existing rules and flags are migrated automatically on first start.

Fixed

  • Money Watch spammed the console while the economy plugin was still loading. It now waits and resumes on its own.

Hotfix · 2 Jun 2026

  • Fixed the version integrity check.

1.3.4

Developer API and a stability overhaul

New

  • A developer API. Other plugins can read cases, risk levels, quarantine, scan results and economy anomalies with DupeWatchAPI.get(). API docs.
  • The detection.profile setting is now in config.yml.

Changed

  • Auto-fingerprinting is on by default. Non-stackable items get unique IDs as players pick them up. Stackables like ores and spawners still need a watchlist rule.

Fixed

  • Managing the watchlist, cases and flags could freeze the server, especially on MySQL.
  • Chat messages showed garbled symbols like §a.
  • Opening a chest as a flagged player could crash Folia servers.
  • Heavy scanning could break the watchlist.
  • Startup could hang while migrating old data.
  • Console errors are tagged [DupeWatch] instead of printing raw stack traces.
  • Long uptimes slowly leaked database resources.

1.3.3

Auto-fingerprinting

New

  • Auto-fingerprinting gives non-stackable items like custom armour and weapons their own IDs, so you don't have to add them one by one. It shipped turned off and was switched on in 1.3.4.

Improved

  • Duplicate detection is much faster.

Fixed

  • Identical items in an inventory weren't always detected.

1.3.2

Folia support

New

  • Folia support.
  • /dw status shows the state of the whole plugin at a glance.
  • /dw export csv and /dw player <name> summaries.
  • Per-rule growth sensitivity, case archiving and optional automatic false positive reports (off by default).
  • A startup grace period, so detection doesn't overreact while the server warms up, and warnings on startup when something is misconfigured.

Improved

  • Detection thresholds are configurable, escalated players get deep scans, and world switches and new rules get a grace window.
  • Alerts have better tooltips and quick action buttons, the case view has a summary panel, and Discord embeds are more customisable.
  • Debug logging is rate limited per player.

Fixed

  • Listeners were registered twice after a reload.
  • Race conditions in chat input and menus, and a bug that could silently corrupt item data.
  • Troll Mode could target the wrong player.

1.3.1

Machine learning detection

New

  • Machine learning detection. Staff vote DUPE or LEGIT on cases and the model retrains from those votes. Its confidence shows on every case, and all data stays on your server.
  • New servers start with a model trained on bundled data, so detection works before you've voted on anything.
  • /dw ml status, /dw ml retrain, /dw ml export and /dw ml import.
  • Pay-All detection flags a player sending money to lots of people in a short time.

Improved

  • Fewer false positives from scans.

Changed

  • The jar is about 24 MB because it now includes the machine learning engine.

1.2.9

Quarantine

New

  • Quarantine. Flagged items are locked away instead of deleted, and staff can browse each player's quarantine to return or delete them. Returned items come back clean.
  • Discord alerts can ping a role, with a minimum severity and a cooldown.
  • Troll Mode, an optional per-rule setting that crashes a suspected duper's client, with a global switch.

Fixed

  • Rule commands always reported an item count of 2. They count real items across the inventory, ender chest and shulker boxes now.
  • Items returned from quarantine were flagged again straight away.

1.2.8

Automatic punishments

New

  • Rule commands. Attach commands to a rule and they run when it triggers, for example ban {player} Duping detected. Set them up in the menu or in ruleCommands.yml, with {player}, {item} and {count} placeholders.

Fixed

  • /dw scan could say “No issues found” when it had found something.
  • Items created by older versions could crash the server when players joined, dropped items or were scanned.
  • Rule commands sometimes didn't run, and rule IDs reset on restart.
  • Placeholders in rule commands are sanitised, so an unusual name can't change the command.
  • Memory use crept up on busy servers, and database threads survived reloads.
  • A database check could briefly freeze the main thread.
  • Identity data is saved on shutdown, so a crash loses less.

1.2.7

Identity Engine

New

  • The Identity Engine gives every watchlisted item a unique ID, so duplicates are caught across inventories, chests, shulker boxes and nested containers and traced back to the first owner. Stack splits and transfers are handled to avoid false positives.

Hotfix · 13 Mar 2026

  • The Identity Engine gave IDs to every item instead of only watchlisted ones.
  • Webhook settings were missing from config.yml.

1.2.5

Money Watch

New

  • Money Watch detects money duplication through Vault. Normal activity like shop sales is ignored, while things like a balance doubling out of nowhere are flagged.
  • A money spread graph shows how dirty money moved between players, from the player cases menu.
  • Flagged players are remembered across restarts.
  • /dw scan <player> scans someone else, with colour-coded results and name suggestions.

Improved

  • Every menu was rebuilt to be faster and consistent.

Fixed

  • Items with custom names, lore, enchantments or NBT weren't fingerprinted consistently.
  • /dw confiscate failed in some cases, from chat and from the menu.
  • Missing message entries caused console warnings.

Hotfix · 26 Feb 2026

  • Evidence wasn't showing on dirty money cases.

1.2.4

Detection profiles

New

  • Detection profiles: LOW, NORMAL and AGGRESSIVE, switchable from the main menu without a restart.
  • Players move through suspicion stages, and deep scans only run for players who earn them.
  • All copper chest variants are scanned.

Improved

  • Per-tick scan limits keep even AGGRESSIVE mode from lagging the server.

Fixed

  • Custom items from plugins like EcoItems and MMOItems weren't detected since 1.2.1.

1.2.3

CoreProtect evidence

New

  • Cases include the player's CoreProtect history from right before they were flagged, browsable from the case menu. Replaced by Forensic Replay in 1.4.0.

Fixed

  • Some staff alerts and automatic commands were skipped.
  • CoreProtect lookups failed on newer CoreProtect versions.

Hotfix · 7 Feb 2026

  • Real-time detection wasn't working.
  • Run commands didn't fire at the alert threshold.
  • The menu showed run commands as off when they were on.

Hotfix · 19 Feb 2026

  • Typing /dupewatch caused an error.

1.2.2

Faster, quieter alerts

Improved

  • Over 80% less CPU use. Recently checked items are cached, and unwatched items are skipped straight away.
  • Alerts fire at multiples of your threshold (3, 6, 9) instead of on every violation, and show the player, item, count and threshold.
  • Alert thresholds and ignoring creative mode can be set in the menu.
  • Opening the same chest over and over only triggers one check.

New

  • Rate limiting stops players spamming items in and out of containers to stress the server.

Fixed

  • Alerts triggered at the wrong counts, and thresholds and intervals didn't save.
  • Silent detections spammed the console.
  • Players weren't scanned automatically without an extra config setting.

1.1.9

Inventory snapshots

New

  • A player's full inventory is saved when a suspect leaves, and can be viewed from the case menu while they're offline.
  • The item you pick for a new rule shows as that item instead of paper.

Improved

  • Smoother rule menus, and easier chat input for thresholds and intervals.

Hotfix · 15 Oct 2025

  • Fixed a loading error on some servers, including Arclight.

Hotfix · 18 Oct 2025

  • Fixed an error with Adventure classes.
  • An option in the main menu hides license verification messages.
  • The edit rule menu glitched after clicking an option.

1.1.8

Container Watch

New

  • Container Watch logs container activity for flagged players, with a menu, commands to view and clear logs, and optional alerts. Old logs are cleaned up automatically.

Improved

  • Fewer false positives from scans, faster database queries, and better command help and tab completion.

1.1.7

MySQL support

New

  • MySQL support alongside SQLite, switchable in the config. Test the connection with /dupewatch database.

1.1.6

Growth detection

New

  • Growth detection catches players slowly building up watched items, like 5 → 10 → 20 → 40. Staff alerts show the growth and open the case when clicked.

Fixed

  • “Mark as Resolved” sometimes needed two clicks or flipped back.

1.1.5

Minecraft 1.20 to 1.21.8

New

  • Support for Minecraft 1.20 through 1.21.8.

Fixed

  • Inventory change tracking is back on.
  • A batch of crashes and stability issues.

1.1.4

SQLite storage

Changed

  • Data is stored in SQLite instead of JSON files. It's faster and a bad shutdown can't corrupt it.

1.1.3

Heatmaps

New

  • Heatmaps of dupe hotspots around suspects, viewable in game and sent to Discord. Replaced by Forensic Replay in 1.4.0.

Improved

  • Faster scans and case loading.

1.1.1

Global run commands

New

  • runCommands in config.yml runs commands whenever any rule triggers, with %player%, %rule%, %caseId%, %count%, %threshold% and %severity% placeholders.