Sueta

XTransfer

1.3-alpha

A tool that help you transfer players' data between names or UUIDs.

·Plugin
  1. 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 using ScheduledExecutorService with 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 - FilePair helper class to encapsulate source, temporary destination, final destination, and critical/optional flag for each migrated file

    Fixed

    - Thread pool blocking caused by recursive copyWithRetry consuming 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 data

    Changed

    - copyWithRetry now uses ScheduledExecutorService for delayed retries instead of recursive calls on the main executor pool - copyFile now performs a single copy attempt and returns immediately, with retry logic handled externally - transferPlayerData and related methods replaced by transferAllFiles, copyAllToTemp, and moveTempToTarget to support transactional migration - Backup creation and optional file transfers (stats, advancements) integrated into the unified transactional pipeline - ExecutorService renamed to executor for clarity; new scheduler field added for delayed retry scheduling

    Removed

    - Recursive retry logic (copyWithRetry calling itself with thenCompose) that blocked worker threads - Separate backupIfNeeded, transferMainData, transferExtraData, and transferFile methods, consolidated into transferAllFiles and supporting methods - Direct file overwrite approach that allowed partial transfer states
    161 downloads
  2. 1.2-rlsFixes...Feb 27, 2026
    Added
    - Added MAX_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 operations
    Changed
    - Refactored data loading: Merged loadUserCache() and loadNameToUUIDs() into single loadPlayerData() 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: Unified transfer and transferuuid logic 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 needed
    Fixed
    - Critical: Fixed recursive scheduling in startCleanupTask() that could cause stack overflow - Critical: Removed dangerous offline UUID fallback that could match wrong players (UUID.nameUUIDFromBytes) - Fixed scheduler parameter bug where null could 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 responses
    Removed
    - Removed dangerous offline UUID generation (UUID.nameUUIDFromBytes) - Removed redundant async parameter 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 operations
    78 downloads
  3. 1.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 players
    Changed
    - 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 prevention
    Fixed
    - 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 tasks
    Removed
    - 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.
    18 downloads
  4. 1.2-alphaOptimizationFeb 26, 2026
    Changed
    - More stable and safe action! - The code is shorter than the old one. - The plugin runs faster.
    19 downloads
  5. 1.1-rlsFolia!Feb 25, 2026
    Added
    - Folia supported!
    Changed
    - Optimized the size of JAR.
    18 downloads
  6. 1.1-beta1.8 ~ 1.12 Supports!Feb 25, 2026
    Added
    - Supports 1.8.x ~ 1.12.x now!
    15 downloads
  7. 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 restart
    Changed
    - 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 performance
    Fixed
    - 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)
    15 downloads
  8. 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.
    25 downloads

Similar projects

Plugin →