
PrivateChestFree
Chest protection plugin with anti-explosion and permission support.
1.4K
2
Список изменений
📜 PrivateChest - Version 2.3.1 Release Notes
Release Date: 20/03/2026
[2.3.1] - 2026-03-20
Added
-
Granular Command Permissions
- New individual permission nodes for each player command:
privatechest.lock— Controls access to/lockchestprivatechest.unlock— Controls access to/unlockchestprivatechest.trust— Controls access to/trustprivatechest.untrust— Controls access to/untrustprivatechest.rename— Controls access to/renamecontainerprivatechest.sign— Controls access to[Private]sign-based locking
privatechest.usenow acts as a parent permission that grants all of the above- Server admins can now deny specific commands per player or group without affecting the rest
- Sign protection (
privatechest.sign) is independent from the command (privatechest.lock), so blocking/lockchestdoes not block[Private]signs
- New individual permission nodes for each player command:
-
Shared Container Utility Class (
ContainerUtils)- Centralized double chest detection, container validation, and location serialization
- Eliminates code duplication across 6 files (listeners and commands)
- Single source of truth for container logic — easier to maintain and less error-prone
Fixed
-
Explosion protection now covers both halves of double chests
- Previously, if only one half of a double chest had the lock record, the other half could be destroyed by TNT/creepers
- Both
EntityExplodeEventandBlockExplodeEventnow check all container parts
-
Sign protection now uses its own permission (
privatechest.sign)- Previously shared permission with
/lockchest, meaning blocking the command also blocked[Private]signs - Now uses a dedicated
privatechest.signpermission, independent fromprivatechest.lock
- Previously shared permission with
-
Null safety in
ChestLocker.serializeLocation()- Previously could throw
NullPointerExceptionif a world was unloaded - Now delegates to
ContainerUtils.serializeLocation()with proper null checks
- Previously could throw
-
Sign-based protection password is now cryptographically secure
- Previously used deterministic
hashCode()based on player UUID and location (predictable) - Now uses
SecureRandomto generate unpredictable 32-character hex passwords
- Previously used deterministic
Improved
-
Thread Safety
ChestLocker:chestOwnersandchestPasswordsmaps changed fromHashMaptoConcurrentHashMapTrustManager:trustRelationsmap changed fromHashMaptoConcurrentHashMap, inner sets useConcurrentHashMap.newKeySet()- Prevents
ConcurrentModificationExceptionwhen async cleanup runs alongside main thread operations
-
Timing-safe password comparison
PasswordManager.verifyPassword()now usesMessageDigest.isEqual()instead ofString.equals()- Prevents timing attacks that could leak password hash information
How Granular Permissions Work
- By default, nothing changes for existing servers.
privatechest.usestill grants all commands. - To block a specific command, negate its permission in your permissions plugin:
# LuckPerms example — block only /lockchest but keep [Private] signs working permissions: - privatechest.lock: false - The remaining commands will continue working normally.
Migration Notes
- Fully backwards compatible — no configuration changes required
- Existing permission setups using
privatechest.usewill continue to work identically - Thread safety improvements are transparent — no action needed
Compatibility
- Minecraft 1.16.x – 1.21.11
- Tested on Paper, Purpur, Pufferfish, and Spigot
Support & Feedback
- Report issues on GitHub: PrivateChest Issues
- SpigotMC Resource: https://www.spigotmc.org/resources/privatechest.124359/
Thank you for using PrivateChest!
Файлы
PrivateChest-2.3.1.jar(109.86 KiB)
ОсновнойМетаданные
Канал релиза
Release
Номер версии
2.3.1
Загрузчики
BukkitFoliaPaperPurpurSpigot
Версии игры
1.16–1.21.11
Загрузок
102
Дата публикации
3 нед. назад
