All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Better Trial Chambers

Better Trial Chambers

by darkstarworks • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions
Better Trial Chambers Free forever. Updated almost daily. Turn one-time Trial Chambers into replayable multiplayer dungeons.
Vanilla With this plugin
First player gets everything Every player gets their own loot
Chamber stays empty forever Resets on a timer
Vault opens once Cooldown, reset, or pay keys to reopen
Spawners get griefed Protected
One chamber layout Build your own / Datapack
Nothing is tracked Stats and leaderboards
Set up each chamber by hand Found automatically

Better Trial Chambers

Setup

  1. Drop the JAR in /plugins
  2. Start the server
  3. Type /trial setup
  4. Answer the questions
  5. Walk around your world & see the magic happen

Chambers register themselves as you find them. Done.

The /trial setup prompt in-game
Screenshot: native Dialog UI on Paper 1.21.7+ The /trial setup tour as a native Dialog popup
Old world, or you want to pick the chambers yourself?

Auto-discovery is off by default on purpose, because on established worlds, player-built stuff made of tuff and copper in rare cases are mistaken by the plugin for a trial chamber.

Select chambers with WorldEdit instead (if your world has many of those structures):

//wand
/trial generate wand MyChamber
/trial snapshot create MyChamber

Same features either way. Docs →

What it does

Loot

  • Every player gets their own vault loot
    • Chests, barrels, droppers and pots too, if you want
  • Or make it a race: first player claims the vault, it stays shut for everyone else
  • Build your own loot tables. By weight, or by plain % chance
  • Different loot per chamber
  • Edit it all in a menu. No YAML (optional)

Resets

  • Chambers restore on a timer you set
  • Players get a warning first
  • Set it to 0 to only reset by hand

Protection

  • Nobody breaks blocks or spawners inside a chamber
  • Optional: let players tunnel in through the wall. They get no drops, the wall heals on reset

Custom chambers (optional)

  • Use a datapack, such as Crazy Chambers
  • Or make rooms yourself, the plugin stitches them into a new chamber

During a fight

  • Boss bar shows wave progress
  • Spawner mobs stop killing each other
  • Leftover spawners glow so nobody hunts for the last one
  • Dead players can spectate their team

After completion

  • Statistics; Vaults opened, mobs killed, chambers cleared, time spent
  • Leaderboards
  • 30+ PlaceholderAPI placeholders

Under the hood

  • Paper, Purpur, Pufferfish and Folia
  • Won't lag your server! Big chambers load in small pieces (smooth even with only 4GB ram)
  • SQLite or MySQL
  • Every message is editable in one file (fully translatable)
  • Config updates itself, keeping your settings.

Reference

Commands
Command What it does
/trial setup Walks you through the settings
/trial menu Everything, in a GUI
/trial list All your chambers
/trial reset <chamber> Reset it now
/trial snapshot create Turn on auto-reset for the chamber you're standing in
/trial generate wand <name> Register your WorldEdit selection
/trial dungeon generate <name> Build a chamber from your rooms
/trial dungeon import <file> Import .nbt rooms or a datapack
/trial loot set <chamber> <normal\|ominous> <table> Change a chamber's loot
/trial stats [player] Stats
/trial leaderboard <type> Top players
/trial reload Reload config

All commands →

Permissions
Permission What it does Default
btc.admin Everything OP
btc.stats · btc.leaderboard See stats Everyone
btc.spectate Spectate after dying Everyone
btc.bypass.cooldown Skip vault cooldowns OP
btc.bypass.protection Build inside chambers OP
btc.discovery.notify Get told when a chamber is found OP

Cooldowns look broken when you test as OP! Set btc.bypass.cooldown to false for yourself during testing or deop yourself

All permissions →

Settings people change
global:
  default-reset-interval: 172800   # 48 hours. 0 = manual only.

vaults:
  normal-cooldown-hours: 0         # 0 = stays shut until the chamber resets
  ominous-cooldown-hours: 0
  reopen-cost-keys: 0              # keys to reopen a used vault. 0 = off

chests:
  per-player-loot: false           # true = everyone gets their own chest loot

protection:
  tunnel-breaking:
    enabled: false                 # true = players can mine in

discovery:
  enabled: true                    # find chambers automatically
  auto-snapshot: true              # let them reset

config.yml → · loot.yml →

Works with

None of these are required!

  • WorldEdit or FAWE
  • WorldGuard
  • PlaceholderAPI
  • Vault
  • LuckPerms
  • Nexo
  • ItemsAdder
  • Oraxen
  • CraftEngine
  • MythicCrucible

Want more?

This plugin stays free. Three paid add-ons, if you want them - esmp.fun/plugins:

  • Mythic Trials - chambers get harder every time a player clears them -> 25 difficulty tiers with custom tweaked smarter vanilla MobAI, better rewards and optional seasons
  • Wild Spawners - (custom-mob) trial spawners, anywhere on the map and/or in your shops
  • Vault Crates - crates that use real Trial Vaults instead of chests (no resource packs!)

Help

JDK21 JDK25

Made with Kotlin by darkstarworks Servers & Players

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.3
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.2 26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
26.1.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
1.21.x
Folia Paper Purpur
22h ago 1
## [2.3.1] - 2026-10-14
### Fixed
  • Wild Spawners can be picked up again without losing their type.** With Wild Spawners installed, mining one of its spawners outside a chamber dropped a plain, empty trial spawner instead, or asked for Silk Touch. Better Trial Chambers now leaves Wild Spawners' own spawners to Wild Spawners.
## [2.3.1] - 2026-10-14
### Fixed
  • Wild Spawners can be picked up again without losing their type.** With Wild Spawners installed, mining one of its spawners outside a chamber dropped a plain, empty trial spawner instead, or asked for Silk Touch. Better Trial Chambers now leaves Wild Spawners' own spawners to Wild Spawners.
[2.3.1] Better Trial Chambers 2.3.1 by darkstarworks on Oct 15, 2026
Download
## [2.3.1] - 2026-10-14
### Fixed
  • Wild Spawners can be picked up again without losing their type.** With Wild Spawners installed, mining one of its spawners outside a chamber dropped a plain, empty trial spawner instead, or asked for Silk Touch. Better Trial Chambers now leaves Wild Spawners' own spawners to Wild Spawners.
## [2.3.0] - 2026-10-07
### Added
  • Chambers can wait to be looted before they reset.** Turn on reset-after-first-loot and a chamber's reset clock only starts when someone first opens a vault or a chest inside it. A chamber nobody has touched never resets. On servers with many chambers this saves a lot of memory and work, because only the chambers players actually use get reset. Off by default, so nothing changes until you switch it on.
## [2.3.0] - 2026-10-07
### Added
  • Chambers can wait to be looted before they reset.** Turn on reset-after-first-loot and a chamber's reset clock only starts when someone first opens a vault or a chest inside it. A chamber nobody has touched never resets. On servers with many chambers this saves a lot of memory and work, because only the chambers players actually use get reset. Off by default, so nothing changes until you switch it on.
[2.3.0] Better Trial Chambers 2.3.0 by darkstarworks on Oct 15, 2026
Download
## [2.3.0] - 2026-10-07
### Added
  • Chambers can wait to be looted before they reset.** Turn on reset-after-first-loot and a chamber's reset clock only starts when someone first opens a vault or a chest inside it. A chamber nobody has touched never resets. On servers with many chambers this saves a lot of memory and work, because only the chambers players actually use get reset. Off by default, so nothing changes until you switch it on.
## [2.2.3] - 2026-09-23
### Fixed
  • Stopping the server right after it starts no longer prints an error from the update checker.** The same goes for stopping it while an update check is running.
  • The update checker picks the download made for your Minecraft version,** including the separate 26.3 download.
  • Players can no longer place item frames, paintings, armour stands or cushions in a protected chamber.** These now follow the prevent-block-place setting, like blocks do.
  • No more "could not save messages.yml" warnings on every restart.** The same goes for loot.yml and /trial dungeon.
  • The console now shows how many items each loot table has.** It used to say 0 for the default tables, which looked like they were empty.
## [2.2.3] - 2026-09-23
### Fixed
  • Stopping the server right after it starts no longer prints an error from the update checker.** The same goes for stopping it while an update check is running.
  • The update checker picks the download made for your Minecraft version,** including the separate 26.3 download.
  • Players can no longer place item frames, paintings, armour stands or cushions in a protected chamber.** These now follow the prevent-block-place setting, like blocks do.
  • No more "could not save messages.yml" warnings on every restart.** The same goes for loot.yml and /trial dungeon.
  • The console now shows how many items each loot table has.** It used to say 0 for the default tables, which looked like they were empty.
