
DupeTrace is now AntiDupePro
Please switch over to AntiDupePro - Twice as Good!
157
3
Item Duplication Detection Plugin, For PaperMC 1.21.1+
[1.2.0] - 2025-12-04 - Expanded Compatibility
Changed
- Expanded Minecraft Compatibility: Now supports PaperMC 1.21.1+ (previously 1.21.10 only)
- Compiled against Paper API 1.21.1 for maximum backward compatibility
- Tested and verified on 1.21.1, 1.21.3, 1.21.4, 1.21.5, and 1.21.10
- Fixed deprecated URL constructor warning (now uses URI.toURL())
Technical
- Build target changed from
paper-api:1.21.10topaper-api:1.21.1 - No API changes - all existing functionality remains identical
- Expanded Minecraft Compatibility: Now supports PaperMC 1.21.1+ (previously 1.21.10 only)
Changelog
All notable changes to DupeTrace will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.0] - 2025-10-23 - PaperMC 1.21.10 Optimization Release
Added
- Crafter Block Support (1.21+): Full tracking of items crafted via the new crafter block
- Lectern Book Tracking: Detection of book duplication via lectern interactions
- Discord Webhook Integration: Real-time duplicate alerts sent to Discord channels
- Configurable via
discord.enabledanddiscord.webhook-urlin config.yml - Rich embed messages with player, item type, UUID, and location information
- Configurable via
- Advanced Command System: Complete overhaul of
/dupetestcommand with new subcommands:/dupetest uuid <uuid>- View item's recent transfer history (10 entries)/dupetest history <uuid> [limit]- View full transfer log with custom limit/dupetest stats- View comprehensive plugin statistics and metrics/dupetest search <player>- List all tracked items for a specific player- Tab completion support for all commands
- Command aliases:
/dt,/dtrace
- Database Performance Indexes: Four strategic indexes added for query optimization:
idx_transfers_item_uuid- Item UUID lookupsidx_transfers_player_uuid- Player UUID lookupsidx_transfers_ts- Timestamp-based queriesidx_transfers_item_player- Composite index for item-player-timestamp queries
- Configurable Database Pool: Connection pool size and timeout now configurable
database.postgres.pool-size(default: 10, range: 1-50)database.postgres.connection-timeout-ms(default: 30000)
Fixed
- Critical Performance Issue: Periodic inventory scans now run asynchronously off main thread
- Eliminates TPS lag on large servers with 100+ players
- Added error handling for individual player scan failures
- Memory Leak:
lastAlertTsmap now properly cleaned up during periodic maintenance- Prevents unbounded growth over extended server uptime
- Cleanup synchronized with
known-items-ttl-mssetting
Changed
- Database connection pool size increased from 5 to 10 (configurable)
- Improved error logging for async database operations
- Enhanced duplicate detection with Discord integration
Performance
- Up to 80% reduction in main thread blocking from inventory scans
- ~50% faster database queries due to strategic indexing
- Memory usage more stable over long server uptimes
Upgrade Notes
- Database Migration: New indexes will be created automatically on first startup
- Config Changes: Add Discord webhook settings to config.yml (optional)
- Performance: Servers with 50+ players should see immediate TPS improvements
Recommended Settings for Large Servers (100+ players)
scan-interval: 300 # Increase to 15 seconds inventory-open-scan-enabled: false # Disable for max performance database: postgres: pool-size: 20 # Increase pool size known-items-ttl-ms: 300000 # Reduce to 5 minutes
[1.0.5] - 2025-10-23
Changed
- Improved config.yml readability: added a descriptive overview header while preserving inline default values (no behavioral changes).
- Bumped version to 1.0.5.
[1.0.4] - 2025-10-23
Changed
- Bumped version to 1.0.4 and verified PaperMC 1.21.x compatibility.
- Shaded server artifact is now published as
-paperclassifier: DupeTrace-1.0.4-paper.jar; development jar uses-devclassifier (no dependencies). - Updated README to reflect the -paper jar name and build output path.
Notes
- The plugin is built against Paper API 1.21.10-R0.1-SNAPSHOT and Java 21.
- Final jar includes Kotlin stdlib and database drivers (HikariCP, H2, PostgreSQL); size >5MB is expected.
[1.0.3] - 2025-10-22
Fixed
- Default artifact is now the shaded jar (no '-paper' suffix) so servers won't hit
NoClassDefFoundErrorfor Kotlin or other runtime dependencies. - Added a friendly startup check that logs a clear error and disables the plugin if runtime dependencies are missing (e.g., when accidentally using the dev jar on a server).
Changed
- The development jar is now published with a
-devclassifier (renamed from-thin) to make its purpose clearer; most users should use the default shaded jar.
[1.0.2] - 2025-10-22
Changed
- The database table creation code was updated to use a different identity column definition for non-Postgres databases.
[1.0.1] - 2025-10-22
Fixed
- H2 database URL path normalization to comply with H2 2.x; accepts './' or absolute paths and auto-prefixes relative paths to avoid startup failure.
[1.0] - 2025-10-22
Added
- Comprehensive KDoc documentation for all public APIs
- Configuration validation on plugin startup with warnings for invalid values
- MIT License
- .gitignore for proper version control hygiene
- CHANGELOG.md to track version history
Changed
- Fixed version number inconsistency (build.gradle.kts now correctly set to 1.0)
- Improved error handling: replaced generic
Throwablecatches with specificExceptiontypes - Enhanced error logging for bundle and shulker box tagging operations
- Updated README.md with user-facing installation and configuration guide
Removed
- Non-functional placeholder code in DupeTrace.kt onEnable() method
[0.8] - 2025-10-22
Added
- Creative mode duplicate handling with
allow-creative-duplicatesconfiguration option - Creative context tracking for duplicate detection
- Enhanced item tagging logic for Shulker Box and Bundle contents
- [CREATIVE] tag in logs and alerts for duplicates created in Creative mode
Changed
- Refined event handling for better Creative mode detection
- Updated duplicate detection to respect Creative mode context
[0.7] - 2025-10-22
Added
- Advanced duplicate management configuration options:
movement-grace-ms: Grace period to avoid false positives during rapid legitimate moves (default: 750ms)known-items-ttl-ms: Time-to-live for in-memory item tracking to prevent memory growth (default: 10 minutes)duplicate-alert-debounce-ms: Minimum interval between duplicate alerts for the same item (default: 2000ms)
- Periodic cleanup task for in-memory known items based on TTL
- Enhanced duplicate detection logic with shulker box content scanning
Changed
- Optimized event handling for better performance
- Improved in-memory item tracking with automatic TTL-based cleanup
- Mitigated false positives with configurable grace period
[0.6] - 2025-10-22
Added
keep-oldest-on-dup-removeconfiguration option to prefer keeping the item with the earliest recorded interaction when auto-removing duplicates- Database query method
getEarliestTransferTs()to determine the earliest player interaction with an item - Expanded event tracking for more comprehensive duplicate detection
Changed
- Improved async database write methods for better concurrency
- Enhanced duplicate removal logic to support oldest-first policy
- Cleanup of edge cases in event handlers
[0.5] - 2025-10-22
Added
- Expanded duplicate detection with additional event handlers
- Enhanced logging for better debugging and audit trails
Fixed
- H2 database configuration typo corrected
[0.4] - Initial ActivityListener Release
Added
ActivityListenerfor extensive event tracking and duplicate detection- Database logging for item activities and transfers
- Periodic inventory scanning with configurable intervals
- Configuration options in
config.yml:alert-admins: Toggle for admin alertsscan-interval: Configure periodic scan frequency
- Transfer logging support in
DatabaseManager
Changed
- Refined
DupeTestCommandmessaging
[0.3] - Initial Release
Added
- Core duplicate detection system using per-item UUIDs
- Database persistence (H2 and PostgreSQL support)
- HikariCP connection pooling
- Item tagging with persistent data containers
- Basic event listeners for inventory interactions
/dupetestcommand for testing- Permission system (
dupetrace.admin,dupetrace.alerts) - Configuration file with duplicate detection settings

