EasyHomes v1.4.0 Changelog
The "Everything You Asked For" Update
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
What's New
◆ Premium GUI Redesign
- Complete layout overhaul - 21 homes per page in a centered 7-column grid with zero visual overlap
- Folder tab system replaces old category chips - one-click filtering with visual feedback
- Search bar (chat-based input) - filter homes by name, world, or description
- Sort toggle - cycle through Name (A→Z), Date (newest), Visits (popular), World
- Enhanced home lore: last visited timestamp, description preview, visit counter
◆ Context Menu - 8 Actions
- Rename - type a new name in chat, validated for uniqueness and format
- Edit Description - chat-based editor with right-click to clear
- Set Icon - hold any item, click, and it becomes the home's GUI icon
- Move to Folder - opens a graphical folder picker with inline folder creation
- Public / Private Toggle - one-click sharing with the server
- Teleport - full safety pipeline (combat, cooldown, economy, lava/fire detection)
- Delete - with optional Vault economy refund
◆ Folder System
- First-class folder manager GUI - view all folders with home counts
- Create folders via /sethome folder/name or inline in the GUI
- Graphical Folder Picker - move homes between folders with visual selection
- Delete folders - homes move to uncategorized, nothing is lost
- Help button explains the folder concept to new players
◆ Sound Design
- 8 distinct sounds for every action type - GUI click, teleport success, teleport cancel, home created, home deleted, combat tag, public toggle, warmup tick
- Tick sound during teleport warmup - configurable in config.yml
- All sounds have distinct pitch/volume for clear audio differentiation
◆ BossBar Teleport Progress
- Visual BossBar during warmup countdown with configurable color and style
- Progress decreases in real time - players see exactly when they'll teleport
- Automatically removed on completion, cancel, or disconnect
◆ Teleport Improvements
- Modern Particle API replaces deprecated Effect API
- cancel-on-jump and cancel-on-sneak now fully implemented
- cancel-on-damage with config toggle - stops teleport on any damage
- Safety check warns when home is in a dangerous location (configurable i18n)
◆ Admin Features
- /easyhomes status - live storage type, cache hit rate, total homes count
- /easyhomes migrate <from> <to> - migrate between YAML/MySQL/SQLite in one command
- /homefolders - registered with TabCompleter for folder names
- Admin panel now shows live cache hit rate percentage
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Bug Fixes
- Critical: PublicHomesGUI teleport bypassed all safety checks - now routes through full TeleportManager pipeline
- Critical: I18n overwrote custom language files on every reload - now copies only on first run
- Critical: WorldGuardHook used deprecated API - migrated to Bukkit plugin manager reference
- Critical: HomeManager created 3 redundant Home objects on update - reduced to single allocation
- Critical: SetHomeCommand saved homes twice on category update - removed redundant save
- Updating a home with /sethome no longer resets the original createdAt timestamp
- Folder deletion now properly saves category changes to storage
- PublicHomesGUI NEAREST sort no longer throws NPE when home worlds are unloaded
- CombatListener damage cancel now respects config toggle instead of always cancelling
- HomeEntry.getOwnerName() refreshes from online player to handle name changes
- SQLite busy_timeout set to 5s to prevent "database locked" errors on concurrent writes
- YAML saves now async to avoid main-thread I/O
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Code Quality
- All 5 shared-state maps upgraded to ConcurrentHashMap (CooldownManager, CombatManager, TeleportManager, GUIManager ×2)
- Periodic cleanup task (every 60s) removes expired combat tags and cooldowns
- HomeStorage.loadHomes() now has 5-second timeout with cache fallback
- Removed dead code: DatabaseManager.executeAsync(), Home.saveFlat(), UpdateChecker.GITHUB_API
- PaginatedGUI.setupNavigation() made non-abstract (no more empty overrides)
- Extracted shared navArrow() to PaginatedGUI, removed 3 duplicate implementations
- Removed redundant PaginatedGUI.itemSlots field
- GUIManager.expectChat() - cleaned up unused guiToReopen parameter
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
i18n - 4 Languages, 100% Coverage
- All 4 language files (EN, PL, DE, FR) now have identical key sets - ~120 keys each
- Zero hardcoded sendMessage() - every user-facing string goes through i18n
- Fixed critical bug: German messages_de.yml was missing the entire sethome: section
- Updated usage.easyhomes in all 4 languages to include status|migrate
- All chat prompts, folder labels, update messages, and admin strings translated
- teleport.dangerous-location warning localized in all 4 languages
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Update from any previous version - no config reset required.
Delete your old easyhomes.jar. Drop in the new one. Restart. Done.
Optimized the plugin's performance by preloading player data asynchronously to prevent main-thread lag, patched minor memory leaks in managers, and fixed an issue with NPCs being incorrectly tagged in combat.
New Features
Improvements
- MySQL Storage - Database support with HikariCP (YAML fallback)
- Vault Economy - Teleport/sethome costs, delhome refunds, distance-based pricing
- WorldGuard - Block sethome in protected regions
- PlaceholderAPI - 10+ placeholders (count, limits, cooldowns, combat)
- Debug System - /easyhomes debug on/off with file logging
- Default Home - /sethome alone creates "home"
- Permission Limits - 8 tiers: 1/3/5/10/15/25/50/unlimited
- Smart Cache - Guava TTL cache for performance
- Java 17 - Modern Java requirement
- Full English - All messages and docs translated