[2.2.3] Better Trial Chambers 2.2.3 by darkstarworks on Oct 15, 2026
Download
## [2.2.3] - 2026-09-23
### Fixed
  • Stopping the server right after it starts no longer prints an error from the update checker.** The same goes for stopping it while an update check is running.
  • The update checker picks the download made for your Minecraft version,** including the separate 26.3 download.
  • Players can no longer place item frames, paintings, armour stands or cushions in a protected chamber.** These now follow the prevent-block-place setting, like blocks do.
  • No more "could not save messages.yml" warnings on every restart.** The same goes for loot.yml and /trial dungeon.
  • The console now shows how many items each loot table has.** It used to say 0 for the default tables, which looked like they were empty.
## [2.2.2] - 2026-09-23
### Fixed
  • Fixed the chunk check error for good.** The server could break its own list of a chunk's blocks while the plugin read it. 2.2.1 fixed one of five chunk checks and wrongly blamed other plugins. All five are fixed now.
  • Chunks load faster when finding new Trial Chambers is on.** The plugin now asks the server only about vaults and trial spawners.
## [2.2.2] - 2026-09-23
### Fixed
  • Fixed the chunk check error for good.** The server could break its own list of a chunk's blocks while the plugin read it. 2.2.1 fixed one of five chunk checks and wrongly blamed other plugins. All five are fixed now.
  • Chunks load faster when finding new Trial Chambers is on.** The plugin now asks the server only about vaults and trial spawners.
[2.2.2] Better Trial Chambers 2.2.2 by darkstarworks on Oct 15, 2026
Download
## [2.2.2] - 2026-09-23
### Fixed
  • Fixed the chunk check error for good.** The server could break its own list of a chunk's blocks while the plugin read it. 2.2.1 fixed one of five chunk checks and wrongly blamed other plugins. All five are fixed now.
  • Chunks load faster when finding new Trial Chambers is on.** The plugin now asks the server only about vaults and trial spawners.
## [2.2.1] - 2026-09-20
### Fixed
  • Trial spawners are found again after a chunk that another plugin was changing.** When a chunk loaded, the plugin checked it for trial spawners. If another plugin was changing blocks in that chunk from a second thread at the same moment, the check failed with an error and that chunk's spawners were left off the list, so spawner waves could be missed there. The failure is now handled: the console says which chunk it was, and the spawners are picked up the next time the chunk loads or anything in it is broken or placed.
  • Chunks load faster on busy worlds.** The check above asked the server to build a full description of every chest, barrel, sign, hopper and banner in the chunk, just to find the trial spawners among them. It now asks only about trial spawners.
  • A repeating problem no longer sends a repeating error report.** Error reports are on by default and some are sent from places that run on every vault opened. One thing going wrong, such as a database that stopped answering, could send a report every time. Reports of the same kind are now sent at most once every ten minutes.
  • Error reports no longer include the folder your server lives in.** When a file or database problem was reported, the message quoted the full path, which names your hosting account. Reports now show it as plugins/BetterTrialChambers instead. Your own console keeps the full path, because that is where it is useful.
## [2.2.1] - 2026-09-20
### Fixed
  • Trial spawners are found again after a chunk that another plugin was changing.** When a chunk loaded, the plugin checked it for trial spawners. If another plugin was changing blocks in that chunk from a second thread at the same moment, the check failed with an error and that chunk's spawners were left off the list, so spawner waves could be missed there. The failure is now handled: the console says which chunk it was, and the spawners are picked up the next time the chunk loads or anything in it is broken or placed.
  • Chunks load faster on busy worlds.** The check above asked the server to build a full description of every chest, barrel, sign, hopper and banner in the chunk, just to find the trial spawners among them. It now asks only about trial spawners.
  • A repeating problem no longer sends a repeating error report.** Error reports are on by default and some are sent from places that run on every vault opened. One thing going wrong, such as a database that stopped answering, could send a report every time. Reports of the same kind are now sent at most once every ten minutes.
  • Error reports no longer include the folder your server lives in.** When a file or database problem was reported, the message quoted the full path, which names your hosting account. Reports now show it as plugins/BetterTrialChambers instead. Your own console keeps the full path, because that is where it is useful.
[2.2.1] Better Trial Chambers 2.2.1 by darkstarworks on Oct 15, 2026
Download
## [2.2.1] - 2026-09-20
### Fixed
  • Trial spawners are found again after a chunk that another plugin was changing.** When a chunk loaded, the plugin checked it for trial spawners. If another plugin was changing blocks in that chunk from a second thread at the same moment, the check failed with an error and that chunk's spawners were left off the list, so spawner waves could be missed there. The failure is now handled: the console says which chunk it was, and the spawners are picked up the next time the chunk loads or anything in it is broken or placed.
  • Chunks load faster on busy worlds.** The check above asked the server to build a full description of every chest, barrel, sign, hopper and banner in the chunk, just to find the trial spawners among them. It now asks only about trial spawners.
  • A repeating problem no longer sends a repeating error report.** Error reports are on by default and some are sent from places that run on every vault opened. One thing going wrong, such as a database that stopped answering, could send a report every time. Reports of the same kind are now sent at most once every ten minutes.
  • Error reports no longer include the folder your server lives in.** When a file or database problem was reported, the message quoted the full path, which names your hosting account. Reports now show it as plugins/BetterTrialChambers instead. Your own console keeps the full path, because that is where it is useful.
## [2.2.0] - 2026-09-17
### Added
  • Minecraft 26.3 support, as its own download.** This is the -mc263 jar; keep using -mc26 on 26.0 to 26.2 and the plain jar on 1.21.x. Each download now follows its own updates, so a 26.3 server is never offered a jar built for an older Minecraft.
  • Cushions inside a chamber are protected like any other decoration.** 26.3 added cushions, and picking one up is not the same action as taking a painting off a wall, so they needed watching separately. A cushion standing in a protected chamber can no longer be taken, blown up or knocked out by a mob, and btc.bypass.protection still lets staff move one.

### Removed
  • The update.allow-hot-reload setting and /trial update apply.** Installing an update without a restart could never work for this plugin: it ships the SQLite database driver, which cannot be loaded a second time while the server is running, so the update was always refused. Updates install on the next restart as before. If the line is still in your config.yml it simply does nothing, and you can delete it.

