1.3-alphalatestImprovesMay 13, 2026 Added
- Transactional file migration using a temporary staging directory to ensure all-or-nothing data transfer - Non-blocking retry mechanism usingScheduledExecutorServicewith configurable delay between attempts - Automatic rollback of backup files when the final atomic move operation fails - Staging directory cleanup on transfer failure to prevent leftover temporary files -FilePairhelper class to encapsulate source, temporary destination, final destination, and critical/optional flag for each migrated fileFixed
- Thread pool blocking caused by recursivecopyWithRetryconsuming worker threads during retry waits - Data inconsistency when some files succeed and others fail during a single transfer operation (partial transfer no longer possible) - Backup file not being created before the main data copy, risking loss of the target player's original dataChanged
-copyWithRetrynow usesScheduledExecutorServicefor delayed retries instead of recursive calls on the main executor pool -copyFilenow performs a single copy attempt and returns immediately, with retry logic handled externally -transferPlayerDataand related methods replaced bytransferAllFiles,copyAllToTemp, andmoveTempToTargetto support transactional migration - Backup creation and optional file transfers (stats, advancements) integrated into the unified transactional pipeline -ExecutorServicerenamed toexecutorfor clarity; newschedulerfield added for delayed retry schedulingRemoved
- Recursive retry logic (copyWithRetrycalling itself withthenCompose) that blocked worker threads - SeparatebackupIfNeeded,transferMainData,transferExtraData, andtransferFilemethods, consolidated intotransferAllFilesand supporting methods - Direct file overwrite approach that allowed partial transfer states1.2-rlsFixes...Feb 27, 2026 Added
- AddedMAX_CACHE_SIZE(1000) limit to prevent memory overflow when loading usercache.json - Added automatic cleanup task to remove stale player locks and access records every hour - Added performance monitoring with loading time statistics in debug logs - Added detailed debug logging for file operations, lock acquisition, and error conditions - Added disk space check before backup operationsChanged
- Refactored data loading: MergedloadUserCache()andloadNameToUUIDs()into singleloadPlayerData()method for better performance - Improved lock management: Locks now track last access time and are automatically cleaned up - Enhanced error handling: All exceptions now include detailed debug messages instead of being ignored - Optimized file copying: Implemented atomic temp file operations with proper cleanup - Restructured command handling: Unifiedtransferandtransferuuidlogic into single method - Improved backup system: Added proper file existence checks and atomic operations - Enhanced tab completion: Added offline player name suggestions with limits - Better executor shutdown: Added timeout handling and forced termination if neededFixed
- Critical: Fixed recursive scheduling instartCleanupTask()that could cause stack overflow - Critical: Removed dangerous offline UUID fallback that could match wrong players (UUID.nameUUIDFromBytes) - Fixed scheduler parameter bug wherenullcould be passed instead of plugin instance - Fixed potential memory leak by properly removing locks on player quit - Fixed file copy failure when parent directories don't exist - Fixed race condition in task tracking set during concurrent operations - Fixed incorrect stats file extension for older server versions (<1.13) - Fixed potential deadlock by implementing consistent lock ordering - Fixed missing message placeholders in several command responsesRemoved
- Removed dangerous offline UUID generation (UUID.nameUUIDFromBytes) - Removed redundantasyncparameter from Bukkit scheduler calls - Removed duplicate data loading methods in favor of unified approach - Removed empty catch blocks that silently ignored exceptions - Removed unnecessary thread pool for simple operations1.2-betaAnother optimization!Feb 26, 2026 Added
- Folia server support with global region scheduler - Async file copy operations with buffered streams - User cache loading from usercache.json - Name-to-UUID mapping system for offline player lookup - Backup file creation with configurable suffix - Disk space checking before file operations (50MB reserve) - File copy retry mechanism (3 retries with 1 second delay) - Atomic file operations using temporary files - Memory leak prevention with automatic lock cleanup system - Periodic cache cleanup task (runs every hour) - Player quit event listener to remove unused locks - Last access time tracking for lock management - Version detection fallback for unknown server versions - Multi-language support with message placeholders - Stats and advancements transfer with version detection - List command for player data with pagination - Tab completion with online and offline player support - Player kick option for online target playersChanged
- Migrated to CompletableFuture for reliable async operations - Optimized concurrent map operations with atomic replacements - Improved UUID parsing with better error handling and formatting - Enhanced scheduler with automatic Folia/Bukkit detection - Simplified logging system while keeping debug functionality - Better resource cleanup in onDisable() with timeout handling - Streamlined configuration loading with auto-fix - More efficient name-to-UUID mapping updates - Optimized file copy with proper buffer sizing (8KB) - Improved lock acquisition with timeout and deadlock preventionFixed
- Potential memory leak from unclosed player locks - Thread safety issues in cache loading (added synchronization) - Disk space exhaustion crashes during file transfer - Server version detection crashes with unusual formats - Concurrent modification issues in map operations - File copy failures due to cross-filesystem moves - Backup file corruption from incomplete writes - Tab completion NPE with null permissions - UUID format inconsistencies in user input - Player kick timing issues with async operations - Configuration loading errors with missing keys - Resource leaks in file streams (try-with-resources) - Shutdown hangs from unfinished tasksRemoved
- Redundant constant classes (merged into simple constants) - Excessive logging methods (consolidated into core ones) - Overly detailed debug outputs (kept essential only) - Unnecessary map clearing operations - Duplicate code blocks in transfer handling - Deprecated Bukkit API usages - Legacy version color formatting (simplified version display) - Redundant permission checks in tab completion Nah, this is a big work, honestly. Not gonna give up of it.1.2-alphaOptimizationFeb 26, 2026 Changed
- More stable and safe action! - The code is shorter than the old one. - The plugin runs faster.1.1-rlsFolia!Feb 25, 2026 Added
- Folia supported!Changed
- Optimized the size of JAR.1.1-beta1.8 ~ 1.12 Supports!Feb 25, 2026 Added
- Supports 1.8.x ~ 1.12.x now!1.1-alphaHuge update!Feb 25, 2026 Added
- Full configuration system - Now with proper config.yml support - Auto-config fixing - Missing config entries are automatically restored - Beautiful console logo - ASCII art on startup (can be disabled in config) - Colored version display - Alpha (red), Beta (gold), Release (green) - Multi-language support - Messages fully customizable in config - Player name tab completion - Tab completes online players and players with data files - Kick online players option - Prevents data overwrite (configurable) - Asynchronous file operations - No more server lag during transfers - Backup system - Automatically creates .old files before overwriting - /xtransfer reload command - Reload configuration without restartChanged
- Version display format - Now matches XGamemode style (XTransfer V1.1-alpha) - Command output - All messages now from config file - UUID detection - Better handling of premium/offline players - File copying - Using NIO for better performanceFixed
- NullPointerException in loadMessages() - Messages map now properly initialized - Null version in onDisable() - Added DISPLAY_VERSION for reliable shutdown - Config corruption - Auto-fixes missing config values - Online player data overwrite - Kicks player before transfer (optional)1.0-rlsThe first version!Feb 25, 2026 Plugin done! This is just a demo so it doesn't have multi language, config file and other extra features yet. I will do it when I'm free and I want to code.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta