Polymart is now Voxel Shop! We're upgrading many features of the site, and during this open beta you will experience occasional bugs. Learn more
⚡ DupeWatch: Most Advanced next-gen Anti-dupe plugin for Paper/Spigot🚫✨
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.
New Stuff
Bug Fixes
New Stuff
Bug Fixes
Under the Hood
You can now attach commands directly to detection rules.
Example:
If a player is caught with 500 duplicated items, DupeWatch can automatically run something like:
ban {player} Duping detected
Commands trigger automatically when the rule fires.
You can configure them in the GUI or inside ruleCommands.yml.
Supported placeholders:
{player}
{item}
{count}
This allows automatic punishments like bans, kicks, inventory clears, or anything else your server command system supports.
Full setup guide is available in the Discord.
The scan system did detect violations correctly, but the final message sometimes told admins:
"No issues found"
Even when something was actually detected.
The message now properly reflects the real scan results.
Servers with items created by older DupeWatch versions could crash when:
a player joined
an item was dropped
a scan ran
Older versions stored identity data differently.
Old items used a 32-bit number, while the new system uses a 64-bit number.
DupeWatch now detects both formats so old items no longer crash the plugin.
Some servers configured rule commands but nothing happened when rules triggered.
Two issues caused this:
Commands were executed from a background thread, which Bukkit does not allow.
Rule IDs reset after every server restart, which sometimes broke rule lookups.
Commands now run on the main server thread, and rule IDs now persist across restarts.
Several internal systems were improved:
Inventory change tracking
Money Watch service
Surge tracker
These changes reduce rare crashes and improve detection reliability.
Previously, placeholders like {player} or {item} were inserted directly into console commands.
In rare situations this could allow malformed values to alter the command being executed.
Placeholders are now validated and sanitized before commands run.
Some internal lists kept storing data but never removed old entries.
On active servers this could slowly increase memory usage.
Old data now cleans itself up automatically, keeping memory usage stable.
DupeWatch tracks suspicious activity per player.
Previously, if players left the server, their threat data could remain stored forever.
Inactive player data is now automatically removed after a period of time, preventing memory buildup.
When the plugin reloaded, some background database threads were not shutting down properly.
Over time this could create unused threads running in the background.
All database threads now shut down correctly during reload or shutdown.
One diagnostic database check ran directly on the main Minecraft thread.
On slower databases this could briefly freeze the server.
That check now runs asynchronously, preventing lag.
In rare cases the watchlist system could try to access data that did not exist yet.
Additional safety checks were added to prevent this crash.
Identity data used to save every 30 seconds.
If the server crashed before the next save, some recent identity data could be lost.
The plugin now forces a final save during shutdown, reducing the chance of data loss.
On first startup the plugin generates a secret key file.
In rare edge cases two processes could attempt to create the file at the same time.
The file creation process is now locked and atomic, preventing this issue.
Only a very small part of a SHA-256 hash was used to verify identity salts.
The system now uses a larger portion of the hash, making verification more reliable.
Several internal systems were improved for stability and performance:
Old command tracking data now cleans itself up
Plugin reload behavior improved
Temporary caches behave more predictably
Static counters made thread-safe
Configuration values now validated
Confiscation request data automatically cleans up
Recursive inventory scans now have safe depth limits
Statistics tracking made thread-safe
Error logging improved for easier debugging
Configuration loading simplified
Shared HTTP client implemented
Feature flag system cleaned up
Reduced unnecessary object cloning
Configuration upgrade process improved
Extra safeguards added for ID generation
id engine was giving new id's to all items regardless if it was in the watchlist or not, this has now been fixed!
i accidently removed webhook support from the config.yml now its fixed sorry about that!
This new version introduces an experimental Identity Engine. It is insanely complex and would take years to explain fully, but the short version is that every item on the watchlist now gets a unique, trackable ID. This allows the plugin to detect duplicates across inventories, chests, shulkers, and even nested containers, linking them back to their original owner. It is designed to catch dupes that traditional fingerprinting would miss while intelligently handling stack splits and item transfers to prevent false positives. False positives are still possible, so review everything carefully before banning any user. I also recommend using the threshold or max items option to set a maximum amount per player; even if someone somehow bypasses the plugin, the max amount detection will still catch them.
IT IS RECOMMEND IT TO DELETE AND RE-ADD ALL WATCHLISTED ITEMS AGAIN!
Major Features & Improvements
DELETE YOUR MESSAGES.YML BEFORE STARTING YOUR SERVER THERE IS A NEW UPDATE THERE TOO!
New Features & Enhancements:
Detection Profiles:
Introducing a fully configurable Threat-Adaptive Detection System. You can now choose between LOW, NORMAL, and AGGRESSIVE detection modes directly from the main menu.
LOW: Conservative scanning; only triggers heavy scans for highly suspicious behavior. Minimal server impact.
NORMAL: Balanced detection; standard scanning thresholds and math checks. Default mode.
AGGRESSIVE: Maximum vigilance; lowers thresholds, increases suspicion gain, slows decay, expands pattern analysis, and monitors relational container activity for smarter detection. Perfect for high-security servers.
Profiles dynamically adjust how DupeWatch evaluates player activity, suspicion scores, and tiered detection (Tier 1 lightweight events vs Tier 2 deep analysis). Switching profiles applies immediately without interrupting ongoing scans.
Player SuspicionScore & Lifecycle:
Players now move through a structured lifecycle: CLEAN → MONITORED → ESCALATED → COOLDOWN → FLAGGED.
Tier 1 detection (pickup events, inventory interactions) feeds the SuspicionScore, which controls escalation to heavier Tier 2 modules (ScanBasedDetectionService, ContainerWatchService).
Score decay, threshold modifiers, and dwell-time rules prevent thrashing and ensure accurate, CPU-friendly detection even under heavy activity or macro bursts.
Smart Tiered Scanning:
Tier 1: Always-on, lightweight event tracking (SurgeTracker, inventory/container listeners). Fire-and-forget signals.
Tier 2: Heavy-duty scans triggered only for monitored/escalated players. Includes deep math pattern checks, container content logging, and relational awareness (e.g., if Player A triggers ESCALATED in a container, Player B interacting with the same container is monitored).
ScanDispatcher ensures safe snapshot scheduling, rate-limited per tick, and async processing to prevent server freezes.
Fixes:
Copper Chest Support: All copper chest variants are now fully detected by DupeWatch. This includes:
copper_chest, exposed_copper_chest, weathered_copper_chest, oxidized_copper_chest
waxed_copper_chest, waxed_exposed_copper_chest, waxed_weathered_copper_chest, waxed_oxidized_copper_chest
Items inside any of these chests are now properly scanned, flagged, and included in duplication detection. Double chests using these variants are fully supported.
Safety Invariants & Performance:
Max snapshots per tick, bounded async queues, ephemeral fingerprint caching, and per-player cooldowns ensure even AGGRESSIVE mode cannot crash the server.
Redundant scans are eliminated; coalescing scan requests and tick-level burst clamping keep CPU usage minimal.
Other Improvements:
Dynamic hot-swapping of detection profiles from the main menu without restarting the server.
All profile changes immediately affect gain, decay, threshold, and Tier 2 analysis depth.
Logs and alerts now respect profile settings, giving admins clear, actionable information.
Since update 1.2.1, custom items from EcoItems, MMOItems, and other plugins were not being detected correctly. This update fully resolves that issue. All existing custom item plugins are now supported, and any new custom item plugins will be detected automatically through a dynamic system.
There was a small error that happend when you type /dupewatch, its fixed now :)
Fixed Real Time Detection.
Fixed Run Commands not running on alert threshold.
Fixed Gui Visual glitch showing that Run commands as OFF but it was enabled
Fixed a bug where you couldn't get scanned automatically unless you added a special thing in the config,
added rate limiting so players cant spam items in and out of chests/inventories to stress the server
DupeWatch v1.2.2 – Faster Performance & Smart Alerts
November 6, 2025
Changelog – v1.2.2
New Features
Multi-Layer Caching System
DupeWatch now remembers recently checked items so it doesn’t do the same work over and over.
Example: If a player checks the same chest repeatedly, DupeWatch already knows what’s inside and skips extra work.
Bloom Filter Technology
A fast check that can quickly ignore items you don’t care about.
Example: The plugin can instantly skip regular blocks like dirt or cobblestone without slowing down the server.
Material Type Filter
Another quick filter that instantly skips items that aren’t being watched.
Example: If you only care about diamonds, it ignores all other blocks right away.
Improvements
80%+ CPU Usage Reduction
The plugin now runs much faster and uses less server power.
Example: Before, checking a chest could slow the server; now it’s almost instant.
Smart Debouncing
Stops multiple checks from triggering at the same time.
Example: If a player quickly opens and closes a chest many times, DupeWatch only checks it once.
Automatic Cache Warmup
The plugin gradually learns what’s being watched after startup.
Example: During the first few minutes after server start, DupeWatch “warms up” and then works at full speed.
Alert System Improvements
Threshold-Based Alerts
Alerts now trigger at multiples of a set number instead of every time.
Example: If your alert threshold is 3, you get alerts at 3, 6, 9 violations instead of constantly at 4, 5, 6, etc.
Clearer Alert Messages
Alerts now show player, item, count, and threshold in a clean format.
Example: [DupeWatch] Player123 flagged Diamond Sword [15/10] means Player123 has 15 violations and the alert threshold is 10.
Configuration Enhancements
Settings are now easier to find and use.
Example: You can change alert thresholds or ignore creative mode directly in the plugin menu instead of editing files.
Bug Fixes
Alerts now trigger correctly at the right counts.
Thresholds and intervals now save properly.
Silent detection messages no longer spam the console.
Settings now persist when moving between menus.
If you have reported something in the past week its fixed in this update:
Error with adventure classes,
Added a new silent license verification messages option in the main menu,
Fixed an issue with the edit rule gui glitching out after clicking an option,
made edit rule gui more pretty,
and aton more stuff!
DupeWatch Changelog – v1.1.9 (11-10-2025)
🧩 New Features
Inventory Snapshots
DupeWatch now automatically saves full player inventories when suspects leave the server. You can view these snapshots directly from the case menu, even if the player is offline.
Item Serialization
Added a Base64-based item serializer to reliably store and restore all item data.
Rule Item Preview
When adding a new rule, the item you select now appears as the actual item instead of a paper icon.
⚙️ Improvements
Case Management
Cases now store inventory data and limit the number of notes per case to keep things organized.
GUI Updates
Improved navigation, layout, and state handling across all rule menus for smoother use.
Chat Input Handling
Chat-based configuration for thresholds and intervals is now easier and more flexible.
Database Updates
Expanded the schema to support inventory snapshots and improved performance for data operations.
🐞 Fixes & Stability
Better handling of player disconnect events to ensure snapshots are always saved correctly.
Fixed rare sync issues between active cases and stored data.
General cleanup and performance improvements throughout the plugin.
DupeWatch Changelog – v1.1.8 (04-10-2025)
New Features:
Container Watch: Monitors interactions with containers for flagged players, featuring GUI access, commands to view and clear logs, and optional alerts.
Scheduled Cleanup: Automatically removes old container logs based on configurable retention settings.
Improvements:
Detection Tuning: Enhanced scan-based detection to minimize false positives.
Database Indexing: Optimized queries for improved performance.
Command Enhancements: Improved help and tab completion for commands.
GUI Updates: Refined behavior for Discord webhook toggling.