### Fixed
  • The menu's reload button now needs the reload permission.** /trial reload has always needed btc.admin.reload, but the reload button on the main menu worked for anyone who could open the menu.
  • All loot tables can be reached from the menu.** The loot table list only showed the first 36 tables and had no next page, so on a server with more tables the rest could not be opened. The list now has page buttons.
  • Chambers with automatic resets turned off say so.** The chamber list and the chamber's own page showed the next reset as "due now" for a chamber whose reset time is set to 0. They now show "Disabled".
  • A mistyped number in config.yml falls back to the right value.** When a setting wasn't a number, the startup check put in a replacement that didn't match the plugin's normal default for eight settings: vault cooldowns became 24 and 48 hours instead of 0 (locked until the chamber resets), trial spawner rest times became 30 minutes instead of Minecraft's own, and four chamber discovery settings got outdated numbers. A spawner rest time below the allowed range, such as -5, also turned into 0 (no rest at all); it now goes back to leaving it to Minecraft. The console messages say plainly what was wrong and what is used instead.
  • Editing a chamber's loot no longer wipes the server's default loot.** A chamber without a loot table of its own opened the loot editor on the server-wide default table. That table comes split into groups the editor page didn't show, so the page looked empty, and pressing Save replaced the entire default table with whatever was on it. Every chamber using the default lost its loot. A chamber now gets its own copy of the default the first time you edit its loot, and the default is left alone.
  • A chamber's exit has to be set in the chamber's own world.** Setting the exit while standing in a different world (for example the Nether) saved only the coordinates, so players leaving the chamber on a reset were sent to that spot in the chamber's world instead. The menu button and /trial setexit now refuse and tell you to go to the chamber's world first.
  • Two menu switches no longer show the wrong starting state.** "Luck effect" and container protection showed as on when the setting was missing from config.yml, while the plugin treated it as off.
  • Update checks look in the right place and offer the right download.** The update checker was still asking Modrinth for the plugin's old name, which Modrinth no longer knows, so every check fell back to GitHub. GitHub then offered whichever jar happened to be listed first in the release, which could be the download built for a different Minecraft version. Checks now find the plugin on Modrinth, and GitHub only ever offers the jar made for your server.
  • Chambers and dungeon rooms saved by TrialChamberPro load again.** Upgrading copies your old plugins/TrialChamberPro/ folder across, but chambers snapshotted and dungeon rooms saved under the old name could not be read. Those chambers failed to reset and those rooms were missing from dungeon generation. They load normally now, with nothing to do on your end.
  • Loot items that don't stack far now give the full amount.** Items added through the loot editor were cut down to one stack, so an item set to give 2 to 3 totems always gave 1, and 32 ender pearls gave 16. Items written by hand in loot.yml went wrong the other way and arrived as oversized stacks. Both now hand out the amount rolled, split into normal stacks.
  • Tab completion matches what each command allows.** Staff who had permission to reset chambers, reset vaults or give keys, without the menu permission, got no suggestions for those commands. Chamber and loot table names with capital letters stopped being suggested as soon as you typed. Players who cannot use a command no longer see names of presets, schematics, rooms or loot tables through its suggestions.
  • Nobody gets left stuck watching after a restart or a reload.** Spectating a chamber after dying put players in the spectator view, and two things could leave them there: reloading the plugin (the change back was asked for a moment too late, when the plugin was already gone), and rejoining a server that was still starting up. Both are handled now, and anyone already stuck is put back the moment they next join.
  • Statistics no longer go missing when the database stumbles.** Two small ways counts could be lost: setting up a player's stats row for the first time could wipe something recorded in the same moment back to zero, and if a save of time spent in chambers failed, everyone's last few minutes were dropped rather than counted again on the next save. Failures now say what happened in plain words instead of printing an error.
  • Two answers in /trial setup did nothing.** Turning on "ask me before a chamber resets" or "use FastAsyncWorldEdit" in the setup tour wrote the answer into the wrong part of config.yml, so the tour said it was on while the plugin carried on as if it were off. Both are written to the right place now, and if the tour already put one in the wrong place on your server it is moved across for you at startup.
  • Mob plugins that start after this one are now noticed.** Whether MythicMobs, EliteMobs, LevelledMobs and the rest were installed was decided once and never looked at again, so on servers where those plugins happen to start later, chambers set to use them quietly spawned ordinary mobs until the next restart.
  • MythicCrucible items in loot tables work with current MythicMobs.** Mythic renamed the method that hands over the finished item, so a Crucible item in a loot table never appeared and the console logged a failure each time it was rolled. Both the old and the new name are accepted now, so any Mythic version works.
  • Custom loot items from other plugins work on more setups.** Items from Nexo, ItemsAdder, Oraxen, CraftEngine and MythicCrucible were fetched in a way Java refuses for some of those plugins' internal classes, in which case the item silently never appeared in the loot.
  • A custom mob that fails to spawn no longer breaks the wave.** Chambers set to use MythicMobs, EliteMobs and the like swap each mob the spawner produces for one of theirs. The ordinary mob was taken away first, so if the other plugin could not spawn its mob (a renamed mob id, or an update that moved its API) the wave was left a mob short, the spawner never finished, the chamber never cleared and no key dropped. The replacement is spawned first now, and the ordinary mob is only removed once it is there.
  • Land-claim protection works again on Residence, Lands and GriefPrevention.** The part that stops a claim being made over a chamber reads those plugins through their public interfaces, and the way it looked up their methods was refused by Java every time, quietly. It could therefore never block anything. It now reads them properly, and if one of those plugins changes its API in future, the console says so once instead of leaving the shield silently off.
  • A hopper can no longer collect loot that is being held for someone.** Vault loot and trial keys dropped on the ground are held for the player who earned them for a short while, but only against other players picking them up by hand. A hopper placed under the drop took them anyway, and so could a mob. Both are now refused for as long as the drop is held.
  • A generated dungeon's doorways stay open after it resets.** The doorways between rooms were opened as a separate step after the rooms were built, while the snapshot that every later reset restores was being taken at the same moment. When the snapshot won that race it recorded the doorways still walled up, and the first reset sealed the dungeon. Doorways are now open from the moment the rooms are placed. Dungeons built before this update: run /trial snapshot update <name> once to re-save them as they stand.
  • A chamber too big to measure in one search now says so.** Finding a player-built or datapack chamber by scanning its blocks stops after a set number of blocks. It used to register whatever it had reached by then without a word, so part of the chamber was left out and only that part ever reset. The console now tells you, and points at /trial scan add <chamber> to take in the rest. The limit is the new discovery.max-scan-blocks setting. Ordinary generated chambers are measured from Minecraft's own structure bounds and were never affected.
  • Placeholders no longer hammer the database.** Scoreboard plugins ask for a placeholder many times a second per player. Each ask that found stale data started its own database lookup, even while an earlier one for the same player was still running, so a busy server with a slow database could tie up every database connection. One lookup per player at a time now, and the leaderboard numbers can no longer get stuck on stale values.
  • A chamber's display name can no longer carry a clickable link into server announcements.** Reset announcements go to everyone and are styled as they are sent, so a display name written with a click or hover tag turned into a button in front of every player, running a command as whoever clicked it. Display names are cleaned when set and when shown, so names saved earlier are covered too. Colours and bold are unaffected.
  • The menu now checks permissions the way the documentation always said it did.** btc.admin.menu is meant to let someone open the menu, with each screen still asking for the permission behind it. In practice nothing inside the menu checked, so anyone who could open it could force resets, empty vault cooldowns, edit loot tables, change container loot and change your global and protection settings, whatever else you had given them. Each of those screens and buttons now asks for the same permission its command asks for, and says so plainly when someone does not have it. Nothing changes for operators or anyone holding btc.admin.*.
  • Changing how often a chamber resets now takes effect straight away.** The new time was saved, but the reset that had already been lined up under the old time still went ahead, warnings and all. Going from two days to one hour looked like it had done nothing until the chamber had reset once more, and setting the interval to 0 to turn resets off let one more reset through.
  • Less work per tick on servers with a lot of chambers.** Every check of "is this spot inside a chamber" went through the whole list of chambers, and some of the events that ask fire constantly, such as flowing water. The plugin now keeps track of the one area per world that holds all of its chambers and answers anywhere outside it immediately.
  • Vault clicks no longer read the whole vault table.** Looking a vault up by where it is, and looking up who has claimed a shared vault, had no index to work from, so both read every row. Two indexes are added automatically the next time the server starts, existing databases included. Nothing to do on your end.
  • A chamber can no longer be given a name its save file cannot use.** A chamber's name is also the name of its snapshot file, so a name with a slash, a dot or a space in it meant the snapshot quietly never saved and the chamber never reset properly. New chambers must use letters, numbers, - and _ (up to 32 characters), with a message saying so if they do not, and you can still give the chamber any name you like for announcements with /trial rename. Chambers registered earlier with an unusable name are named in the console once at startup.
  • Items could be duplicated out of a per-player container on a busy server.** Closing your copy of a chamber container saves it in the background, and opening it again read straight from the database. If the save had not finished, the second open handed back what was in there before you closed it, so anything you had taken out existed twice. Reading and saving a player's copies now wait for each other.
  • Loot is no longer lost when you disconnect while a vault is opening.** The vault counted as opened for you, but the reward went nowhere, and it stayed that way until the chamber reset. It is now dropped at the vault and held for you the same way vault drops normally are.
  • Staff can take decorations out of a chamber again.** btc.bypass.protection did not work on paintings, item frames, armour stands or cushions: whether it was honoured depended on which of two internal handlers the server happened to run first, and usually it was the one that blocks everyone. A WorldGuard region granting build rights was ignored the same way. Both now go through one check.
  • Arriving by portal counts as teleporting in.** With protection.prevent-teleport-into-chamber turned on, a nether or end portal whose far end sits inside a chamber still dropped players straight in.
  • Glowing spawner outlines now use the colour you set.** spawner-waves.glow-color-normal and glow-color-ominous had no effect: every outline came out white whatever you put there. Minecraft only draws an outline in one of its own sixteen colours, so your colour is matched to the closest of those, which is why the shipped yellow and purple look right without you changing anything.
  • Container protection covers everything that holds items.** With protection.prevent-container-access turned on, chests and barrels were protected but shelves, lecterns, jukeboxes, chiseled bookshelves and decorated pots were not, so anyone could still empty those inside a chamber. Vault loot is unaffected, as always.
  • Resets no longer warn that a snapshot "covers a smaller region than the chamber bounds".** Snapshots do not store air, so any chamber with open space along an edge (almost every chamber) looked like its snapshot had fallen behind, and the console asked you to take a new one on every single reset. Snapshots now record the area they were taken from, so the warning only appears when the chamber really has grown since. Snapshots taken before this update keep working; take a new one when convenient and the reset will also tidy up blocks players added in open space near the chamber's edge, which it could not reach before.
### Note
  • This update adds a new message.** The plugin never overwrites your existing messages.yml, so until you add it you may see <missing: exit-wrong-world> if someone tries to set a chamber exit from the wrong world. To get it: stop the server, rename plugins/BetterTrialChambers/messages.yml to messages.yml.bak, start the server so a fresh file is made, then copy any translations back over from the .bak. The console also reminds you at startup whenever messages are missing.
## [2.2.0] - 2026-09-17
### Added
  • Minecraft 26.3 support, as its own download.** This is the -mc263 jar; keep using -mc26 on 26.0 to 26.2 and the plain jar on 1.21.x. Each download now follows its own updates, so a 26.3 server is never offered a jar built for an older Minecraft.
  • Cushions inside a chamber are protected like any other decoration.** 26.3 added cushions, and picking one up is not the same action as taking a painting off a wall, so they needed watching separately. A cushion standing in a protected chamber can no longer be taken, blown up or knocked out by a mob, and btc.bypass.protection still lets staff move one.

### Removed
  • The update.allow-hot-reload setting and /trial update apply.** Installing an update without a restart could never work for this plugin: it ships the SQLite database driver, which cannot be loaded a second time while the server is running, so the update was always refused. Updates install on the next restart as before. If the line is still in your config.yml it simply does nothing, and you can delete it.

### Fixed
  • The menu's reload button now needs the reload permission.** /trial reload has always needed btc.admin.reload, but the reload button on the main menu worked for anyone who could open the menu.
  • All loot tables can be reached from the menu.** The loot table list only showed the first 36 tables and had no next page, so on a server with more tables the rest could not be opened. The list now has page buttons.
  • Chambers with automatic resets turned off say so.** The chamber list and the chamber's own page showed the next reset as "due now" for a chamber whose reset time is set to 0. They now show "Disabled".
  • A mistyped number in config.yml falls back to the right value.** When a setting wasn't a number, the startup check put in a replacement that didn't match the plugin's normal default for eight settings: vault cooldowns became 24 and 48 hours instead of 0 (locked until the chamber resets), trial spawner rest times became 30 minutes instead of Minecraft's own, and four chamber discovery settings got outdated numbers. A spawner rest time below the allowed range, such as -5, also turned into 0 (no rest at all); it now goes back to leaving it to Minecraft. The console messages say plainly what was wrong and what is used instead.
  • Editing a chamber's loot no longer wipes the server's default loot.** A chamber without a loot table of its own opened the loot editor on the server-wide default table. That table comes split into groups the editor page didn't show, so the page looked empty, and pressing Save replaced the entire default table with whatever was on it. Every chamber using the default lost its loot. A chamber now gets its own copy of the default the first time you edit its loot, and the default is left alone.
  • A chamber's exit has to be set in the chamber's own world.** Setting the exit while standing in a different world (for example the Nether) saved only the coordinates, so players leaving the chamber on a reset were sent to that spot in the chamber's world instead. The menu button and /trial setexit now refuse and tell you to go to the chamber's world first.
  • Two menu switches no longer show the wrong starting state.** "Luck effect" and container protection showed as on when the setting was missing from config.yml, while the plugin treated it as off.
  • Update checks look in the right place and offer the right download.** The update checker was still asking Modrinth for the plugin's old name, which Modrinth no longer knows, so every check fell back to GitHub. GitHub then offered whichever jar happened to be listed first in the release, which could be the download built for a different Minecraft version. Checks now find the plugin on Modrinth, and GitHub only ever offers the jar made for your server.
  • Chambers and dungeon rooms saved by TrialChamberPro load again.** Upgrading copies your old plugins/TrialChamberPro/ folder across, but chambers snapshotted and dungeon rooms saved under the old name could not be read. Those chambers failed to reset and those rooms were missing from dungeon generation. They load normally now, with nothing to do on your end.
  • Loot items that don't stack far now give the full amount.** Items added through the loot editor were cut down to one stack, so an item set to give 2 to 3 totems always gave 1, and 32 ender pearls gave 16. Items written by hand in loot.yml went wrong the other way and arrived as oversized stacks. Both now hand out the amount rolled, split into normal stacks.
  • Tab completion matches what each command allows.** Staff who had permission to reset chambers, reset vaults or give keys, without the menu permission, got no suggestions for those commands. Chamber and loot table names with capital letters stopped being suggested as soon as you typed. Players who cannot use a command no longer see names of presets, schematics, rooms or loot tables through its suggestions.
  • Nobody gets left stuck watching after a restart or a reload.** Spectating a chamber after dying put players in the spectator view, and two things could leave them there: reloading the plugin (the change back was asked for a moment too late, when the plugin was already gone), and rejoining a server that was still starting up. Both are handled now, and anyone already stuck is put back the moment they next join.
  • Statistics no longer go missing when the database stumbles.** Two small ways counts could be lost: setting up a player's stats row for the first time could wipe something recorded in the same moment back to zero, and if a save of time spent in chambers failed, everyone's last few minutes were dropped rather than counted again on the next save. Failures now say what happened in plain words instead of printing an error.
  • Two answers in /trial setup did nothing.** Turning on "ask me before a chamber resets" or "use FastAsyncWorldEdit" in the setup tour wrote the answer into the wrong part of config.yml, so the tour said it was on while the plugin carried on as if it were off. Both are written to the right place now, and if the tour already put one in the wrong place on your server it is moved across for you at startup.
  • Mob plugins that start after this one are now noticed.** Whether MythicMobs, EliteMobs, LevelledMobs and the rest were installed was decided once and never looked at again, so on servers where those plugins happen to start later, chambers set to use them quietly spawned ordinary mobs until the next restart.
  • MythicCrucible items in loot tables work with current MythicMobs.** Mythic renamed the method that hands over the finished item, so a Crucible item in a loot table never appeared and the console logged a failure each time it was rolled. Both the old and the new name are accepted now, so any Mythic version works.
  • Custom loot items from other plugins work on more setups.** Items from Nexo, ItemsAdder, Oraxen, CraftEngine and MythicCrucible were fetched in a way Java refuses for some of those plugins' internal classes, in which case the item silently never appeared in the loot.
  • A custom mob that fails to spawn no longer breaks the wave.** Chambers set to use MythicMobs, EliteMobs and the like swap each mob the spawner produces for one of theirs. The ordinary mob was taken away first, so if the other plugin could not spawn its mob (a renamed mob id, or an update that moved its API) the wave was left a mob short, the spawner never finished, the chamber never cleared and no key dropped. The replacement is spawned first now, and the ordinary mob is only removed once it is there.
  • Land-claim protection works again on Residence, Lands and GriefPrevention.** The part that stops a claim being made over a chamber reads those plugins through their public interfaces, and the way it looked up their methods was refused by Java every time, quietly. It could therefore never block anything. It now reads them properly, and if one of those plugins changes its API in future, the console says so once instead of leaving the shield silently off.
  • A hopper can no longer collect loot that is being held for someone.** Vault loot and trial keys dropped on the ground are held for the player who earned them for a short while, but only against other players picking them up by hand. A hopper placed under the drop took them anyway, and so could a mob. Both are now refused for as long as the drop is held.
  • A generated dungeon's doorways stay open after it resets.** The doorways between rooms were opened as a separate step after the rooms were built, while the snapshot that every later reset restores was being taken at the same moment. When the snapshot won that race it recorded the doorways still walled up, and the first reset sealed the dungeon. Doorways are now open from the moment the rooms are placed. Dungeons built before this update: run /trial snapshot update <name> once to re-save them as they stand.
  • A chamber too big to measure in one search now says so.** Finding a player-built or datapack chamber by scanning its blocks stops after a set number of blocks. It used to register whatever it had reached by then without a word, so part of the chamber was left out and only that part ever reset. The console now tells you, and points at /trial scan add <chamber> to take in the rest. The limit is the new discovery.max-scan-blocks setting. Ordinary generated chambers are measured from Minecraft's own structure bounds and were never affected.
  • Placeholders no longer hammer the database.** Scoreboard plugins ask for a placeholder many times a second per player. Each ask that found stale data started its own database lookup, even while an earlier one for the same player was still running, so a busy server with a slow database could tie up every database connection. One lookup per player at a time now, and the leaderboard numbers can no longer get stuck on stale values.
  • A chamber's display name can no longer carry a clickable link into server announcements.** Reset announcements go to everyone and are styled as they are sent, so a display name written with a click or hover tag turned into a button in front of every player, running a command as whoever clicked it. Display names are cleaned when set and when shown, so names saved earlier are covered too. Colours and bold are unaffected.
  • The menu now checks permissions the way the documentation always said it did.** btc.admin.menu is meant to let someone open the menu, with each screen still asking for the permission behind it. In practice nothing inside the menu checked, so anyone who could open it could force resets, empty vault cooldowns, edit loot tables, change container loot and change your global and protection settings, whatever else you had given them. Each of those screens and buttons now asks for the same permission its command asks for, and says so plainly when someone does not have it. Nothing changes for operators or anyone holding btc.admin.*.
  • Changing how often a chamber resets now takes effect straight away.** The new time was saved, but the reset that had already been lined up under the old time still went ahead, warnings and all. Going from two days to one hour looked like it had done nothing until the chamber had reset once more, and setting the interval to 0 to turn resets off let one more reset through.
  • Less work per tick on servers with a lot of chambers.** Every check of "is this spot inside a chamber" went through the whole list of chambers, and some of the events that ask fire constantly, such as flowing water. The plugin now keeps track of the one area per world that holds all of its chambers and answers anywhere outside it immediately.
  • Vault clicks no longer read the whole vault table.** Looking a vault up by where it is, and looking up who has claimed a shared vault, had no index to work from, so both read every row. Two indexes are added automatically the next time the server starts, existing databases included. Nothing to do on your end.
  • A chamber can no longer be given a name its save file cannot use.** A chamber's name is also the name of its snapshot file, so a name with a slash, a dot or a space in it meant the snapshot quietly never saved and the chamber never reset properly. New chambers must use letters, numbers, - and _ (up to 32 characters), with a message saying so if they do not, and you can still give the chamber any name you like for announcements with /trial rename. Chambers registered earlier with an unusable name are named in the console once at startup.
  • Items could be duplicated out of a per-player container on a busy server.** Closing your copy of a chamber container saves it in the background, and opening it again read straight from the database. If the save had not finished, the second open handed back what was in there before you closed it, so anything you had taken out existed twice. Reading and saving a player's copies now wait for each other.
  • Loot is no longer lost when you disconnect while a vault is opening.** The vault counted as opened for you, but the reward went nowhere, and it stayed that way until the chamber reset. It is now dropped at the vault and held for you the same way vault drops normally are.
  • Staff can take decorations out of a chamber again.** btc.bypass.protection did not work on paintings, item frames, armour stands or cushions: whether it was honoured depended on which of two internal handlers the server happened to run first, and usually it was the one that blocks everyone. A WorldGuard region granting build rights was ignored the same way. Both now go through one check.
  • Arriving by portal counts as teleporting in.** With protection.prevent-teleport-into-chamber turned on, a nether or end portal whose far end sits inside a chamber still dropped players straight in.
  • Glowing spawner outlines now use the colour you set.** spawner-waves.glow-color-normal and glow-color-ominous had no effect: every outline came out white whatever you put there. Minecraft only draws an outline in one of its own sixteen colours, so your colour is matched to the closest of those, which is why the shipped yellow and purple look right without you changing anything.
  • Container protection covers everything that holds items.** With protection.prevent-container-access turned on, chests and barrels were protected but shelves, lecterns, jukeboxes, chiseled bookshelves and decorated pots were not, so anyone could still empty those inside a chamber. Vault loot is unaffected, as always.
  • Resets no longer warn that a snapshot "covers a smaller region than the chamber bounds".** Snapshots do not store air, so any chamber with open space along an edge (almost every chamber) looked like its snapshot had fallen behind, and the console asked you to take a new one on every single reset. Snapshots now record the area they were taken from, so the warning only appears when the chamber really has grown since. Snapshots taken before this update keep working; take a new one when convenient and the reset will also tidy up blocks players added in open space near the chamber's edge, which it could not reach before.
