45 KiB
Changelog
All notable changes to PlayerDataSync will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.2.9-RELEASE] - 2026-01-25
🎯 Custom-Enchantment-Support & Database Upgrade / Custom-Enchantment-Support & Datenbank-Upgrade
🔧 Fixed
-
Database Truncation Error (Critical Fix) / Datenbank-Truncation-Fehler (Critical Fix):
- EN: Fixes "Data too long for column" errors with large inventories
- DE: Behebt "Data too long for column" Fehler bei großen Inventaren
- ✅ EN: Automatic upgrade from
TEXTtoLONGTEXTforinventory,enderchest,armor, andoffhandcolumns - ✅ DE: Automatisches Upgrade von
TEXTzuLONGTEXTfürinventory,enderchest,armorundoffhandSpalten - ✅ EN: Now supports inventories with many custom enchantments (e.g., ExcellentEnchants)
- ✅ DE: Unterstützt jetzt Inventare mit vielen Custom-Enchantments (z.B. ExcellentEnchants)
- ✅ EN: Upgrade is performed automatically on server start
- ✅ DE: Upgrade wird automatisch beim Server-Start durchgeführt
- ✅ EN: Runtime upgrade attempt on truncation errors
- ✅ DE: Runtime-Upgrade-Versuch bei Truncation-Fehlern
- ✅ EN: Improved error messages with solution suggestions
- ✅ DE: Verbesserte Fehlermeldungen mit Lösungsvorschlägen
- 🔧 EN: Fixes issues with large inventories and custom enchantments
- 🔧 DE: Behebt Probleme mit großen Inventaren und Custom-Enchantments
-
Custom-Enchantment Deserialization / Custom-Enchantment-Deserialisierung:
- EN: Robust error handling for custom enchantments
- DE: Robuste Fehlerbehandlung für Custom-Enchantments
- ✅ EN: Improved detection of custom enchantment errors (e.g.,
minecraft:venom) - ✅ DE: Verbesserte Erkennung von Custom-Enchantment-Fehlern (z.B.
minecraft:venom) - ✅ EN: Items are skipped instead of causing plugin crashes
- ✅ DE: Items werden übersprungen statt Plugin-Absturz zu verursachen
- ✅ EN: Data remains preserved in the database
- ✅ DE: Daten bleiben in der Datenbank erhalten
- ✅ EN: Detailed logging with enchantment names
- ✅ DE: Detailliertes Logging mit Enchantment-Namen
- ✅ EN: Support for ExcellentEnchants and similar plugins
- ✅ DE: Unterstützung für ExcellentEnchants und ähnliche Plugins
- 🔧 EN: Prevents crashes with unrecognized custom enchantments
- 🔧 DE: Verhindert Abstürze bei nicht erkannten Custom-Enchantments
-
Stale Player Data / Veraltete Spielerdaten:
- EN: Fixes issue with outdated player data
- DE: Behebt Problem mit nicht aktualisierten Spielerdaten
- ✅ EN: Database upgrade enables successful saves
- ✅ DE: Datenbank-Upgrade ermöglicht erfolgreiche Speicherungen
- ✅ EN: Improved error handling prevents data loss
- ✅ DE: Verbesserte Fehlerbehandlung verhindert Datenverlust
- ✅ EN: Automatic recovery after database upgrade
- ✅ DE: Automatische Wiederherstellung nach Datenbank-Upgrade
✨ Added
-
Custom-Enchantment Synchronization / Custom-Enchantment-Synchronisation:
- EN: Full support for custom enchantments
- DE: Vollständige Unterstützung für Custom-Enchantments
- ✅ EN: Preservation of all NBT data including custom enchantments during serialization
- ✅ DE: Erhaltung aller NBT-Daten inklusive Custom-Enchantments beim Serialisieren
- ✅ EN: Refresh mechanism after loading inventories (2-tick delay)
- ✅ DE: Refresh-Mechanismus nach dem Laden von Inventaren (2-Tick-Delay)
- ✅ EN: Explicit re-setting of items so plugins can process enchantments
- ✅ DE: Explizites Neusetzen von Items, damit Plugins Enchantments verarbeiten können
- ✅ EN: Works for main inventory, armor, offhand, and enderchest
- ✅ DE: Funktioniert für Hauptinventar, Rüstung, Offhand und Enderchest
- 📝 EN: Supports plugins like ExcellentEnchants that use custom enchantments
- 📝 DE: Unterstützt Plugins wie ExcellentEnchants, die Custom-Enchantments verwenden
-
Deserialization Statistics & Monitoring / Deserialisierungs-Statistiken & Monitoring:
- EN: Comprehensive monitoring system
- DE: Umfassendes Monitoring-System
- ✅ EN: Counters for custom enchantment errors, version compatibility errors, and other errors
- ✅ DE: Zähler für Custom-Enchantment-Fehler, Versionskompatibilitäts-Fehler und andere Fehler
- ✅ EN:
getDeserializationStats()method for statistics - ✅ DE:
getDeserializationStats()Methode für Statistiken - ✅ EN:
resetDeserializationStats()method to reset statistics - ✅ DE:
resetDeserializationStats()Methode zum Zurücksetzen - ✅ EN: Integration into
/sync cachecommand - ✅ DE: Integration in
/sync cacheBefehl - ✅ EN: Detailed error logging with enchantment names
- ✅ DE: Detaillierte Fehlerprotokollierung mit Enchantment-Namen
- 📝 EN: Admins can now easily monitor custom enchantment issues
- 📝 DE: Admins können jetzt Probleme mit Custom-Enchantments einfach überwachen
-
Improved Error Handling / Verbesserte Fehlerbehandlung:
- EN: Extended error detection and handling
- DE: Erweiterte Fehlererkennung und -behandlung
- ✅ EN: Automatic extraction of enchantment names from error messages
- ✅ DE: Automatische Extraktion von Enchantment-Namen aus Fehlermeldungen
- ✅ EN: Detailed error chain analysis (up to 3 levels)
- ✅ DE: Detaillierte Fehlerketten-Analyse (bis zu 3 Ebenen)
- ✅ EN: Contextual error messages with solution suggestions
- ✅ DE: Kontextuelle Fehlermeldungen mit Lösungsvorschlägen
- ✅ EN: Better detection of various error types (IllegalStateException, NullPointerException, etc.)
- ✅ DE: Bessere Erkennung verschiedener Fehlertypen (IllegalStateException, NullPointerException, etc.)
- ✅ EN: Pattern-based detection of custom enchantment errors
- ✅ DE: Pattern-basierte Erkennung von Custom-Enchantment-Fehlern
🔄 Changed
-
Database Schema / Datenbank-Schema:
- EN: Automatic upgrade for existing installations
- DE: Automatisches Upgrade für bestehende Installationen
- ✅ EN:
inventory: TEXT → LONGTEXT (max. ~4GB instead of ~65KB) - ✅ DE:
inventory: TEXT → LONGTEXT (max. ~4GB statt ~65KB) - ✅ EN:
enderchest: TEXT → LONGTEXT - ✅ DE:
enderchest: TEXT → LONGTEXT - ✅ EN:
armor: TEXT → LONGTEXT - ✅ DE:
armor: TEXT → LONGTEXT - ✅ EN:
offhand: TEXT → LONGTEXT - ✅ DE:
offhand: TEXT → LONGTEXT - ✅ EN: Upgrade is performed automatically on server start
- ✅ DE: Upgrade wird beim Server-Start automatisch durchgeführt
- 📝 EN: Existing data is preserved, no data migration needed
- 📝 DE: Bestehende Daten bleiben erhalten, keine Datenmigration nötig
-
EditorIntegration Removed / EditorIntegration entfernt:
- EN: Preparation for website update
- DE: Vorbereitung für Website-Update
- ✅ EN: EditorIntegrationManager completely removed
- ✅ DE: EditorIntegrationManager komplett entfernt
- ✅ EN: All editor-related commands removed
- ✅ DE: Alle Editor-bezogenen Befehle entfernt
- ✅ EN: Code cleanup for future editor integration
- ✅ DE: Code-Bereinigung für zukünftige Editor-Integration
- 📝 EN: New editor integration will be added in a future version
- 📝 DE: Neue Editor-Integration wird in zukünftiger Version hinzugefügt
📊 Technical Details
Database Upgrade Process / Datenbank-Upgrade-Prozess
EN: The plugin automatically performs an upgrade of database columns on startup:
DE: Das Plugin führt beim Start automatisch ein Upgrade der Datenbank-Spalten durch:
- EN: Check: Verifies the current data type of each column DE: Prüfung: Überprüft den aktuellen Datentyp jeder Spalte
- EN: Upgrade: Converts
TEXTtoLONGTEXTif necessary DE: Upgrade: KonvertiertTEXTzuLONGTEXTwenn nötig - EN: Logging: Logs all upgrades for transparency DE: Logging: Protokolliert alle Upgrades für Transparenz
- EN: Runtime Upgrade: Also attempts to upgrade during runtime if an error occurs DE: Runtime-Upgrade: Versucht auch während des Betriebs zu upgraden, wenn ein Fehler auftritt
EN: Why LONGTEXT?
DE: Warum LONGTEXT?
TEXT: Max. ~65KB (65,535 bytes)LONGTEXT: Max. ~4GB (4,294,967,295 bytes)- EN: Custom enchantments with extensive NBT data can become very large
- DE: Custom-Enchantments mit vielen NBT-Daten können sehr groß werden
- EN: Large inventories with many items and enchantments require more space
- DE: Große Inventare mit vielen Items und Enchantments benötigen mehr Platz
Custom-Enchantment Error Handling / Custom-Enchantment-Fehlerbehandlung
EN: The improved error handling recognizes various error types:
DE: Die verbesserte Fehlerbehandlung erkennt verschiedene Fehlertypen:
- IllegalStateException with DataResult/Codec/Decoder
- NullPointerException in enchantment-related classes
- EN: Error messages with "enchantment not found/unknown/invalid"
- DE: Fehlermeldungen mit "enchantment not found/unknown/invalid"
- EN: Pattern-based detection of custom enchantment names
- DE: Pattern-basierte Erkennung von Custom-Enchantment-Namen
EN: Error Handling Flow:
DE: Fehlerbehandlung-Flow:
- EN: Attempt normal deserialization DE: Versuch der normalen Deserialisierung
- EN: On error: Check if it's a custom enchantment problem DE: Bei Fehler: Prüfung ob es ein Custom-Enchantment-Problem ist
- EN: Extract enchantment name from error message DE: Extraktion des Enchantment-Namens aus der Fehlermeldung
- EN: Detailed logging with context DE: Detailliertes Logging mit Kontext
- EN: Item is skipped (null), but data remains in database DE: Item wird übersprungen (null), aber Daten bleiben in DB
- EN: Statistics are updated DE: Statistiken werden aktualisiert
Refresh Mechanism / Refresh-Mechanismus
EN: After loading inventories, a refresh mechanism is executed:
DE: Nach dem Laden von Inventaren wird ein Refresh-Mechanismus ausgeführt:
- EN: Initial Load: ItemStacks are loaded from database DE: Initiales Laden: ItemStacks werden aus der Datenbank geladen
- EN: 2-Tick Delay: Waits 2 ticks to give plugins time to initialize DE: 2-Tick-Delay: Wartet 2 Ticks, damit Plugins Zeit haben zu initialisieren
- EN: Refresh: Explicitly re-sets items to trigger plugin processing DE: Refresh: Setzt Items explizit neu, um Plugin-Verarbeitung zu triggern
- EN: Update: Calls
updateInventory()for client synchronization DE: Update: RuftupdateInventory()auf für Client-Synchronisation
EN: Why 2 Ticks?
DE: Warum 2 Ticks?
- EN: Gives custom enchantment plugins time to register their enchantments
- DE: Gibt Custom-Enchantment-Plugins Zeit, ihre Enchantments zu registrieren
- EN: Enables plugin event handlers to react to item changes
- DE: Ermöglicht Plugin-Event-Handler, auf Item-Änderungen zu reagieren
- EN: Prevents race conditions between plugin loading and item loading
- DE: Verhindert Race-Conditions zwischen Plugin-Loading und Item-Loading
Statistics System / Statistiken-System
EN: The new statistics system collects information about deserialization errors:
DE: Das neue Statistiken-System sammelt Informationen über Deserialisierungs-Fehler:
- EN: Custom Enchantment Errors: Counts items skipped due to unrecognized custom enchantments
- DE: Custom-Enchantment-Fehler: Zählt Items, die wegen nicht erkannter Custom-Enchantments übersprungen wurden
- EN: Version Compatibility Errors: Counts items with version compatibility issues
- DE: Versionskompatibilitäts-Fehler: Zählt Items mit Versionskompatibilitätsproblemen
- EN: Other Errors: Counts all other deserialization errors
- DE: Andere Fehler: Zählt alle anderen Deserialisierungs-Fehler
EN: Usage:
DE: Verwendung:
/sync cache # EN: Shows all statistics / DE: Zeigt alle Statistiken
/sync cache clear # EN: Resets statistics / DE: Setzt Statistiken zurück
🔍 Monitoring & Debugging
EN: Admins can now easily monitor custom enchantment issues:
DE: Admins können jetzt einfach Probleme mit Custom-Enchantments überwachen:
- EN: View Statistics:
/sync cacheshows deserialization statistics DE: Statistiken anzeigen:/sync cachezeigt Deserialisierungs-Statistiken - EN: Analyze Errors: Detailed logs show exactly which enchantments cause problems DE: Fehler analysieren: Detaillierte Logs zeigen genau, welche Enchantments Probleme verursachen
- EN: Fix Issues: Clear error messages with solution suggestions DE: Probleme beheben: Klare Fehlermeldungen mit Lösungsvorschlägen
EN: Example Output:
DE: Beispiel-Output:
Deserialization Stats: Deserialization failures: 5 total
(Custom Enchantments: 3, Version Issues: 1, Other: 1)
⚠ If you see custom enchantment failures, ensure enchantment plugins
(e.g., ExcellentEnchants) are loaded and all enchantments are registered.
⚠️ Important Notes / Wichtige Hinweise
- EN: Database Upgrade: On first start after update, columns are automatically upgraded DE: Datenbank-Upgrade: Beim ersten Start nach dem Update werden die Spalten automatisch geupgradet
- EN: Custom Enchantments: Ensure enchantment plugins (e.g., ExcellentEnchants) are installed and active on both servers DE: Custom-Enchantments: Stellen Sie sicher, dass Enchantment-Plugins (z.B. ExcellentEnchants) auf beiden Servern installiert und aktiv sind
- EN: Plugin Load Order: Enchantment plugins should load before PlayerDataSync (check
plugin.yml) DE: Plugin-Load-Reihenfolge: Enchantment-Plugins sollten vor PlayerDataSync geladen werden (inplugin.ymlprüfen) - EN: EditorIntegration: EditorIntegration has been removed and will be re-implemented in a future version DE: EditorIntegration: Die EditorIntegration wurde entfernt und wird in einer zukünftigen Version neu implementiert
📝 Migration Guide
EN: For Existing Installations:
DE: Für bestehende Installationen:
- EN: Automatic Upgrade: No manual action needed - plugin performs upgrade automatically DE: Automatisches Upgrade: Keine manuelle Aktion nötig - das Plugin führt das Upgrade automatisch durch
- EN: Restart Server: Restart server after update to perform database upgrade DE: Server neu starten: Nach dem Update den Server neu starten, damit das Datenbank-Upgrade durchgeführt wird
- EN: Check Logs: Verify logs for upgrade messages:
DE: Logs prüfen: Überprüfen Sie die Logs auf Upgrade-Meldungen:
[INFO] Upgraded inventory column from TEXT to LONGTEXT to support large inventories [INFO] Upgraded enderchest column from TEXT to LONGTEXT to support large inventories [INFO] Upgraded armor column from TEXT to LONGTEXT to support large inventories [INFO] Upgraded offhand column from TEXT to LONGTEXT to support large inventories - EN: Check Custom Enchantments: Ensure all enchantment plugins are loaded correctly DE: Custom-Enchantments prüfen: Stellen Sie sicher, dass alle Enchantment-Plugins korrekt geladen sind
EN: Troubleshooting:
DE: Bei Problemen:
- EN: Check
/sync cachefor deserialization statistics DE: Prüfen Sie/sync cachefür Deserialisierungs-Statistiken - EN: Review logs for custom enchantment errors DE: Überprüfen Sie die Logs auf Custom-Enchantment-Fehler
- EN: Ensure enchantment plugins are installed on both servers DE: Stellen Sie sicher, dass Enchantment-Plugins auf beiden Servern installiert sind
- EN: Check plugin load order in
plugin.ymlDE: Prüfen Sie die Plugin-Load-Reihenfolge inplugin.yml
[1.2.7-RELEASE] - 2025-12-29
🔧 Critical Fixes & New Features
This release includes critical bug fixes for XP synchronization and Vault economy, plus a new Respawn to Lobby feature.
Fixed
- Issue #45 - XP & Level Synchronization (Critical Fix): Complete rewrite of experience synchronization
- ✅ Replaced unreliable
setTotalExperience()withgiveExp()as primary method - ✅
giveExp()is more reliable across all Minecraft versions (1.8-1.21.11) - ✅ Better error handling and verification with detailed logging
- ✅ Automatic correction if experience doesn't match expected value
- ✅ Prevents XP sync failures on all supported versions
- ✅ Improved level calculation and synchronization
- 🔧 Fixes Issue #43, #45 and XP sync problems across version range
- 📝 Detailed logging for debugging XP sync issues
- ✅ Replaced unreliable
- Issue #46 - Vault Balance de-sync on server shutdown: Fixed economy balance not being saved during shutdown
- ✅ Enhanced shutdown save process to ensure Vault economy is available
- ✅ Reconfigure economy integration before shutdown save
- ✅ Added delay to ensure Vault is fully initialized before saving
- ✅ Force balance refresh before save to get latest balance
- ✅ Better error handling and logging during shutdown
- ✅ Prevents economy balance loss on server restart
- 🔧 Fixes Issue #46: Vault Balance de-sync on server shutdown
Added
- Respawn to Lobby Feature: New feature to send players to lobby server after death/respawn
- ✅ Automatically transfers players to lobby server after respawn
- ✅ Uses existing BungeeCord integration and shared database
- ✅ Configurable lobby server name
- ✅ Saves player data before transfer to ensure data consistency
- ✅ Smart detection to prevent transfers if already on lobby server
- ✅ Requires BungeeCord integration to be enabled
- 📝 Configuration:
respawn_to_lobby.enabledandrespawn_to_lobby.serverin config.yml
Technical Details
- XP Sync Method Change: Switched from
setTotalExperience()togiveExp()for better compatibility - Why:
setTotalExperience()has version-specific bugs,giveExp()works reliably everywhere - Verification: Added automatic verification and correction mechanism
- Logging: Enhanced logging with before/after values for debugging
- Shutdown Process: Improved economy save process with Vault reconfiguration and balance refresh
- Respawn Handler: New
PlayerRespawnEventhandler for lobby transfer functionality
[1.2.8-BETA] - 2025-12-29
🎉 Big Update - Major Improvements & API Migration
This release includes significant improvements, API migrations, and enhanced compatibility features.
Fixed
- XP Synchronization (Critical Fix): Complete rewrite of experience synchronization
- ✅ Replaced unreliable
setTotalExperience()withgiveExp()as primary method - ✅
giveExp()is more reliable across all Minecraft versions (1.8-1.21.11) - ✅ Better error handling and verification with detailed logging
- ✅ Automatic correction if experience doesn't match expected value
- ✅ Prevents XP sync failures on all supported versions
- 🔧 Fixes Issue #43, #45 and XP sync problems across version range
- ✅ Replaced unreliable
Changed
- Update Checker: Complete migration to CraftingStudio Pro API
- ✅ Migrated from SpigotMC Legacy API to CraftingStudio Pro API
- ✅ New API endpoint:
https://craftingstudiopro.de/api/plugins/playerdatasync/latest - ✅ Uses plugin slug (
playerdatasync) instead of resource ID - ✅ Improved JSON response parsing using Gson library
- ✅ Better error handling for HTTP status codes (429 Rate Limit, etc.)
- ✅ Enhanced update information with download URLs from API response
- 📖 API Documentation: https://www.craftingstudiopro.de/docs/api
- Plugin API Version: Updated to 1.13 for better modern API support
- Minimum required Minecraft version: 1.13
- Still supports versions 1.8-1.21.11 with automatic compatibility handling
- Improved NamespacedKey support and modern Material API usage
Fixed
- Version Compatibility: Fixed critical GRAY_STAINED_GLASS_PANE compatibility issue
- ✅ Prevents fatal error on Minecraft 1.8-1.12 servers
- ✅ Automatic version detection and Material selection
- ✅ Uses
STAINED_GLASS_PANEwith durability value 7 for older versions (1.8-1.12) - ✅ Uses
GRAY_STAINED_GLASS_PANEfor modern versions (1.13+) - ✅ Filler item in inventory viewer now works correctly across all supported versions
- Inventory Synchronization: Enhanced inventory sync reliability
- ✅ Added
updateInventory()calls after loading inventory, armor, and offhand - ✅ Improved client synchronization for all inventory types
- ✅ Better inventory size validation (normalized to 36 slots for main inventory)
- ✅ Improved enderchest size validation (normalized to 27 slots)
- ✅ Better armor array normalization (ensures exactly 4 slots)
- ✅ Added
- ItemStack Validation: Enhanced ItemStack sanitization and validation
- ✅ Improved validation of item amounts (checks against max stack size)
- ✅ Better handling of invalid stack sizes (clamps to max instead of removing)
- ✅ Improved AIR item filtering
- ✅ More robust error handling for corrupted items
- Logging System: Complete logging overhaul
- ✅ Replaced all
System.err.println()calls with proper Bukkit logger - ✅ Replaced all
printStackTrace()calls with properlogger.log()calls - ✅ Better log levels (WARNING/SEVERE instead of stderr for compatibility issues)
- ✅ More consistent error messages across the codebase
- ✅ Stack traces now properly logged through plugin logger
- ✅ Improved logging for version compatibility issues
- ✅ Replaced all
Improved
- Code Quality: Significant improvements to error handling and resource management
- ✅ Comprehensive exception handling with proper stack trace logging
- ✅ Better debug logging throughout inventory operations
- ✅ Improved client synchronization after inventory changes
- ✅ Better resource management and cleanup
- ✅ Enhanced error diagnostics throughout the codebase
- Performance: Optimizations for inventory operations
- ✅ Better item validation prevents unnecessary operations
- ✅ Improved error recovery mechanisms
- ✅ Enhanced memory management
Technical Details
- API Migration: Complete rewrite of UpdateChecker class
- Old: SpigotMC Legacy API (plain text response)
- New: CraftingStudio Pro API (JSON response with Gson parsing)
- Improved error handling for network issues and rate limits
- Compatibility: Maintained support for Minecraft 1.8-1.21.11
- Version-based feature detection and automatic disabling
- Graceful degradation for unsupported features on older versions
- Comprehensive version compatibility checking at startup
Breaking Changes
⚠️ Plugin API Version: Changed from 1.8 to 1.13
- Plugins compiled with this version require at least Minecraft 1.13
- Server administrators using 1.8-1.12 should continue using previous versions
- Automatic legacy conversion may still work, but not guaranteed
Migration Guide
If upgrading from 1.2.6-RELEASE or earlier:
- No configuration changes required
- Update checker will now use CraftingStudio Pro API
- All existing data is compatible
- Recommended to test on a staging server first
[1.2.6-RELEASE] - 2025-12-29
Changed
- Update Checker: Migrated to CraftingStudio Pro API
- Updated from SpigotMC API to CraftingStudio Pro API (https://craftingstudiopro.de/api)
- Now uses plugin slug instead of resource ID
- Improved JSON response parsing for better update information
- Better error handling for rate limits (429 responses)
- API endpoint:
/api/plugins/playerdatasync/latest
Fixed
- Version Compatibility: Fixed GRAY_STAINED_GLASS_PANE compatibility issue for Minecraft 1.8-1.12
- Added version check to use STAINED_GLASS_PANE with durability value 7 for older versions
- Prevents fatal error when loading plugin on 1.8-1.12 servers
- Filler item in inventory viewer now works correctly across all supported versions
[1.2.7-ALPHA] - 2025-12-29
Changed
- Update Checker: Migrated to CraftingStudio Pro API
- Updated from SpigotMC API to CraftingStudio Pro API (https://craftingstudiopro.de/api)
- Now uses plugin slug instead of resource ID
- Improved JSON response parsing for better update information
- Better error handling for rate limits (429 responses)
- API endpoint:
/api/plugins/playerdatasync/latest
Fixed
- Version Compatibility: Fixed GRAY_STAINED_GLASS_PANE compatibility issue for Minecraft 1.8-1.12
- Added version check to use STAINED_GLASS_PANE with durability value 7 for older versions
- Prevents fatal error when loading plugin on 1.8-1.12 servers
- Filler item in inventory viewer now works correctly across all supported versions
[1.2.6-ALPHA] - 2025-12-29
Improved
- Inventory Synchronization: Significantly improved inventory sync reliability
- Added
updateInventory()call after loading inventory, armor, and offhand to ensure client synchronization - Improved inventory size validation (normalized to 36 slots for main inventory)
- Improved enderchest size validation (normalized to 27 slots)
- Better armor array normalization (ensures exactly 4 slots)
- Enhanced error handling with detailed logging and stack traces
- Added debug logging for successful inventory loads
- Added
- ItemStack Validation: Enhanced ItemStack sanitization
- Improved validation of item amounts (checks against max stack size)
- Better handling of invalid stack sizes (clamps to max stack size instead of removing)
- Improved AIR item filtering
- More robust error handling for corrupted items
- Logging System: Improved logging consistency
- Replaced all
System.err.println()calls with proper Bukkit logger - Replaced all
printStackTrace()calls with proper logger.log() calls - Better log levels (WARNING instead of stderr for compatibility issues)
- More consistent error messages across the codebase
- Improved logging for version compatibility issues
- Stack traces now properly logged through plugin logger instead of printStackTrace()
- Replaced all
- Code Quality: Further improvements to error handling
- Added comprehensive exception handling with stack traces
- Better debug logging throughout inventory operations
- Improved client synchronization after inventory changes
- Better resource management and cleanup
Fixed
- Inventory Sync Issues: Fixed cases where inventory changes weren't synchronized with client
- ItemStack Validation: Fixed potential issues with invalid item amounts and stack sizes
- Logging: Fixed inconsistent logging using System.err instead of proper logger
[1.2.5-SNAPSHOT] - 2025-12-29
Fixed
- Issue #45 - XP Sync Not Working: Fixed experience synchronization not working
- Improved
applyExperience()method with proper reset before setting experience - Added verification to ensure experience is set correctly
- Added fallback mechanism using
giveExp()ifsetTotalExperience()doesn't work - Better error handling with detailed logging and stack traces
- Now works reliably across all Minecraft versions (1.8-1.21.11)
- Improved
Improved
- Code Quality: Fixed deprecated method usage and improved compatibility
- Replaced deprecated
URL(String)constructor withURI.toURL()for better Java 20+ compatibility - Replaced deprecated
PotionEffectType.getName()withgetKey().getKey()for better compatibility - Improved
PotionEffectType.getByName()usage with NamespacedKey fallback - Replaced deprecated
getMaxHealth()with Attribute system where available - Improved
getOfflinePlayer(String)usage with better error handling - Added
@SuppressWarningsannotations for necessary deprecated method usage - Cleaned up unused imports and improved code organization
- Replaced deprecated
[1.2.4-SNAPSHOT] - 2025-12-29
Added
- Extended Version Support: Full compatibility with Minecraft 1.8 to 1.21.11
- Comprehensive version detection and compatibility checking
- Maven build profiles for all major Minecraft versions (1.8, 1.9-1.16, 1.17, 1.18-1.20, 1.21+)
- Automatic feature detection and disabling based on server version
- VersionCompatibility utility class for runtime version checks
- Project Structure Reorganization: Complete package restructuring
- Organized code into logical packages:
core,database,integration,listeners,managers,utils,commands,api - Improved code maintainability and organization
- All imports and package declarations updated accordingly
- Organized code into logical packages:
- Version-Based Feature Management: Automatic feature disabling
- Offhand sync automatically disabled on 1.8 (requires 1.9+)
- Attribute sync automatically disabled on 1.8 (requires 1.9+)
- Advancement sync automatically disabled on 1.8-1.11 (requires 1.12+)
- Features are checked and disabled during plugin initialization
Fixed
- Issue #43 - Experience Synchronization Error: Fixed experience synchronization issues
- Initial fix for experience synchronization problems
- Added validation for negative experience values
- Issue #42 - Vault Reset on Server Restart: Fixed economy balance not being restored on server restart
- Economy integration is now reconfigured during shutdown to ensure availability
- Balance restoration with 5-tick delay and retry mechanism
- Improved Vault provider availability checking
- Issue #41 - Potion Effect on Death: Fixed potion effects being restored after death
- Effects are only restored if player is not dead or respawning
- Added death/respawn state checking before effect restoration
- Effects are properly cleared on death as expected
- Issue #40 - Heartbeat HTTP 500: Improved error handling for HTTP 500 errors
- Enhanced error handling with detailed logging
- Specific error messages for different HTTP status codes (400, 401, 404, 500+)
- Connection timeout and socket timeout handling
- Better debugging information for API issues
Changed
- Minecraft Version Support: Extended from 1.20.4-1.21.9 to 1.8-1.21.11
- Default Java version set to 8 for maximum compatibility
- Maven profiles for different Java versions (8, 16, 17, 21)
- Plugin API version set to 1.8 (lowest supported version)
- Build System: Enhanced Maven configuration
- Compiler plugin now uses variables for source/target versions
- Multiple build profiles for different Minecraft versions
- Proper Java version handling per Minecraft version
- Code Organization: Complete package restructure
core/: Main plugin class (PlayerDataSync)database/: Database management (DatabaseManager, ConnectionPool)integration/: Plugin integrations (EditorIntegrationManager, InventoryViewerIntegrationManager)listeners/: Event listeners (PlayerDataListener, ServerSwitchListener)managers/: Manager classes (AdvancementSyncManager, BackupManager, ConfigManager, MessageManager)utils/: Utility classes (InventoryUtils, OfflinePlayerData, PlayerDataCache, VersionCompatibility)commands/: Command handlers (SyncCommand)api/: API and update checker (UpdateChecker)
- Version Compatibility Checking: Enhanced startup version validation
- Detects Minecraft version range (1.8 to 1.21.11)
- Logs feature availability based on version
- Provides warnings for unsupported versions
- Tests critical API methods with version checks
Technical Details
- Build Profiles:
mvn package -Pmc-1.8for Minecraft 1.8 (Java 8)mvn package -Pmc-1.9through-Pmc-1.16for 1.9-1.16 (Java 8)mvn package -Pmc-1.17for Minecraft 1.17 (Java 16)mvn package -Pmc-1.18through-Pmc-1.20for 1.18-1.20 (Java 17)mvn package -Pmc-1.21for Minecraft 1.21+ (Java 21) - Default
- Code Quality: Improved error handling and version compatibility
- Resource Management: Better cleanup and memory management
- Exception Handling: More specific error messages and recovery mechanisms
Compatibility
- Minecraft 1.8: Full support (some features disabled)
- Minecraft 1.9-1.11: Full support (advancements disabled)
- Minecraft 1.12-1.16: Full support
- Minecraft 1.17: Full support
- Minecraft 1.18-1.20: Full support
- Minecraft 1.21-1.21.11: Full support
[Unreleased] - 2025-01-14
Fixed
- API Server ID: Fixed "Missing server_id" error in heartbeat and API requests
- Changed JSON field name from
"serverId"(camelCase) to"server_id"(snake_case) in all API payloads - Improved server_id resolution from config file with better fallback handling
- Added detailed logging to track which server_id source is being used
- Fixed server_id not being read correctly from
server.idconfig option - All API endpoints (heartbeat, token, snapshot) now correctly send server_id
- Changed JSON field name from
Added
- Message Configuration: New option to disable sync messages
- Added
messages.show_sync_messagesconfig option (default:true) - When set to
false, all sync-related messages (loading, saving, server switch) are disabled - Prevents empty messages from being sent when message strings are empty
- Works in conjunction with existing permission system
- Added
Changed
- API Integration: All JSON payloads now use snake_case for
server_idfieldbuildHeartbeatPayload(): Uses"server_id"instead of"serverId"buildTokenPayload(): Uses"server_id"instead of"serverId"buildSnapshotPayload(): Uses"server_id"instead of"serverId"
- Server ID Resolution: Enhanced resolution logic with better error handling
- Checks environment variables first, then system properties, then ConfigManager, then direct config
- Always ensures a valid server_id is returned (never null or empty)
- Added comprehensive logging for debugging server_id resolution
Configuration
- New Settings:
messages.show_sync_messages: Control whether sync messages are shown to players (default:true)
[1.1.7-SNAPSHOT] - 2025-01-05
Added
- Extended Version Support: Full compatibility with Minecraft 1.20.4 to 1.21.9
- Comprehensive version detection and compatibility checking
- Maven build profiles for different Minecraft versions
- Enhanced startup version validation
- Enhanced Message System: Improved localization support
- Added parameter support to MessageManager (
get(String key, String... params)) - Support for both indexed (
{0},{1}) and named ({version},{error},{url}) placeholders - Dynamic message content with variable substitution
- Added parameter support to MessageManager (
- Version Compatibility Fixes: Robust ItemStack deserialization
- Safe deserialization methods (
safeItemStackArrayFromBase64,safeItemStackFromBase64) - Graceful handling of version-incompatible ItemStack data
- Individual item error handling to prevent complete deserialization failures
- Fallback mechanisms for corrupted or incompatible data
- Safe deserialization methods (
- Enhanced Update Checker: Improved console messaging
- Localized update checker messages in German and English
- Better error handling with specific error messages
- Configurable update checking with proper console feedback
- Dynamic content in update notifications (version numbers, URLs)
Changed
- Java Version: Upgraded from Java 17 to Java 21 for optimal performance
- Minecraft Version: Updated default target to Minecraft 1.21
- Plugin Metadata: Enhanced plugin.yml with proper
authorsarray andload: STARTUP - Version Compatibility: Comprehensive support for 1.20.4 through 1.21.9
- Message Handling: All hardcoded messages replaced with localized MessageManager calls
- Error Recovery: Better handling of version compatibility issues
Fixed
- Critical Version Compatibility: Fixed "Newer version! Server downgrades are not supported!" errors
- ItemStack deserialization now handles version mismatches gracefully
- Individual items that can't be deserialized are skipped instead of crashing
- Empty arrays returned as fallback for completely failed deserialization
- MessageManager Compilation: Fixed "Method get cannot be applied to given types" errors
- Added overloaded
getmethod with parameter support - Proper parameter replacement for dynamic content
- Backward compatibility with existing
get(String key)method
- Added overloaded
- Update Checker Messages: Fixed missing console messages
- All update checker events now display proper localized messages
- Dynamic content (version numbers, URLs) properly integrated
- Better error reporting for different failure scenarios
- Database Loading: Enhanced error handling for corrupted inventory data
- Safe deserialization prevents server crashes from version issues
- Partial data recovery when some items are incompatible
- Better logging for version compatibility issues
Security
- Data Validation: Enhanced ItemStack validation and sanitization
- Error Handling: Graceful degradation for corrupted or incompatible data
- Version Safety: Protection against version-related crashes
Performance
- Memory Efficiency: Better handling of large ItemStack arrays
- Error Recovery: Faster recovery from deserialization failures
- Resource Management: Improved cleanup of failed operations
Compatibility
- Minecraft 1.20.4: Full support confirmed
- Minecraft 1.20.5: Full support confirmed
- Minecraft 1.20.6: Full support confirmed
- Minecraft 1.21.0: Full support confirmed
- Minecraft 1.21.1: Full support confirmed
- Minecraft 1.21.2: Full support confirmed
- Minecraft 1.21.3: Full support confirmed
- Minecraft 1.21.4: Full support confirmed
- Minecraft 1.21.5: Full support confirmed
- Minecraft 1.21.6: Full support confirmed
- Minecraft 1.21.7: Full support confirmed
- Minecraft 1.21.8: Full support confirmed
- Minecraft 1.21.9: Full support confirmed
Configuration
- New Messages:
loaded: "Player data loaded successfully" / "Spielerdaten erfolgreich geladen"load_failed: "Failed to load player data" / "Fehler beim Laden der Spielerdaten"update_check_disabled: "Update checking is disabled" / "Update-Prüfung ist deaktiviert"update_check_timeout: "Update check timed out" / "Update-Prüfung ist abgelaufen"update_check_no_internet: "No internet connection for update check" / "Keine Internetverbindung für Update-Prüfung"update_download_url: "Download at: {url}" / "Download unter: {url}"
Commands
- Enhanced Commands:
- All commands now use localized messages with parameter support
- Better error reporting with dynamic content
- Improved user feedback for all operations
Technical Details
- Build System: Maven profiles for different Minecraft versions
mvn package -Pmc-1.20.4for Minecraft 1.20.4 (Java 17)mvn package -Pmc-1.21for Minecraft 1.21 (Java 21) - Defaultmvn package -Pmc-1.21.1for Minecraft 1.21.1 (Java 21)
- Code Quality: Enhanced error handling and parameter validation
- Resource Management: Better cleanup and memory management
- Exception Handling: More specific error messages and recovery mechanisms
- Debugging: Enhanced diagnostic information and version compatibility logging
Added
- Backup System: Complete backup and restore functionality
- Automatic daily backups with configurable retention
- Manual backup creation via
/sync backup create - Backup restoration via
/sync restore <player> [backup_id] - SQL dump generation for database backups
- ZIP compression for file backups
- Backup listing and management commands
- Performance Caching: In-memory player data cache
- Configurable cache size and TTL (Time-To-Live)
- LRU (Least Recently Used) eviction policy
- Optional compression for memory optimization
- Cache statistics and management via
/sync cache
- Enhanced Performance Monitoring
- Detailed save/load time tracking
- Connection pool statistics
- Performance metrics logging
- Slow operation detection and warnings
- Improved Update Checker
- Configurable timeout settings
- Better error handling for network issues
- Download link in update notifications
- User-Agent header for API requests
- Emergency Configuration System
- Automatic config file creation if missing
- Fallback configuration generation
- Debug information for configuration issues
- Multi-layer configuration loading approach
Changed
- Achievement Sync Limits: Increased limits for Minecraft's 1000+ achievements
MAX_COUNT_ATTEMPTS: 1000 → 2000MAX_ACHIEVEMENTS: 1000 → 2000MAX_PROCESSED: 2000 → 3000- Large amount warning threshold: 500 → 1500
- Database Performance: Enhanced connection pooling
- Exponential backoff for connection acquisition
- Increased total timeout to 10 seconds
- Better connection pool exhaustion handling
- Inventory Utilities: Improved ItemStack handling
- Integrated sanitization and validation
- Better corruption data handling
- Enhanced Base64 serialization/deserialization
- Configuration Management: Robust config loading
- Multiple fallback mechanisms
- Emergency configuration creation
- Better error diagnostics
Fixed
- Critical Achievement Bug: Fixed infinite loop in achievement counting
- Added hard limits to prevent server freezes
- Implemented timeout-based processing
- Better error handling and logging
- Database Parameter Error: Fixed "No value specified for parameter 20" error
- Corrected SQL REPLACE INTO statement
- Added missing
advancementsandserver_idparameters - Fixed PreparedStatement parameter setting
- Slow Save Detection: Optimized achievement serialization
- Reduced processing time for large achievement counts
- Added performance monitoring
- Implemented batch processing with timeouts
- Configuration Loading: Fixed empty config.yml issue
- Added multiple fallback mechanisms
- Emergency configuration generation
- Better resource loading handling
- Compilation Errors: Fixed missing imports
- Added
java.io.Fileandjava.io.FileWriterimports - Resolved Date ambiguity in BackupManager
- Fixed try-catch block nesting issues
- Added
Security
- Enhanced Data Validation: Improved ItemStack sanitization
- Audit Logging: Better security event tracking
- Error Recovery: Graceful handling of corrupted data
Performance
- Memory Optimization: Cache compression and TTL management
- Database Efficiency: Connection pooling and batch processing
- Async Operations: Non-blocking backup and save operations
- Resource Management: Better memory and connection cleanup
Compatibility
- Minecraft 1.21.5: Full support for Paper 1.21.5
- Legacy Support: Maintained compatibility with 1.20.x
- API Compatibility: Proper handling of version differences
- Database Compatibility: Support for MySQL, SQLite, and PostgreSQL
Configuration
- New Settings:
performance.cache_ttl: Cache time-to-live in millisecondsperformance.cache_compression: Enable cache compressionupdate_checker.timeout: Connection timeout for update checksperformance.max_achievements_per_player: Increased to 2000server.id: Unique server identifier for multi-server setups
Commands
- New Commands:
/sync backup create: Create manual backup/sync restore <player> [backup_id]: Restore from backup/sync cache clear: Clear performance statistics
- Enhanced Commands:
/sync cache: Now shows performance and connection pool stats/sync status: Improved status reporting/sync reload: Better configuration reload handling
Technical Details
- Code Quality: Improved error handling and logging
- Resource Management: Better cleanup and memory management
- Exception Handling: More specific error messages and recovery
- Debugging: Enhanced diagnostic information and logging
[1.1.4] - 2024-12-XX
Added
- Initial release with basic player data synchronization
- MySQL and SQLite database support
- Basic configuration system
- Player event handling (join, quit, world change, death)
- Sync command with basic functionality
Features
- Coordinate synchronization
- Experience (XP) synchronization
- Gamemode synchronization
- Inventory synchronization
- Enderchest synchronization
- Armor synchronization
- Offhand synchronization
- Health and hunger synchronization
- Potion effects synchronization
- Achievements synchronization
- Statistics synchronization
- Attributes synchronization
[1.1.3] - 2024-12-XX
Fixed
- Various bug fixes and stability improvements
- Database connection handling improvements
- Better error messages and logging
[1.1.2] - 2024-12-XX
Fixed
- Configuration loading issues
- Database parameter errors
- Achievement sync problems
[1.1.1] - 2024-12-XX
Fixed
- Initial bug fixes and improvements
- Better error handling
[1.1.0] - 2024-12-XX
Added
- Initial stable release
- Core synchronization features
- Basic configuration system
- Database support
[1.0.0] - 2024-12-XX
Added
- Initial development release
- Basic plugin structure
- Core functionality implementation