
TrialChamberPro
Because Trial Chambers deserve better than being a "one and done" dungeon.
1.5K
15
TrialChamberPro 1.2.24-mc26
release15 апреля 2026 г.This plugin version is compatible with Minecraft 26.X.X
1.2.24 - 2026-04-15
Added
- Custom Plugin Item Support in loot.yml: Nexo, ItemsAdder, and Oraxen items can now be used as loot drops
- Use
type: CUSTOM_ITEMwithplugin: Nexo/ItemsAdder/Oraxenanditem-id: "..."fields - Resolved at runtime via reflection — no compile-time dependency on any custom item plugin
- If the plugin is not installed, the item is skipped with a console warning
- Extra
name:,lore:, andenchantments:fields are applied on top of the resolved item
- Use
custom-model-datafield for vanilla items: Set custom model data (resource pack texture override) on any vanilla item in loot.yml- Works with all other item fields (enchantments, lore, durability ranges, etc.)
TrialChamberPro 1.2.24
release15 апреля 2026 г.1.2.24 - 2026-04-15
Added
- Custom Plugin Item Support in loot.yml: Nexo, ItemsAdder, and Oraxen items can now be used as loot drops
- Use
type: CUSTOM_ITEMwithplugin: Nexo/ItemsAdder/Oraxenanditem-id: "..."fields - Resolved at runtime via reflection — no compile-time dependency on any custom item plugin
- If the plugin is not installed, the item is skipped with a console warning
- Extra
name:,lore:, andenchantments:fields are applied on top of the resolved item
- Use
custom-model-datafield for vanilla items: Set custom model data (resource pack texture override) on any vanilla item in loot.yml- Works with all other item fields (enchantments, lore, durability ranges, etc.)
TrialChamberPro 1.2.23
release14 февраля 2026 г.1.2.23 - 2026-02-14
Fixed
- Vanilla Vaults Broken: Unregistered/vanilla vaults now work correctly when plugin is installed
- Root cause:
VaultInteractListenerintercepted ALL vault interactions server-wide, cancelling the event for vaults not in the plugin's database - Fix: Early-return check skips plugin logic for vaults outside registered chambers
- Root cause:
- Custom Death Message Not Working: Death messages set from async thread had no effect (event already processed)
- Fix: Use synchronous cache lookup (
getCachedChamberAt) so death message is set while event is still being processed
- Fix: Use synchronous cache lookup (
- Async Block Data Access:
saveVault()accessedblock.blockData.asStringon IO thread (unsafe Bukkit API access)- Fix: Block data string is now read on the main thread and passed as a parameter
runBlockingin Async Thread:UndoListenerusedrunBlockinginsiderunTaskAsync, blocking Bukkit's async thread pool- Fix: Replaced with
plugin.launchAsync {}coroutine pattern
- Fix: Replaced with
- JDBC Resource Leaks:
StatisticsManagerhad 5 methods withPreparedStatement/ResultSetnot wrapped in.use{}- Fix: All JDBC resources now use
.use{}for automatic cleanup
- Fix: All JDBC resources now use
loadingLocksMemory Leak: Per-player mutex map inStatisticsManagergrew without bound- Fix: Entries now cleaned up alongside cache invalidation
Improved
- Messages Performance:
getMessage()now caches the parsedmessages.ymlinstead of re-reading and re-parsing the file on every call; cache invalidated on/tcp reload - Shutdown Reliability:
PlayerMovementListener,PlayerDeathListener, andPasteConfirmListenercoroutine scopes now properly cancelled on plugin disable - Time Tracking Data Preservation: Player time-in-chamber data is flushed to database on plugin shutdown (previously up to 5 minutes of data could be lost)
- Duplicate Command Handlers: Removed redundant
TCPCommand/TCPTabCompletercreation during async initialization (already registered at startup)
TrialChamberPro 1.2.22
release10 января 2026 г.1.2.22 - 2026-01-10
Fixed
- GUI Teleport Right-Click: Fixed teleport button in ChamberDetailView ignoring click type
- Right-click was teleporting to chamber center instead of exit location
- Root cause:
handleTeleport()didn't check for left vs right click - always teleported to center - Fix: Added
isLeftClickandisRightClickparameters to handler - Left click: Teleport to chamber center (as before)
- Right click: Teleport to exit location (now works correctly)
- Shows "No exit location set" message if exit not configured
Technical Details
ChamberDetailView.handleTeleport()now acceptsleft: Boolean, right: Booleanparameters- Uses
whenexpression to differentiate click types - Existing messages
gui-teleport-to-center,gui-teleport-to-exit, andgui-no-exit-locationused
TrialChamberPro 1.2.21
release9 января 2026 г.1.2.21 - 2026-01-10
Fixed
- Vault Cooldown Not Working: Fixed permanent vault cooldown not being enforced after the 5-second spam protection expires
- Root cause: We were cancelling the
PlayerInteractEventto handle loot ourselves, but this prevented vanilla from tracking the player in the vault'srewarded_playersNBT - Our database tracking was supposed to handle cooldowns, but wasn't being respected properly
- Fix: Now uses Paper's native
VaultTileState API for cooldown tracking:hasRewardedPlayer(UUID)to check if player already opened the vaultaddRewardedPlayer(UUID)to mark player as rewarded after giving lootupdate()to persist the block state changes
- This is more reliable because it uses Minecraft's built-in tracking that persists with the block
- Cooldowns automatically reset when the vault block is restored during chamber reset
- Root cause: We were cancelling the
Improved
- SpawnerWaveListener: Removed reflection-based ominous detection, now uses Paper's native
TrialSpawner.isOminousproperty directly - VaultInteractListener: Simplified trial key detection using direct
Material.OMINOUS_TRIAL_KEYenum instead of string comparison- Note: Vault ominous detection still uses block data string parsing as Paper's Vault TileState doesn't have
isOminousproperty (unlike TrialSpawner)
- Note: Vault ominous detection still uses block data string parsing as Paper's Vault TileState doesn't have
- Vault Reset Commands: Now properly clear both database tracking AND native Vault
rewarded_players/tcp vault reset <chamber> <player>- Clears specific player from vault cooldown- GUI "Reset All Cooldowns" button - Clears all players from vault cooldowns
- Chamber automatic reset - Clears all vault cooldowns (both DB and native API)
- Uses
Vault.removeRewardedPlayer(UUID)andVault.update()to clear native state - Fully Folia-compatible using
scheduler.runAtLocation()for block operations
Technical Details
VaultInteractListenernow importsorg.bukkit.block.VaultTileState- Cooldown check:
block.state as? VaultthenvaultState.hasRewardedPlayer(player.uniqueId) - After loot:
vaultState.addRewardedPlayer(player.uniqueId)thenvaultState.update()(CRITICAL: must call update!) - Database
recordOpenis still called for statistics tracking, but not used for cooldown enforcement - Both operations run on the region thread (Folia compatible) using
scheduler.runAtLocation() - Added
vault-errormessage to messages.yml for edge cases where vault state can't be updated - Key detection:
Material.TRIAL_KEYandMaterial.OMINOUS_TRIAL_KEYdirect enum comparison - Spawner ominous check:
state.isOminousproperty (no reflection needed)
Совместимость
Детали
Лицензия:CC-BY-NC-ND-4.0
Опубликован:5 месяцев назад
Обновлён:20 часов назад