### Note
  • This update adds a new message.** The plugin never overwrites your existing messages.yml, so until you add it you may see <missing: exit-wrong-world> if someone tries to set a chamber exit from the wrong world. To get it: stop the server, rename plugins/BetterTrialChambers/messages.yml to messages.yml.bak, start the server so a fresh file is made, then copy any translations back over from the .bak. The console also reminds you at startup whenever messages are missing.
[2.2.0] Better Trial Chambers 2.2.0 by darkstarworks on Oct 15, 2026
Download
## [2.2.0] - 2026-09-17
### Added
  • Minecraft 26.3 support, as its own download.** This is the -mc263 jar; keep using -mc26 on 26.0 to 26.2 and the plain jar on 1.21.x. Each download now follows its own updates, so a 26.3 server is never offered a jar built for an older Minecraft.
  • Cushions inside a chamber are protected like any other decoration.** 26.3 added cushions, and picking one up is not the same action as taking a painting off a wall, so they needed watching separately. A cushion standing in a protected chamber can no longer be taken, blown up or knocked out by a mob, and btc.bypass.protection still lets staff move one.

### Removed
  • The update.allow-hot-reload setting and /trial update apply.** Installing an update without a restart could never work for this plugin: it ships the SQLite database driver, which cannot be loaded a second time while the server is running, so the update was always refused. Updates install on the next restart as before. If the line is still in your config.yml it simply does nothing, and you can delete it.

