What's Fixed?
Fixed duplicated non-stackable items slipping past confiscation. Items such as tools, armor, and enchanted or named items that had been duplicated share the same internal identity fingerprint ("identity collisions"). In some cases DupeWatch would detect these but fail to actually remove them. Confiscation now reliably catches and removes every copy that shares a duplicated fingerprint.
Fixed a rare server crash under heavy case load. When a large number of cases were created at once, DupeWatch could spawn an unlimited number of background database threads while they waited to save. Database work now runs on a fixed, bounded pool, so a burst of cases can no longer overwhelm the server it simply processes them in order.
What's New?
Improved duplication detection for non-stackable items. DupeWatch now matches duplicated items by their shared identity fingerprint, so duped tools, armor, and enchanted or named gear are recognized as copies of one another even when they don't stack. This makes detection and confiscation of these items far more accurate.
This release focuses on detection accuracy and server stability. No configuration changes are required your existing rules, flags, and settings carry over automatically. To update, simply restart your server!
The developer API (dupewatch-api-1.3.7.jar) has not changed and remains fully compatible.
What's Fixed?
- Added support for Minecraft 26.x (Paper/Folia 26.1.x). DupeWatch now runs correctly on the latest Minecraft versions.
- Fixed economy warning spam in the console. If an economy plugin such as EssentialsX was installed but not fully loaded yet, Money Watch could repeatedly log balance lookup errors every few seconds. DupeWatch now detects when the economy is unavailable, pauses balance checks, logs the issue once, and automatically resumes when the economy plugin is ready.
What's New?
- Full support for Minecraft 1.21.5 through 26.x in a single jar. No separate downloads are needed. Item fingerprinting has been updated so the same item is recognized consistently across supported versions, and existing rules and flags are migrated automatically on first startup.
- Added download tamper protection. The loader now stores a fingerprint of each version when it is downloaded for the first time. If the same version is downloaded again and the file does not match, DupeWatch will refuse to load it and display a warning. This helps protect servers in the unlikely event that a release file is modified or compromised. No setup is required.
This release supports the latest Minecraft 26 builds while remaining fully compatible with Minecraft 1.21.5 and newer. To update, simply replace your existing jar with the new one.
The developer API (dupewatch-api-1.3.5.jar) has not changed and remains fully compatible.
NOTE:
To update to v1.3.5, you must completely remove the old dupewatch.jar before starting your server. (files are okay you can keep the whole dupewatch folder only delete the jar)
When the server starts, DupeWatch will automatically generate a new loader.yml file. Your license key must now be placed in loader.yml instead of config.yml.
This change is required for the new update system. DupeWatch will use your license key to securely check for and download future updates automatically.
If you do not move your license key to loader.yml, the plugin will not start. Once your license key has been added, restart the server and DupeWatch will load normally.
What's fixed?
- Server lag when managing watchlist, cases, and flags is gone. Adding/removing watch rules, creating or resolving cases, and player flagging used to freeze the main server thread. SQLite caused barely noticeable delay, but MySQL under load or network issues caused multi-second TPS freezes. All writes now run in the background, and cache updates instantly so there is no delay.
- Folia crash risk on container scans removed. When a flagged player opened a chest, the plugin previously read container contents off the main thread (unsafe on Folia, racy on Paper). It now safely snapshots contents first.
- Watchlist concurrency crash fixed. Under heavy scanning the rule list could throw errors or lose entries due to unsafe HashMap access from multiple threads. It is now fully thread-safe.
- Startup no longer hangs on data migration. Legacy migration is now time-bounded and shows a clear "migrating, server may pause…" message instead of freezing startup.
- Cleaner console output. Around 80 raw stack traces and debug prints are now routed through the proper logger with a [DupeWatch] tag.
- Database resource leaks fixed. Query cursors are now always properly closed (37 locations), reducing memory and handle usage during long uptime.
- Folia scheduler edge case fixed. Async tasks with a 0-tick delay are no longer rejected.
What's new?
- Detection profile setting is now documented. The
option (default: NORMAL) is now visible in config.yml so admins can change it via config as well!Code:detection.profile- No new APIs in this release. The developer API jar (dupewatch-api-1.3.4.jar) remains unchanged and fully compatible.
- This is a stability and performance update only. Just replace the old jar with the new one.
What's fixed?
- Fixed garbled symbols appearing in chat messages and command responses (e.g. §a, broken separator lines, missing
checkmarks). This affected multiple commands across the plugin and is now fully resolved.
---
What's new?
Auto-Fingerprinting is now on by default
- In v1.3.3 this feature was introduced but disabled. It is now enabled out of the box — no config changes needed.
- Non-stackable items (armor, weapons, tools, etc.) will automatically receive unique IDs as players pick them up.
- Stackable items (ores, spawners, etc.) are still not included and must be added to the watchlist manually.
Developer API
- DupeWatch now ships a standalone API jar: dupewatch-api-1.3.4.jar
- Other plugins can now hook into DupeWatch to read cases, risk levels, quarantine data, scan results, economy
anomalies, and more.
- Add it as a dependency and call DupeWatchAPI.get() to get started.
Full doc here: https://github.com/5RoD/dupewatch-api
What’s fixed?
Duplicate detection is now significantly faster.
Fixed an issue where identical items in a player’s inventory were not always detected correctly. This happened because the player wasn’t being flagged before new IDs were assigned, allowing duplicates to slip through.
What’s new?
Auto-Fingerprinting
Non-stackable items are now automatically assigned unique IDs.
This means custom armor, weapons, and other valuable non-stackables no longer need to be manually added one by one.
Stackable items are not included in this system and must still be added to the watchlist manually. (spawners, ores, etc)
Folia support is here
Took long enough. The plugin works with Folia now, concurrent region scheduling without everything catching fire.
Critical fixes
Services were initializing twice in onEnable(). That's fixed. Listeners don't duplicate on reload anymore either.
Race conditions in ChatInputManager and GuiManager are gone. ActiveFlagManager uses dirty tracking now, blocking calls got pulled out of hot paths, and flag clearing went from O(N) to O(K). There was also a sneaky ItemStack mutation bug that was corrupting data silently, that's dead.
License startup runs async safe, which it should have been doing from the start.
Detection tweaks
Thresholds are configurable now instead of hardcoded. Growth detection moved to config driven logic. ESCALATED states actually trigger deep scans instead of doing nothing useful.
Odd increment detection does something now. Added grace windows for world switches and new rules. Player join tracking got more consistent, which matters more than it sounds like it does.
Performance stuff
Watchlist updates batch process. Debug logging rate limits per player so you don't get 10,000 lines in three seconds. Heatmap writes buffer in batches. Regex patterns precompile, about time. All the existing async systems are still there.
Code cleanup
CommandSanitizer has a strict allowlist. Ripped out dead code. CaseManager API is cleaner. Registry getters don't mutate anymore. TrollService was hitting the wrong players sometimes, that's fixed.
UI improvements
Alert tooltips are better. Quick action buttons added to alerts. Console output format changed. CaseView GUI has a summary panel now. Discord embeds are more customizable.
ConfigValidator shows warnings on startup if something's misconfigured. Added /dw status to see the full system state at a glance.
New features
Per rule growth sensitivity, bumps the schema to v12. /dw export csv if you want to pull data out. /dw player <name> summary command. Case archiving works as soft delete now.
Heatmap overlays by detection type. ML rarity overrides if you need them. Automated false positive reporting, off by default. Startup grace period so the plugin doesn't freak out while the server warms up.
