Changelog
All notable changes to DupeTrace will be documented on this page.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[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.1No API changes - all existing functionality remains identical
[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.ymlRich embed messages with player, item type, UUID, and location information
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 playerTab 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 maintenancePrevents 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)
[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 specificExceptiontypesEnhanced 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 optionCreative 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 duplicatesDatabase query method
getEarliestTransferTs()to determine the earliest player interaction with an itemExpanded 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 detectionDatabase 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 testingPermission system (
dupetrace.admin,dupetrace.alerts)Configuration file with duplicate detection settings
Last updated