### Fixed
  • The menu's reload button now needs the reload permission.** /trial reload has always needed btc.admin.reload, but the reload button on the main menu worked for anyone who could open the menu.
  • All loot tables can be reached from the menu.** The loot table list only showed the first 36 tables and had no next page, so on a server with more tables the rest could not be opened. The list now has page buttons.
  • Chambers with automatic resets turned off say so.** The chamber list and the chamber's own page showed the next reset as "due now" for a chamber whose reset time is set to 0. They now show "Disabled".
  • A mistyped number in config.yml falls back to the right value.** When a setting wasn't a number, the startup check put in a replacement that didn't match the plugin's normal default for eight settings: vault cooldowns became 24 and 48 hours instead of 0 (locked until the chamber resets), trial spawner rest times became 30 minutes instead of Minecraft's own, and four chamber discovery settings got outdated numbers. A spawner rest time below the allowed range, such as -5, also turned into 0 (no rest at all); it now goes back to leaving it to Minecraft. The console messages say plainly what was wrong and what is used instead.
  • Editing a chamber's loot no longer wipes the server's default loot.** A chamber without a loot table of its own opened the loot editor on the server-wide default table. That table comes split into groups the editor page didn't show, so the page looked empty, and pressing Save replaced the entire default table with whatever was on it. Every chamber using the default lost its loot. A chamber now gets its own copy of the default the first time you edit its loot, and the default is left alone.
  • A chamber's exit has to be set in the chamber's own world.** Setting the exit while standing in a different world (for example the Nether) saved only the coordinates, so players leaving the chamber on a reset were sent to that spot in the chamber's world instead. The menu button and /trial setexit now refuse and tell you to go to the chamber's world first.
  • Two menu switches no longer show the wrong starting state.** "Luck effect" and container protection showed as on when the setting was missing from config.yml, while the plugin treated it as off.
  • Update checks look in the right place and offer the right download.** The update checker was still asking Modrinth for the plugin's old name, which Modrinth no longer knows, so every check fell back to GitHub. GitHub then offered whichever jar happened to be listed first in the release, which could be the download built for a different Minecraft version. Checks now find the plugin on Modrinth, and GitHub only ever offers the jar made for your server.
  • Chambers and dungeon rooms saved by TrialChamberPro load again.** Upgrading copies your old plugins/TrialChamberPro/ folder across, but chambers snapshotted and dungeon rooms saved under the old name could not be read. Those chambers failed to reset and those rooms were missing from dungeon generation. They load normally now, with nothing to do on your end.
  • Loot items that don't stack far now give the full amount.** Items added through the loot editor were cut down to one stack, so an item set to give 2 to 3 totems always gave 1, and 32 ender pearls gave 16. Items written by hand in loot.yml went wrong the other way and arrived as oversized stacks. Both now hand out the amount rolled, split into normal stacks.
  • Tab completion matches what each command allows.** Staff who had permission to reset chambers, reset vaults or give keys, without the menu permission, got no suggestions for those commands. Chamber and loot table names with capital letters stopped being suggested as soon as you typed. Players who cannot use a command no longer see names of presets, schematics, rooms or loot tables through its suggestions.
  • Nobody gets left stuck watching after a restart or a reload.** Spectating a chamber after dying put players in the spectator view, and two things could leave them there: reloading the plugin (the change back was asked for a moment too late, when the plugin was already gone), and rejoining a server that was still starting up. Both are handled now, and anyone already stuck is put back the moment they next join.
  • Statistics no longer go missing when the database stumbles.** Two small ways counts could be lost: setting up a player's stats row for the first time could wipe something recorded in the same moment back to zero, and if a save of time spent in chambers failed, everyone's last few minutes were dropped rather than counted again on the next save. Failures now say what happened in plain words instead of printing an error.
  • Two answers in /trial setup did nothing.** Turning on "ask me before a chamber resets" or "use FastAsyncWorldEdit" in the setup tour wrote the answer into the wrong part of config.yml, so the tour said it was on while the plugin carried on as if it were off. Both are written to the right place now, and if the tour already put one in the wrong place on your server it is moved across for you at startup.
  • Mob plugins that start after this one are now noticed.** Whether MythicMobs, EliteMobs, LevelledMobs and the rest were installed was decided once and never looked at again, so on servers where those plugins happen to start later, chambers set to use them quietly spawned ordinary mobs until the next restart.
  • MythicCrucible items in loot tables work with current MythicMobs.** Mythic renamed the method that hands over the finished item, so a Crucible item in a loot table never appeared and the console logged a failure each time it was rolled. Both the old and the new name are accepted now, so any Mythic version works.
  • Custom loot items from other plugins work on more setups.** Items from Nexo, ItemsAdder, Oraxen, CraftEngine and MythicCrucible were fetched in a way Java refuses for some of those plugins' internal classes, in which case the item silently never appeared in the loot.
  • A custom mob that fails to spawn no longer breaks the wave.** Chambers set to use MythicMobs, EliteMobs and the like swap each mob the spawner produces for one of theirs. The ordinary mob was taken away first, so if the other plugin could not spawn its mob (a renamed mob id, or an update that moved its API) the wave was left a mob short, the spawner never finished, the chamber never cleared and no key dropped. The replacement is spawned first now, and the ordinary mob is only removed once it is there.
  • Land-claim protection works again on Residence, Lands and GriefPrevention.** The part that stops a claim being made over a chamber reads those plugins through their public interfaces, and the way it looked up their methods was refused by Java every time, quietly. It could therefore never block anything. It now reads them properly, and if one of those plugins changes its API in future, the console says so once instead of leaving the shield silently off.
  • A hopper can no longer collect loot that is being held for someone.** Vault loot and trial keys dropped on the ground are held for the player who earned them for a short while, but only against other players picking them up by hand. A hopper placed under the drop took them anyway, and so could a mob. Both are now refused for as long as the drop is held.
  • A generated dungeon's doorways stay open after it resets.** The doorways between rooms were opened as a separate step after the rooms were built, while the snapshot that every later reset restores was being taken at the same moment. When the snapshot won that race it recorded the doorways still walled up, and the first reset sealed the dungeon. Doorways are now open from the moment the rooms are placed. Dungeons built before this update: run /trial snapshot update <name> once to re-save them as they stand.
  • A chamber too big to measure in one search now says so.** Finding a player-built or datapack chamber by scanning its blocks stops after a set number of blocks. It used to register whatever it had reached by then without a word, so part of the chamber was left out and only that part ever reset. The console now tells you, and points at /trial scan add <chamber> to take in the rest. The limit is the new discovery.max-scan-blocks setting. Ordinary generated chambers are measured from Minecraft's own structure bounds and were never affected.
  • Placeholders no longer hammer the database.** Scoreboard plugins ask for a placeholder many times a second per player. Each ask that found stale data started its own database lookup, even while an earlier one for the same player was still running, so a busy server with a slow database could tie up every database connection. One lookup per player at a time now, and the leaderboard numbers can no longer get stuck on stale values.
  • A chamber's display name can no longer carry a clickable link into server announcements.** Reset announcements go to everyone and are styled as they are sent, so a display name written with a click or hover tag turned into a button in front of every player, running a command as whoever clicked it. Display names are cleaned when set and when shown, so names saved earlier are covered too. Colours and bold are unaffected.
  • The menu now checks permissions the way the documentation always said it did.** btc.admin.menu is meant to let someone open the menu, with each screen still asking for the permission behind it. In practice nothing inside the menu checked, so anyone who could open it could force resets, empty vault cooldowns, edit loot tables, change container loot and change your global and protection settings, whatever else you had given them. Each of those screens and buttons now asks for the same permission its command asks for, and says so plainly when someone does not have it. Nothing changes for operators or anyone holding btc.admin.*.
  • Changing how often a chamber resets now takes effect straight away.** The new time was saved, but the reset that had already been lined up under the old time still went ahead, warnings and all. Going from two days to one hour looked like it had done nothing until the chamber had reset once more, and setting the interval to 0 to turn resets off let one more reset through.
  • Less work per tick on servers with a lot of chambers.** Every check of "is this spot inside a chamber" went through the whole list of chambers, and some of the events that ask fire constantly, such as flowing water. The plugin now keeps track of the one area per world that holds all of its chambers and answers anywhere outside it immediately.
  • Vault clicks no longer read the whole vault table.** Looking a vault up by where it is, and looking up who has claimed a shared vault, had no index to work from, so both read every row. Two indexes are added automatically the next time the server starts, existing databases included. Nothing to do on your end.
  • A chamber can no longer be given a name its save file cannot use.** A chamber's name is also the name of its snapshot file, so a name with a slash, a dot or a space in it meant the snapshot quietly never saved and the chamber never reset properly. New chambers must use letters, numbers, - and _ (up to 32 characters), with a message saying so if they do not, and you can still give the chamber any name you like for announcements with /trial rename. Chambers registered earlier with an unusable name are named in the console once at startup.
  • Items could be duplicated out of a per-player container on a busy server.** Closing your copy of a chamber container saves it in the background, and opening it again read straight from the database. If the save had not finished, the second open handed back what was in there before you closed it, so anything you had taken out existed twice. Reading and saving a player's copies now wait for each other.
  • Loot is no longer lost when you disconnect while a vault is opening.** The vault counted as opened for you, but the reward went nowhere, and it stayed that way until the chamber reset. It is now dropped at the vault and held for you the same way vault drops normally are.
  • Staff can take decorations out of a chamber again.** btc.bypass.protection did not work on paintings, item frames, armour stands or cushions: whether it was honoured depended on which of two internal handlers the server happened to run first, and usually it was the one that blocks everyone. A WorldGuard region granting build rights was ignored the same way. Both now go through one check.
  • Arriving by portal counts as teleporting in.** With protection.prevent-teleport-into-chamber turned on, a nether or end portal whose far end sits inside a chamber still dropped players straight in.
  • Glowing spawner outlines now use the colour you set.** spawner-waves.glow-color-normal and glow-color-ominous had no effect: every outline came out white whatever you put there. Minecraft only draws an outline in one of its own sixteen colours, so your colour is matched to the closest of those, which is why the shipped yellow and purple look right without you changing anything.
  • Container protection covers everything that holds items.** With protection.prevent-container-access turned on, chests and barrels were protected but shelves, lecterns, jukeboxes, chiseled bookshelves and decorated pots were not, so anyone could still empty those inside a chamber. Vault loot is unaffected, as always.
  • Resets no longer warn that a snapshot "covers a smaller region than the chamber bounds".** Snapshots do not store air, so any chamber with open space along an edge (almost every chamber) looked like its snapshot had fallen behind, and the console asked you to take a new one on every single reset. Snapshots now record the area they were taken from, so the warning only appears when the chamber really has grown since. Snapshots taken before this update keep working; take a new one when convenient and the reset will also tidy up blocks players added in open space near the chamber's edge, which it could not reach before.
### Note
  • This update adds a new message.** The plugin never overwrites your existing messages.yml, so until you add it you may see <missing: exit-wrong-world> if someone tries to set a chamber exit from the wrong world. To get it: stop the server, rename plugins/BetterTrialChambers/messages.yml to messages.yml.bak, start the server so a fresh file is made, then copy any translations back over from the .bak. The console also reminds you at startup whenever messages are missing.
## [2.1.0] - 2026-07-31
### Added
  • Limit how often a player can win a specific item.** Every loot item now has a "redeemable" setting with three choices: **Every reset** (the old behaviour — winnable again after each reset), **Once per chamber** (each player wins it only once from that chamber, even after it resets), or **Once ever** (each player wins it only once, ever, anywhere on the server). Once a player has won a capped item it quietly drops out of their own rolls and the other loot fills the gap — everyone else is unaffected. Perfect for making armour trims drop without letting them be farmed by resetting the same chamber. Set it in-game on an item's amount page with the new **"How often can a player get this?"** button, or add a redeemable: once | per-chamber | per-reset line in loot.yml. Existing loot is unchanged — the default matches how loot has always worked.

### Note
  • This update adds new message keys.** The plugin never overwrites your existing messages.yml, so after updating you may see <missing: ...> text on the new loot button until you refresh the file. To get the new lines: stop the server, rename plugins/BetterTrialChambers/messages.yml to messages.yml.bak, start the server (a fresh file is generated), then copy any translations back over from the .bak. The plugin also prints this reminder in the console on startup whenever keys are missing.
