Tags
Creators
Details
All versions
2.2.0
Release
Better Trial Chambers 2.2.0last month 15
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Folia
Paper
Purpur
Changes
[2.2.0] - 2026-09-17
Added
- Minecraft 26.3 support, as its own download. This is the
-mc263jar; keep using-mc26on 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.protectionstill lets staff move one.
Removed
- The
update.allow-hot-reloadsetting 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 yourconfig.ymlit simply does nothing, and you can delete it.
Fixed
- The menu's reload button now needs the reload permission.
/trial reloadhas always neededbtc.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.ymlfalls 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 setexitnow 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.ymlwent 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 setupdid nothing. Turning on "ask me before a chamber resets" or "use FastAsyncWorldEdit" in the setup tour wrote the answer into the wrong part ofconfig.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 newdiscovery.max-scan-blockssetting. 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.menuis 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 holdingbtc.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.protectiondid 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-chamberturned 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-normalandglow-color-ominoushad 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-accessturned 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, renameplugins/BetterTrialChambers/messages.ymltomessages.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.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:ownTWGOH:J3GNoS4u"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:ownTWGOH:J3GNoS4u"
}

