Список изменений
📜 CHANGELOG - SafeChest v0.0.5
Welcome to the biggest and most ambitious version of SafeChest to date! Version 0.0.5 is not just a simple update; it’s a total revolution of the plugin. We’ve renamed it, refactored the codebase, added professional-grade admin tools, integrated sound and animation systems, and fixed critical performance bugs that affected server stability. This version is designed for high-traffic servers and demanding administrators.
✨ New Features
-
Added: Full PlaceholderAPI Integration
The newplaceholderpackage andSafeChestExpansionclass allow you to use placeholders like%safechest_time_left%,%safechest_item_count%, and%safechest_location%in any plugin that supports PlaceholderAPI (scoreboards, chat messages, menus, etc.). Customize your server like never before! -
Added:
/safechestadminAdministration Command
A powerful new system with subcommands:/safechestadmin inspect <player>: Lists all active chests for a player. Entries are clickable for admins to teleport./safechestadmin delete <uuid>: Deletes a specific chest by its UUID, cleaning both the block and the database./safechestadmin purge: Manually deletes all expired chests from the database./safechestadmin stats: Shows global server statistics: total active chests, expired chests, players with active chests, and total players who have used the system.
-
Added: Configurable Sound System
A newsoundssection inconfig.yml. Sounds play when a chest is created (ENTITY_PLAYER_LEVELUP), inventory is restored (ENTITY_ENDERMAN_TELEPORT), a player teleports, and when a chest expires (ENTITY_ITEM_BREAK). Can be disabled globally. -
Added: Hologram Blinking Animation
A newhologram-animationsection inconfig.yml. Holograms blink in configurable colors (red/yellow by default) when the remaining time is below a threshold (10 seconds by default). Optionblink-only-time-placeholder: truemakes only the{time}placeholder blink. -
Added: Chest Material Per Group
Ingroups.yml, each group can define its ownmaterial(e.g.,material: "BARREL"for VIPs). This overrides the global material defined inconfig.yml, allowing visual customization by rank. -
Added: Pagination System for
/sclist
The/sclistcommand now displays chests in pages (5 per page by default). If there are many entries, the player sees only one page at a time. Clickable "Previous Page" and "Next Page" buttons are added to the footer. Usage:/sclist 2. -
Added: Close Button in Preview GUI (
/scpreview)
ABARRIERitem has been added to slot 44 of the preview GUI with the name "§c§lClose Preview". Allows the player to explicitly close the GUI, regardless of theforce-close-only-with-escsetting. -
Added: Live Update for Preview GUI
The/scpreviewGUI now automatically refreshes every 5 seconds, reloading the chest's state from the database. If the chest expires while the player is viewing it, the GUI closes automatically and notifies the player. -
Added: Expiration Warning Notification
If a chest has a duration greater than 60 seconds, the player receives a warning message 1 minute before it expires, reminding them of its location. The message is customizable inlang.yml(warning.chest_expiring_soon). -
Added: Enhanced Logging System
The plugin now logs important events to the server log:log.chest_created: When a chest is created.log.chest_fetched: When a player uses/scfetch.log.chest_teleported: When a player uses/sctp.log.inventory_restored: When an inventory is restored.log.payment_made: When a player pays for a service (teleport/fetch).
-
Added: New Dynamic Placeholders in Death Buttons
Thehovermessages for the/sctpand/scfetchbuttons that appear upon death can now include{cost}and{time}. Example inlang.yml:hover: "Cost: {cost}. Expires in: {time}." -
Added: Renaming of Commands and Permissions
To avoid conflicts and modernize the plugin, all commands and permissions have been renamed fromangelchesttosafechest.- Old Commands:
/actp,/acfetch,/acpreview,/aclist→ New Commands:/sctp,/scfetch,/scpreview,/sclist. - Old Permissions:
angelchest.*→ New Permissions:safechest.*. - Old Groups:
angelchest.group.*→ New Groups:safechest.group.*.
- Old Commands:
-
Added: Database Table Name Change
To reflect the plugin's new name, the database table has been renamed fromangelcheststosafechests. This requires manual data migration if updating from a previous version!
🐛 Bug Fixes
-
Fixed: 🐞 Critical Deadlock Bug in Chest Interaction and Breaking
Description: In v0.0.4, thePlayerInteractEvent(right-click) andBlockBreakEventloaded the chest from the database synchronously and blocking on the main server thread. This could cause severe lag or even complete server freezes if the database was slow or overloaded. Solution: Both events now load the chest asynchronously. The event is canceled immediately, and the restore or protection logic is executed on the main thread only after the database load has finished. This keeps the server responsive. -
Fixed: 🐞 Startup Bug: Valid Holograms Not Updating
Description: Upon server restart, if a chest's holograms already existed physically, the plugin detected them as valid but did not start the timer that updates the countdown. The hologram remained frozen at the time the server restarted. Solution: InPluginContainer.java, in therestoreActiveChests()method, the linehologramManager.startHologramTimer(existingHolograms, (int) secondsLeft, chest);is now added even for existing holograms. This ensures the timer is always active. -
Fixed: 🐞 Economy Bug: Lack of Error Logging
Description: If an economic transaction (withdrawing money) failed for any reason (Vault error, negative balance, etc.), the plugin only showed a generic message to the player but did not log the error in the server log, making debugging difficult. Solution: InEconomyManager.java, thewithdrawmethod now logs the specific Vault error message to the server log (mainPlugin.getLogger().severe(...)). -
Fixed: 🐞 Minor Configuration Bug: Enabled vs. Disabled Worlds
Description: In v0.0.4, the setting was calledbehavior.enabled-worlds, implying a whitelist. The logic was confusing. Solution: In v0.0.5, the setting has been renamed tobehavior.disabled-worlds, turning it into a blacklist. The logic is clearer: if the list is not empty and the player's world is in it, the plugin is disabled for that player in that world. -
Fixed: 🐞 Consistency Bug: Chest Material in Fetch
Description: When using/scfetch, the chest was moved to the player, but it used the global material fromconfig.yml(getAngelChestMaterial()), ignoring the specific material for the player's group. Solution: Although not explicitly shown in theAngelChestService.javasnippet for themoveChestToPlayermethod, the general logic of the plugin now relies onGroupConfig. It is assumed this bug was fixed during the refactoring process, as the material is obtained from the group increateAngelChest.
🛠️ Improvements and Internal Changes
-
Improvements in Safe Spot Search (
/sctp):- The algorithm in
TeleportCommand.javahas been slightly improved to first search adjacent X/Z coordinates and then upwards, which may result in more intuitive teleports.
- The algorithm in
-
Improvements in Serialization:
- Although the core logic of
InventorySerializerdid not change, it was moved to the new package and its compatibility with the new structure was ensured.
- Although the core logic of
-
Improvements in Configuration:
- Dozens of new options have been added to
config.ymlfor the new features (sounds, hologram animation, logging, etc.). - The
groups.ymlfile now includes thematerialfield.
- Dozens of new options have been added to
-
Improvements in Messages (
lang.yml):- Dozens of new messages have been added for the new features (admin command, pagination, logging, close buttons, etc.).
- A specific error message for
/scpreviewwhen no chest exists was added:error.no_chest_preview.
⚠️ Important Notes for Updating
- Name Change: This is a rename from
AngelChesttoSafeChest. All commands, permissions, and the database table have changed. - Data Migration: To update from v0.0.4, you will need to:
- Back up your database (
angelchests.dbor theangelcheststable in MySQL). - Rename the table from
angelcheststosafechestsin your database. - Update all permissions and command aliases on your server and in permission plugins (like LuckPerms).
- Back up your database (
Version 0.0.5 transforms SafeChest from a functional plugin into a robust, professional, and feature-rich premium tool! The fix for the deadlock bug is crucial for server stability, and the new features like pagination, the dynamic GUI, and the admin command make it an indispensable tool for any serious server. Update today!