[2.1.0] Better Trial Chambers 2.1.0 by darkstarworks on Oct 15, 2026
Download
## [2.1.0] - 2026-07-31
### Added
  • Limit how often a player can win a specific item.** Every loot item now has a "redeemable" setting with three choices: **Every reset** (the old behaviour — winnable again after each reset), **Once per chamber** (each player wins it only once from that chamber, even after it resets), or **Once ever** (each player wins it only once, ever, anywhere on the server). Once a player has won a capped item it quietly drops out of their own rolls and the other loot fills the gap — everyone else is unaffected. Perfect for making armour trims drop without letting them be farmed by resetting the same chamber. Set it in-game on an item's amount page with the new **"How often can a player get this?"** button, or add a redeemable: once | per-chamber | per-reset line in loot.yml. Existing loot is unchanged — the default matches how loot has always worked.

### Note
  • This update adds new message keys.** The plugin never overwrites your existing messages.yml, so after updating you may see <missing: ...> text on the new loot button until you refresh the file. To get the new lines: stop the server, rename plugins/BetterTrialChambers/messages.yml to messages.yml.bak, start the server (a fresh file is generated), then copy any translations back over from the .bak. The plugin also prints this reminder in the console on startup whenever keys are missing.
This didn't need a version bump, because -mc26 is not affected by this update.. nevertheless;

## [2.0.12] - 2026-07-31
### Fixed
  • Building dungeon rooms works again on Minecraft 1.21 to 1.21.4.** Saving a room that contained a jigsaw block, or importing one from a structure file, failed outright on those versions — the way the plugin asked which way a jigsaw block faces only worked on 1.21.5 and newer. It now asks in a way that works on every supported version, so doorways are picked up correctly everywhere.
## [2.0.12] - 2026-07-31
### Fixed
  • Building dungeon rooms works again on Minecraft 1.21 to 1.21.4.** Saving a room that contained a jigsaw block, or importing one from a structure file, failed outright on those versions — the way the plugin asked which way a jigsaw block faces only worked on 1.21.5 and newer. It now asks in a way that works on every supported version, so doorways are picked up correctly everywhere.
## [2.0.11] - 2026-07-26
### Fixed
  • Memory no longer stays high after a chamber resets.** Putting a chamber's blocks back has to pull that whole part of the map into memory, and the server kept it there afterwards even when nobody was anywhere near it — so on a server with a lot of chambers, memory climbed a step with every reset and never came back down. The plugin now tells the server it has finished with that area once the reset is complete. (This is the same fix 2.0.9 made for chamber discovery, now applied to resets as well. Areas players are actually in are never touched.)
  • Resets no longer flood the console.** A reset used to print a progress line for every batch of blocks it placed — on a very large chamber that meant well over a thousand near-identical lines scrolling past, which looked for all the world like the reset was stuck repeating itself. Progress is now reported at every 10%, so any reset is about nine lines however big the chamber is. If you want to check a reset really is progressing, those lines now count upwards in clear steps.
  • Reset progress could stop being reported at all.** The old progress lines only appeared when a batch happened to finish on an exact multiple of 1000 blocks. That held at the default setting, but if you had changed global.blocks-per-tick the console could go almost completely quiet during a reset, leaving no way to tell whether anything was happening.
## [2.0.11] - 2026-07-26
### Fixed
  • Memory no longer stays high after a chamber resets.** Putting a chamber's blocks back has to pull that whole part of the map into memory, and the server kept it there afterwards even when nobody was anywhere near it — so on a server with a lot of chambers, memory climbed a step with every reset and never came back down. The plugin now tells the server it has finished with that area once the reset is complete. (This is the same fix 2.0.9 made for chamber discovery, now applied to resets as well. Areas players are actually in are never touched.)
  • Resets no longer flood the console.** A reset used to print a progress line for every batch of blocks it placed — on a very large chamber that meant well over a thousand near-identical lines scrolling past, which looked for all the world like the reset was stuck repeating itself. Progress is now reported at every 10%, so any reset is about nine lines however big the chamber is. If you want to check a reset really is progressing, those lines now count upwards in clear steps.
  • Reset progress could stop being reported at all.** The old progress lines only appeared when a batch happened to finish on an exact multiple of 1000 blocks. That held at the default setting, but if you had changed global.blocks-per-tick the console could go almost completely quiet during a reset, leaving no way to tell whether anything was happening.
## [2.0.10] - 2026-07-26
### Fixed
  • Memory built up every time the plugin was reloaded.** If you reload plugins with a plugin manager (PlugManX and similar) instead of restarting the server, every reload left the previous copy of BetterTrialChambers sitting in memory for as long as the server kept running — so memory crept up step by step and never came back down. Two things were holding on to it: PlaceholderAPI kept the plugin's placeholders after it had shut down, and any menu a player still had open kept it alive as well. Both are now handed back properly when the plugin stops. Servers that restart rather than reload were never affected by this.
  • Menus now close when the plugin shuts down.** A menu left open through a reload stopped responding to clicks entirely, which looked like it had frozen. Menus now close themselves on shutdown, and anything you had put into a loot deposit chest at that moment is handed straight back to you instead of being left in a menu that no longer works.
## [2.0.10] - 2026-07-26
### Fixed
  • Memory built up every time the plugin was reloaded.** If you reload plugins with a plugin manager (PlugManX and similar) instead of restarting the server, every reload left the previous copy of BetterTrialChambers sitting in memory for as long as the server kept running — so memory crept up step by step and never came back down. Two things were holding on to it: PlaceholderAPI kept the plugin's placeholders after it had shut down, and any menu a player still had open kept it alive as well. Both are now handed back properly when the plugin stops. Servers that restart rather than reload were never affected by this.
  • Menus now close when the plugin shuts down.** A menu left open through a reload stopped responding to clicks entirely, which looked like it had frozen. Menus now close themselves on shutdown, and anything you had put into a loot deposit chest at that moment is handed straight back to you instead of being left in a menu that no longer works.
## [2.0.9] - 2026-07-24
### Fixed
  • One physical chamber could register as several chambers.** Some datapacks build one big trial chamber out of several of the game's chamber structures placed right next to each other. Each piece used to register as its own chamber — same rooms, several reset timers — and those resets would overwrite each other's shared walls. A newly-found structure that sits within a few blocks of an already-registered chamber now grows that chamber instead of creating a new one. The distance is the new discovery.structure-merge-distance-blocks setting (16 blocks out of the box; raise it if your datapack leaves bigger gaps between pieces). If you already have duplicates: remove them with /trial delete <name> and walk through the chamber once — it re-registers as a single chamber.
  • Memory no longer stays high after a chamber is discovered.** Registering a chamber has to read every block in it, which pulls all of that part of the map into memory — and the server kept it there indefinitely when no player was nearby. On small servers this looked like a memory leak: each discovered chamber pushed memory up a step and it never came back down. The plugin now tells the server it's finished with that part of the map as soon as registration completes, so the memory is freed shortly after. (Areas players are actually in are never touched.)
  • Creating a snapshot of a very large chamber could crash servers with little memory.** Snapshots used to be assembled entirely in memory before being written to disk — for a multi-million-block datapack chamber that was several copies of the whole chamber at once, enough to take down a small server. Snapshots are now written straight to disk piece by piece while the chamber is being read, so the memory needed no longer depends on how big the chamber is. Chamber resets read snapshots back the same way, piece by piece.

### Changed
  • Existing snapshot files upgrade themselves.** The first reset after this update converts each chamber's snapshot file to the new format (you'll see one Migrated legacy snapshot … line per chamber in the console) — nothing to do on your end, and the new files are smaller on disk too.
[2.0.9] Better Trial Chambers 2.0.9 by darkstarworks on Oct 15, 2026
Download
## [2.0.9] - 2026-07-24
### Fixed
  • One physical chamber could register as several chambers.** Some datapacks build one big trial chamber out of several of the game's chamber structures placed right next to each other. Each piece used to register as its own chamber — same rooms, several reset timers — and those resets would overwrite each other's shared walls. A newly-found structure that sits within a few blocks of an already-registered chamber now grows that chamber instead of creating a new one. The distance is the new discovery.structure-merge-distance-blocks setting (16 blocks out of the box; raise it if your datapack leaves bigger gaps between pieces). If you already have duplicates: remove them with /trial delete <name> and walk through the chamber once — it re-registers as a single chamber.
  • Memory no longer stays high after a chamber is discovered.** Registering a chamber has to read every block in it, which pulls all of that part of the map into memory — and the server kept it there indefinitely when no player was nearby. On small servers this looked like a memory leak: each discovered chamber pushed memory up a step and it never came back down. The plugin now tells the server it's finished with that part of the map as soon as registration completes, so the memory is freed shortly after. (Areas players are actually in are never touched.)
  • Creating a snapshot of a very large chamber could crash servers with little memory.** Snapshots used to be assembled entirely in memory before being written to disk — for a multi-million-block datapack chamber that was several copies of the whole chamber at once, enough to take down a small server. Snapshots are now written straight to disk piece by piece while the chamber is being read, so the memory needed no longer depends on how big the chamber is. Chamber resets read snapshots back the same way, piece by piece.

### Changed
  • Existing snapshot files upgrade themselves.** The first reset after this update converts each chamber's snapshot file to the new format (you'll see one Migrated legacy snapshot … line per chamber in the console) — nothing to do on your end, and the new files are smaller on disk too.
## [2.0.8] - 2026-07-21
### Added
  • Shared vaults: one reward per vault for the whole server.** A new vaults.loot-mode setting in config.yml decides who gets the loot from a vault. **PER_PLAYER** (the default, and how the plugin has always behaved) gives every player who turns up their own reward from the same vault. The new **SHARED** means whoever opens a vault takes it, and it stays shut for everybody else until the chamber resets — one vault, one reward, first come first served, with your custom loot tables still applying. Players who arrive too late get a message naming whoever got there first, so it doesn't look broken. **VANILLA** leaves vaults entirely to Minecraft. You can also switch modes from the settings menu (/trial menu → Settings) or during /trial setup.
  • /trial vault unlockall <chamber|all>** — opens every vault in a chamber up again for everyone, without waiting for a reset. Mainly needed after switching to VANILLA mode (see below).
  • reset.spawner-cooldown-overrides-presets** — set this to true to force every trial spawner on the server, presets included, onto your server-wide rest time. Off by default, so presets keep their own times as before.

### Fixed
  • The plugin failed to load at all on recent Paper builds.** The jar contained three identical copies of one internal file (a side effect of the FastStats change in 2.0.7), and Paper's plugin remapper refuses to load any jar with duplicated entries — so BetterTrialChambers silently never appeared in /plugins, with nothing in the console pointing at it. If 2.0.7 seemed to do nothing at all on your server, this was why.
  • MySQL is now actually included.** config.yml has offered type: MYSQL since the very first release, but the piece that talks to MySQL was never shipped with the plugin — it only worked because Paper happens to bundle a copy of its own, which is the server's choice and not something to rely on. It's now built in, so MySQL works out of the box with nothing extra to install.
  • Admins testing vaults no longer lock themselves out of them.** Opening a vault with the btc.bypass.cooldown permission — which every OP has — used to still record you as having opened it, in Minecraft's own records as well as the plugin's. A few minutes of testing could therefore quietly shut those vaults for you under plain Minecraft, and in the new shared mode it would have claimed them for the entire server. Bypassing players now leave no trace on a vault at all.

### Changed
  • vaults.per-player-loot has been replaced by vaults.loot-mode.** The old setting is still read when loot-mode is missing, so existing setups keep working untouched — true behaves like PER_PLAYER and false like VANILLA. Its name was the problem: turning it off sounded like it would give you *shared* loot, when it actually handed vaults back to plain Minecraft, which is still one open **per player** and never shared. If shared loot is what you wanted, that's now loot-mode: SHARED.
  • Switching vaults back to plain Minecraft now warns you, and tells you how to finish the job.** Minecraft keeps its own record of who opened each vault, so after such a switch every player who had already opened one found it shut — no loot, and it didn't even take their key, which looked exactly like the plugin had broken vaults. The plugin now flags this when you make the change and points you at /trial vault unlockall all to clear those records.
  • target-cooldown-length in spawner_presets.yml is now optional.** Leave the line out and spawners from that preset follow your server-wide rest time like any ordinary spawner — which is usually what you want, since you then set the time once in config.yml. Presets that *do* state a time keep winning over the global setting, as before; that rule was never written down anywhere, which is why the global setting looked like it was being ignored. It is now explained in config.yml, in spawner_presets.yml and in the documentation.
  • The download is a fifth smaller** — 12 MB down to 9.5 MB, even with MySQL support added. The database engine used to bundle a copy for every processor type it supports, including Android, FreeBSD, 32-bit machines and mainframes. It now ships only what a Minecraft server actually runs on: 64-bit Linux, 64-bit ARM Linux (Oracle Cloud, AWS Graviton, 64-bit Raspberry Pi OS), 64-bit Windows for people hosting from their own machine, and Apple Silicon for testing on a Mac.
  • Plainer wording throughout the vault and spawner-rest-time sections of config.yml, and the database section now explains in plain words when you'd pick MySQL over the default.

[2.0.8] Better Trial Chambers 2.0.8 by darkstarworks on Oct 15, 2026
Download
## [2.0.8] - 2026-07-21
### Added
  • Shared vaults: one reward per vault for the whole server.** A new vaults.loot-mode setting in config.yml decides who gets the loot from a vault. **PER_PLAYER** (the default, and how the plugin has always behaved) gives every player who turns up their own reward from the same vault. The new **SHARED** means whoever opens a vault takes it, and it stays shut for everybody else until the chamber resets — one vault, one reward, first come first served, with your custom loot tables still applying. Players who arrive too late get a message naming whoever got there first, so it doesn't look broken. **VANILLA** leaves vaults entirely to Minecraft. You can also switch modes from the settings menu (/trial menu → Settings) or during /trial setup.
  • /trial vault unlockall <chamber|all>** — opens every vault in a chamber up again for everyone, without waiting for a reset. Mainly needed after switching to VANILLA mode (see below).
  • reset.spawner-cooldown-overrides-presets** — set this to true to force every trial spawner on the server, presets included, onto your server-wide rest time. Off by default, so presets keep their own times as before.

### Fixed
  • The plugin failed to load at all on recent Paper builds.** The jar contained three identical copies of one internal file (a side effect of the FastStats change in 2.0.7), and Paper's plugin remapper refuses to load any jar with duplicated entries — so BetterTrialChambers silently never appeared in /plugins, with nothing in the console pointing at it. If 2.0.7 seemed to do nothing at all on your server, this was why.
  • MySQL is now actually included.** config.yml has offered type: MYSQL since the very first release, but the piece that talks to MySQL was never shipped with the plugin — it only worked because Paper happens to bundle a copy of its own, which is the server's choice and not something to rely on. It's now built in, so MySQL works out of the box with nothing extra to install.
  • Admins testing vaults no longer lock themselves out of them.** Opening a vault with the btc.bypass.cooldown permission — which every OP has — used to still record you as having opened it, in Minecraft's own records as well as the plugin's. A few minutes of testing could therefore quietly shut those vaults for you under plain Minecraft, and in the new shared mode it would have claimed them for the entire server. Bypassing players now leave no trace on a vault at all.

### Changed
  • vaults.per-player-loot has been replaced by vaults.loot-mode.** The old setting is still read when loot-mode is missing, so existing setups keep working untouched — true behaves like PER_PLAYER and false like VANILLA. Its name was the problem: turning it off sounded like it would give you *shared* loot, when it actually handed vaults back to plain Minecraft, which is still one open **per player** and never shared. If shared loot is what you wanted, that's now loot-mode: SHARED.
  • Switching vaults back to plain Minecraft now warns you, and tells you how to finish the job.** Minecraft keeps its own record of who opened each vault, so after such a switch every player who had already opened one found it shut — no loot, and it didn't even take their key, which looked exactly like the plugin had broken vaults. The plugin now flags this when you make the change and points you at /trial vault unlockall all to clear those records.
  • target-cooldown-length in spawner_presets.yml is now optional.** Leave the line out and spawners from that preset follow your server-wide rest time like any ordinary spawner — which is usually what you want, since you then set the time once in config.yml. Presets that *do* state a time keep winning over the global setting, as before; that rule was never written down anywhere, which is why the global setting looked like it was being ignored. It is now explained in config.yml, in spawner_presets.yml and in the documentation.
  • The download is a fifth smaller** — 12 MB down to 9.5 MB, even with MySQL support added. The database engine used to bundle a copy for every processor type it supports, including Android, FreeBSD, 32-bit machines and mainframes. It now ships only what a Minecraft server actually runs on: 64-bit Linux, 64-bit ARM Linux (Oracle Cloud, AWS Graviton, 64-bit Raspberry Pi OS), 64-bit Windows for people hosting from their own machine, and Apple Silicon for testing on a Mac.
  • Plainer wording throughout the vault and spawner-rest-time sections of config.yml, and the database section now explains in plain words when you'd pick MySQL over the default.

Better Trial Chambers Icon
Download Better Trial Chambers
Select game version
Select platform