Sueta

Better Trial Chambers

2.4.1-mc263

Repeatable content, personal loot, snapshots, protection, and much more. Easy setup!

·Plugin
  1. 2.4.1-mc263latestBetter Trial Chambers 2.4.1-mc263last week

    [2.4.1] - 2026-10-31

    Added
    - Every chamber gets a name. Once the name pool is used up, names like Copperhold or Galewatch are made up, and every chamber still without a name gets one when the server starts (naming.make-up-names). - A used vault says when it opens again: "It opens again when Copperhold resets in 9d 3h." - Buttons to watch or respawn after dying in a chamber, instead of typing a word in chat.
    Changed
    - Players read the chamber's name in the entry, death, exit and spectate messages instead of its internal name. - `/trial help` only lists the commands each player may use.
    7 downloads
  2. 2.4.1-mc26Better Trial Chambers 2.4.1-mc26last week

    [2.4.1] - 2026-10-31

    Added
    - Every chamber gets a name. Once the name pool is used up, names like Copperhold or Galewatch are made up, and every chamber still without a name gets one when the server starts (naming.make-up-names). - A used vault says when it opens again: "It opens again when Copperhold resets in 9d 3h." - Buttons to watch or respawn after dying in a chamber, instead of typing a word in chat.
    Changed
    - Players read the chamber's name in the entry, death, exit and spectate messages instead of its internal name. - `/trial help` only lists the commands each player may use.
    7 downloads
  3. 2.4.1Better Trial Chambers 2.4.1last week

    [2.4.1] - 2026-10-31

    Added
    - Every chamber gets a name. Once the name pool is used up, names like Copperhold or Galewatch are made up, and every chamber still without a name gets one when the server starts (naming.make-up-names). - A used vault says when it opens again: "It opens again when Copperhold resets in 9d 3h." - Buttons to watch or respawn after dying in a chamber, instead of typing a word in chat.
    Changed
    - Players read the chamber's name in the entry, death, exit and spectate messages instead of its internal name. - `/trial help` only lists the commands each player may use.
    4 downloads
  4. 2.4.0-mc263Better Trial Chambers 2.4.0-mc263last week

    [2.4.0] - 2026-10-31

    Added
    - Each chamber can set its own protection. Open a chamber's settings, then Protection, and turn any protection switch on or off for that chamber alone. Anything a chamber leaves alone follows config.yml. The server-wide protection menu now shows every switch as well.
    Changed
    - Emptying a bucket inside a chamber follows `prevent-block-place`, so turning block placing off lets players place water and lava too. prevent-liquid-flow still stops liquid flowing in from outside.
    Fixed
    - No more chambers found in the temporary worlds that `//regen` builds in WorldEdit and FastAsyncWorldEdit.
    23 downloads
  5. 2.4.0-mc26Better Trial Chambers 2.4.0-mc26last week

    [2.4.0] - 2026-10-31

    Added
    - Each chamber can set its own protection. Open a chamber's settings, then Protection, and turn any protection switch on or off for that chamber alone. Anything a chamber leaves alone follows config.yml. The server-wide protection menu now shows every switch as well.
    Changed
    - Emptying a bucket inside a chamber follows `prevent-block-place`, so turning block placing off lets players place water and lava too. prevent-liquid-flow still stops liquid flowing in from outside.
    Fixed
    - No more chambers found in the temporary worlds that `//regen` builds in WorldEdit and FastAsyncWorldEdit.
    7 downloads
  6. 2.4.0Better Trial Chambers 2.4.0last week

    [2.4.0] - 2026-10-31

    Added
    - Each chamber can set its own protection. Open a chamber's settings, then Protection, and turn any protection switch on or off for that chamber alone. Anything a chamber leaves alone follows config.yml. The server-wide protection menu now shows every switch as well.
    Changed
    - Emptying a bucket inside a chamber follows `prevent-block-place`, so turning block placing off lets players place water and lava too. prevent-liquid-flow still stops liquid flowing in from outside.
    Fixed
    - No more chambers found in the temporary worlds that `//regen` builds in WorldEdit and FastAsyncWorldEdit.
    10 downloads
  7. 2.3.1-mc263Better Trial Chambers 2.3.1-mc2634 weeks ago

    [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.
    261 downloads
  8. 2.3.1-mc26Better Trial Chambers 2.3.1-mc264 weeks ago

    [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.
    118 downloads
  9. 2.3.1Better Trial Chambers 2.3.14 weeks ago

    [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.
    118 downloads
  10. 2.3.0-mc263Better Trial Chambers 2.3.0-mc263Oct 7, 2026

    [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.
    93 downloads
  11. 2.3.0-mc26Better Trial Chambers 2.3.0-mc26Oct 7, 2026

    [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.
    67 downloads
  12. 2.3.0Better Trial Chambers 2.3.0Oct 7, 2026

    [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.
    42 downloads
  13. 2.2.3-mc263Better Trial Chambers 2.2.3-mc263Sep 23, 2026

    [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.
    107 downloads
  14. 2.2.3-mc26Better Trial Chambers 2.2.3-mc26Sep 23, 2026

    [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.
    68 downloads
  15. 2.2.3Better Trial Chambers 2.2.3Sep 23, 2026

    [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.
    38 downloads
  16. 2.2.2-mc263Better Trial Chambers 2.2.2-mc263Sep 23, 2026

    [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.
    10 downloads
  17. 2.2.2-mc26Better Trial Chambers 2.2.2-mc26Sep 23, 2026

    [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.
    5 downloads
  18. 2.2.2Better Trial Chambers 2.2.2Sep 23, 2026

    [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.
    6 downloads
  19. 2.2.1-mc263Better Trial Chambers 2.2.1-mc263Sep 19, 2026

    [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.
    49 downloads
  20. 2.2.1-mc26Better Trial Chambers 2.2.1-mc26Sep 19, 2026

    [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.
    31 downloads
  21. 2.2.1Better Trial Chambers 2.2.1Sep 19, 2026

    [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.
    14 downloads
  22. 2.2.0-mc263Better Trial Chambers 2.2.0-mc263Sep 17, 2026

    [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
    31 downloads
  23. 2.2.0-mc26Better Trial Chambers 2.2.0-mc26Sep 17, 2026

    [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
    29 downloads
  24. 2.2.0Better Trial Chambers 2.2.0Sep 17, 2026

    [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
    16 downloads
  25. 2.1.0-mc26Better Trial Chambers 2.1.0-mc26Jul 31, 2026

    [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.
    245 downloads
  26. 2.1.0Better Trial Chambers 2.1.0Jul 31, 2026

    [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.
    111 downloads
  27. 2.0.12-mc26Better Trial Chambers 2.0.12-mc26Jul 30, 2026
    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.
    28 downloads
  28. 2.0.12Better Trial Chambers 2.0.12Jul 30, 2026

    [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.
    17 downloads
  29. 2.0.11-mc26Better Trial Chambers 2.0.11-mc26Jul 26, 2026

    [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.
    45 downloads
  30. 2.0.11Better Trial Chambers 2.0.11Jul 26, 2026

    [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.
    24 downloads
  31. 2.0.10-mc26Better Trial Chambers 2.0.10-mc26Jul 26, 2026

    [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.
    15 downloads
  32. 2.0.10Better Trial Chambers 2.0.10Jul 26, 2026

    [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.
    12 downloads
  33. 2.0.9-mc26Better Trial Chambers 2.0.9-mc26Jul 24, 2026

    [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.
    23 downloads
  34. 2.0.9Better Trial Chambers 2.0.9Jul 24, 2026

    [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.
    18 downloads
  35. 2.0.8-mc26Better Trial Chambers 2.0.8-mc26Jul 21, 2026

    [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.
    22 downloads
  36. 2.0.8Better Trial Chambers 2.0.8Jul 21, 2026

    [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.
    16 downloads
  37. 2.0.7-mc26Better Trial Chambers 2.0.7-mc26Jul 20, 2026

    [2.0.7] - 2026-07-19

    Changed
    - Anonymous usage metrics now use [FastStats](https://faststats.dev) instead of bStats. The same handful of aggregate numbers are collected as before — which database backend you run, whether auto-discovery is on, glow mode, a rough chamber-count bracket, and which premium add-ons are installed. No player data. metrics.enabled: false in config.yml still switches it off for this plugin, and there's still a server-wide off switch for every plugin that uses it: enabled=false in plugins/faststats/config.properties (the equivalent of the old plugins/bStats/config.yml). - Nothing is sent the first time you start up. FastStats writes its opt-out file on the first run and waits until the next server restart before sending anything, so you get the chance to turn it off first. A new install showing no data for one boot is expected. - BTC no longer writes to plugins/bStats/. If no other plugin on your server uses bStats, that folder can be deleted.
    Added
    - Optional error reporting — off unless you turn it on. Set metrics.error-reporting: true in config.yml and BetterTrialChambers will report its own errors automatically, so bugs get found and fixed without you having to notice and file a report. It stays off by default because sending error reports is a bigger step than anonymous counters, so it should be your choice. When enabled: only this plugin's own errors are sent — other plugins' errors are never captured, even when they happen at the same moment — and before anything leaves your server, IP addresses, file paths containing your username, database credentials and player UUIDs are stripped out and replaced with placeholders. Player names, chat, inventories and world data are never included, and routine shutdown/reload cancellations are filtered out rather than reported as errors. To switch it off across every FastStats plugin at once, set submitErrors=false in plugins/faststats/config.properties.
    15 downloads
  38. 2.0.7Better Trial Chambers 2.0.7Jul 20, 2026

    [2.0.7] - 2026-07-19

    Changed
    - Anonymous usage metrics now use [FastStats](https://faststats.dev) instead of bStats. The same handful of aggregate numbers are collected as before — which database backend you run, whether auto-discovery is on, glow mode, a rough chamber-count bracket, and which premium add-ons are installed. No player data. metrics.enabled: false in config.yml still switches it off for this plugin, and there's still a server-wide off switch for every plugin that uses it: enabled=false in plugins/faststats/config.properties (the equivalent of the old plugins/bStats/config.yml). - Nothing is sent the first time you start up. FastStats writes its opt-out file on the first run and waits until the next server restart before sending anything, so you get the chance to turn it off first. A new install showing no data for one boot is expected. - BTC no longer writes to plugins/bStats/. If no other plugin on your server uses bStats, that folder can be deleted.
    Added
    - Optional error reporting — off unless you turn it on. Set metrics.error-reporting: true in config.yml and BetterTrialChambers will report its own errors automatically, so bugs get found and fixed without you having to notice and file a report. It stays off by default because sending error reports is a bigger step than anonymous counters, so it should be your choice. When enabled: only this plugin's own errors are sent — other plugins' errors are never captured, even when they happen at the same moment — and before anything leaves your server, IP addresses, file paths containing your username, database credentials and player UUIDs are stripped out and replaced with placeholders. Player names, chat, inventories and world data are never included, and routine shutdown/reload cancellations are filtered out rather than reported as errors. To switch it off across every FastStats plugin at once, set submitErrors=false in plugins/faststats/config.properties.
    14 downloads
  39. 2.0.4-mc26Better Trial Chambers 2.0.4-mc26Jul 19, 2026

    [2.0.4] - 2026-07-19

    Changed
    - "The chamber has been reset!" no longer goes to the whole server. It now goes to the players who were actually inside that chamber when it reset. The message never said _which_ chamber it meant, so for everyone else it was an unidentifiable line of chat — and on servers with lots of auto-discovered chambers, resets are deliberately spread out to protect performance, which turned it into a steady trickle of repeated messages for everybody. Set global.reset-complete-audience: server in config.yml to get the old behaviour back (and add {chamber} to the chamber-reset-complete message in messages.yml so it names the chamber). global.reset-complete-alert: false still switches the message off entirely.
    Added
    - Optional permission for the reset message. Set global.reset-complete-permission to any permission node (for example btc.notify.reset) and only players with it will receive the message. Works with either audience setting. Empty by default, meaning no permission is needed.
    18 downloads
  40. 2.0.4Better Trial Chambers 2.0.4Jul 19, 2026

    [2.0.4] - 2026-07-19

    Changed
    - "The chamber has been reset!" no longer goes to the whole server. It now goes to the players who were actually inside that chamber when it reset. The message never said _which_ chamber it meant, so for everyone else it was an unidentifiable line of chat — and on servers with lots of auto-discovered chambers, resets are deliberately spread out to protect performance, which turned it into a steady trickle of repeated messages for everybody. Set global.reset-complete-audience: server in config.yml to get the old behaviour back (and add {chamber} to the chamber-reset-complete message in messages.yml so it names the chamber). global.reset-complete-alert: false still switches the message off entirely.
    Added
    - Optional permission for the reset message. Set global.reset-complete-permission to any permission node (for example btc.notify.reset) and only players with it will receive the message. Works with either audience setting. Empty by default, meaning no permission is needed.
    22 downloads
  41. 2.0.3-mc26Better Trial Chambers 2.0.3-mc26Jul 18, 2026

    [2.0.3] - 2026-07-19

    Fixed
    - Choosing a different loot table for a chamber now actually does something. If you used "Loot Table Overrides" to point a chamber at another table, the chamber's Normal/Ominous Loot buttons carried on showing — and editing — the chamber's own chamber-<name> table instead. So your edits went into a table nothing was using, and the vaults kept handing out whatever the override pointed at. It looked like the plugin had glued a table to the chamber based on its name and refused to let go. Both buttons now follow the override, so what you see on the button is what the vaults actually give out. Nothing changes for chambers without an override.
    Changed
    - The loot buttons now tell you when a chamber is sharing a table. When a chamber has been pointed at another loot table, its Normal/Ominous Loot buttons say so, and warn that other chambers may be using that same table — editing it there changes it for all of them. The "Loot Table Overrides" button also explains in plain words what it does, and that leaving it on (default) gives the chamber its own private loot table.
    14 downloads
  42. 2.0.3Better Trial Chambers 2.0.3Jul 18, 2026

    [2.0.3] - 2026-07-19

    Fixed
    - Choosing a different loot table for a chamber now actually does something. If you used "Loot Table Overrides" to point a chamber at another table, the chamber's Normal/Ominous Loot buttons carried on showing — and editing — the chamber's own chamber-<name> table instead. So your edits went into a table nothing was using, and the vaults kept handing out whatever the override pointed at. It looked like the plugin had glued a table to the chamber based on its name and refused to let go. Both buttons now follow the override, so what you see on the button is what the vaults actually give out. Nothing changes for chambers without an override.
    Changed
    - The loot buttons now tell you when a chamber is sharing a table. When a chamber has been pointed at another loot table, its Normal/Ominous Loot buttons say so, and warn that other chambers may be using that same table — editing it there changes it for all of them. The "Loot Table Overrides" button also explains in plain words what it does, and that leaving it on (default) gives the chamber its own private loot table.
    18 downloads
  43. 2.0.2-mc26Better Trial Chambers 2.0.2-mc26Jul 18, 2026

    [2.0.2] - 2026-07-17

    Added
    - Independent drop-chance loot mode. Loot pools can now roll in one of two modes. The classic weighted mode (default, unchanged) makes a set number of draws per opening and picks one item per draw by relative weight. The new independent mode gives every item its own absolute 0-100% drop chance — each item rolls on its own, chances don't have to add up to 100%, and an optional Max Items cap limits how many drop per opening. Much easier to reason about for large tables (e.g. 100+ items) where balancing relative weights is impractical. Set per table/pool with mode: independent (and optional max-items: N) in loot.yml, or toggle it in the loot editor GUI. Existing tables are untouched and keep behaving exactly as before.
    Changed
    - Loot editor shows the weight number while an item is enabled. Previously the raw weight was only visible after disabling an entry, so tuning weights meant middle-clicking (which toggles the item off) to see the value. Enabled weighted items now show Weight: X (≈Y% per draw) directly, and the weight controls are relabelled to say "weight" (or "% chance" in independent mode). In independent mode each item shows its own drop chance. - Clarified the `vaults.per-player-loot` config option. Its comment now spells out that it's a master switch — when off, the plugin doesn't manage vaults at all and they open with vanilla Minecraft loot, ignoring custom loot tables. (This was the cause of "my custom loot table is ignored" reports where the setting had been turned off.)
    15 downloads
  44. 2.0.2Better Trial Chambers 2.0.2Jul 18, 2026

    [2.0.2] - 2026-07-17

    Added
    - Independent drop-chance loot mode. Loot pools can now roll in one of two modes. The classic weighted mode (default, unchanged) makes a set number of draws per opening and picks one item per draw by relative weight. The new independent mode gives every item its own absolute 0-100% drop chance — each item rolls on its own, chances don't have to add up to 100%, and an optional Max Items cap limits how many drop per opening. Much easier to reason about for large tables (e.g. 100+ items) where balancing relative weights is impractical. Set per table/pool with mode: independent (and optional max-items: N) in loot.yml, or toggle it in the loot editor GUI. Existing tables are untouched and keep behaving exactly as before.
    Changed
    - Loot editor shows the weight number while an item is enabled. Previously the raw weight was only visible after disabling an entry, so tuning weights meant middle-clicking (which toggles the item off) to see the value. Enabled weighted items now show Weight: X (≈Y% per draw) directly, and the weight controls are relabelled to say "weight" (or "% chance" in independent mode). In independent mode each item shows its own drop chance. - Clarified the `vaults.per-player-loot` config option. Its comment now spells out that it's a master switch — when off, the plugin doesn't manage vaults at all and they open with vanilla Minecraft loot, ignoring custom loot tables. (This was the cause of "my custom loot table is ignored" reports where the setting had been turned off.)
    16 downloads
  45. 2.0.1-mc26Better Trial Chambers 2.0.1-mc26Jul 17, 2026

    [2.0.1] - 2026-07-17

    Fixed
    - Loot editor: tables with more than 36 entries are now paginated. The editor only ever rendered the first 36 entries (weighted first, then guaranteed) and silently hid the rest — they stayed in the loot table and kept dropping in-game, but couldn't be viewed or edited from the GUI. When a table overflows one page, Previous/Next arrows now appear in the gap row above the action buttons.
    20 downloads
  46. 2.0.1Better Trial Chambers 2.0.1Jul 17, 2026

    [2.0.1] - 2026-07-17

    Fixed
    - Loot editor: tables with more than 36 entries are now paginated. The editor only ever rendered the first 36 entries (weighted first, then guaranteed) and silently hid the rest — they stayed in the loot table and kept dropping in-game, but couldn't be viewed or edited from the GUI. When a table overflows one page, Previous/Next arrows now appear in the gap row above the action buttons.
    16 downloads
  47. 2.0.0-mc26Better Trial Chambers 2.0.0-mc26Jul 15, 2026

    [2.0.0] - 2026-07-15

    Changed
    - The plugin is now Better Trial Chambers. Same plugin, new name — TrialChamberPro was always 100% free, and the name kept suggesting otherwise. The project now lives at https://github.com/ESMP-FUN/BetterTrialChambers. - Main command is now /trial (aliases: /btc, /bettertrialchambers, /chamber). The old /tcp still works as a legacy alias. - Permissions moved from tcp.* to btc.*. Existing tcp.* grants keep working — each old node is a legacy alias that grants its btc.* counterpart — but update your permission plugin when convenient. - PlaceholderAPI placeholders are now %btc_*%; the old %tcp_*% forms keep resolving. - Internal packages moved to com.esmpfun.bettertrialchambers (plugin/module developers: update imports; the premium modules ship matching updates).
    Added
    - Automatic upgrade from TrialChamberPro. On first start, if plugins/TrialChamberPro/ exists, its config, database, snapshots and dungeon templates are copied to plugins/BetterTrialChambers/ automatically. The old folder is kept as a backup. World data (spawner presets, vault drop ownership) and database tables are untouched and keep working as-is.
    Fixed
    - Spawner presets: `total-mobs`, `simultaneous-mobs`, `total-mobs-added-per-player`, `simultaneous-mobs-added-per-player`, `ticks-between-spawn` and `spawn-range` were silently ignored. These six fields were written at the top level of the item's block_entity_data, but vanilla only reads them from inside the trial spawner configuration compound (normal_config/ominous_config) — and a preset's config is a datapack reference string that can't carry per-field overrides, so they can't be expressed in item NBT at all. Preset spawners therefore always ran with the datapack/vanilla values (6 total mobs, 2 simultaneous, 40-tick spawn interval, 4-block range). SpawnerPresetPlaceListener now applies the overrides to the placed block via Paper's TrialSpawnerConfiguration API, layered on top of the resolved datapack config. Works retroactively for preset items handed out before this fix (the place-time lookup uses the item's preset tag); spawners placed before updating need to be broken and re-placed once. - Spawner presets: `reset.wild-spawner-cooldown-minutes` no longer overrides a preset spawner's `target-cooldown-length`. Preset spawners placed outside a registered chamber count as wild spawners, so when the server-wide wild cooldown was enabled (≥ 0) it silently replaced the cooldown the preset had explicitly configured — both at wave start and at wave completion. Both paths now skip spawners carrying the preset tag; a preset's cooldown is governed solely by its target-cooldown-length. - Spawner presets: chamber resets no longer override a preset spawner's `target-cooldown-length` either. ResetManager applied the per-chamber / reset.spawner-cooldown-minutes cooldown to every trial spawner in the chamber, including preset-sourced ones — the same silent override as the wild-spawner case above. Preset-tagged spawners now keep their configured cooldown length; tracked-player clearing and the one-shot post-reset cooldown clear still apply to them so chamber resets behave normally. - Trial spawners restored into a recreated block entity no longer come back dead. Snapshots only captured ominous / cooldown / player range, so whenever the restore had to recreate the block entity from scratch — the spawner block was destroyed before the reset, or a dungeon room template was stamped into what used to be air — the spawner came back with the vanilla default configuration: empty spawn potentials (permanently inactive) and no preset tag. Snapshots now also capture both spawner configurations (spawn potentials, mob counts, spawn interval/range, reward loot tables) and the preset tag; the restore rebuilds them only when the live block entity has lost its configuration, so surviving spawners keep their full vanilla data (including equipment, which Bukkit's SpawnerEntry can't round-trip). Existing snapshot files keep working — re-create a chamber's snapshot to pick up the richer capture.
    42 downloads
  48. 2.0.0Better Trial Chambers 2.0.0Jul 15, 2026

    [2.0.0] - 2026-07-15

    Changed
    - The plugin is now Better Trial Chambers. Same plugin, new name — TrialChamberPro was always 100% free, and the name kept suggesting otherwise. The project now lives at https://github.com/ESMP-FUN/BetterTrialChambers. - Main command is now /trial (aliases: /btc, /bettertrialchambers, /chamber). The old /tcp still works as a legacy alias. - Permissions moved from tcp.* to btc.*. Existing tcp.* grants keep working — each old node is a legacy alias that grants its btc.* counterpart — but update your permission plugin when convenient. - PlaceholderAPI placeholders are now %btc_*%; the old %tcp_*% forms keep resolving. - Internal packages moved to com.esmpfun.bettertrialchambers (plugin/module developers: update imports; the premium modules ship matching updates).
    Added
    - Automatic upgrade from TrialChamberPro. On first start, if plugins/TrialChamberPro/ exists, its config, database, snapshots and dungeon templates are copied to plugins/BetterTrialChambers/ automatically. The old folder is kept as a backup. World data (spawner presets, vault drop ownership) and database tables are untouched and keep working as-is.
    Fixed
    - Spawner presets: `total-mobs`, `simultaneous-mobs`, `total-mobs-added-per-player`, `simultaneous-mobs-added-per-player`, `ticks-between-spawn` and `spawn-range` were silently ignored. These six fields were written at the top level of the item's block_entity_data, but vanilla only reads them from inside the trial spawner configuration compound (normal_config/ominous_config) — and a preset's config is a datapack reference string that can't carry per-field overrides, so they can't be expressed in item NBT at all. Preset spawners therefore always ran with the datapack/vanilla values (6 total mobs, 2 simultaneous, 40-tick spawn interval, 4-block range). SpawnerPresetPlaceListener now applies the overrides to the placed block via Paper's TrialSpawnerConfiguration API, layered on top of the resolved datapack config. Works retroactively for preset items handed out before this fix (the place-time lookup uses the item's preset tag); spawners placed before updating need to be broken and re-placed once. - Spawner presets: `reset.wild-spawner-cooldown-minutes` no longer overrides a preset spawner's `target-cooldown-length`. Preset spawners placed outside a registered chamber count as wild spawners, so when the server-wide wild cooldown was enabled (≥ 0) it silently replaced the cooldown the preset had explicitly configured — both at wave start and at wave completion. Both paths now skip spawners carrying the preset tag; a preset's cooldown is governed solely by its target-cooldown-length. - Spawner presets: chamber resets no longer override a preset spawner's `target-cooldown-length` either. ResetManager applied the per-chamber / reset.spawner-cooldown-minutes cooldown to every trial spawner in the chamber, including preset-sourced ones — the same silent override as the wild-spawner case above. Preset-tagged spawners now keep their configured cooldown length; tracked-player clearing and the one-shot post-reset cooldown clear still apply to them so chamber resets behave normally. - Trial spawners restored into a recreated block entity no longer come back dead. Snapshots only captured ominous / cooldown / player range, so whenever the restore had to recreate the block entity from scratch — the spawner block was destroyed before the reset, or a dungeon room template was stamped into what used to be air — the spawner came back with the vanilla default configuration: empty spawn potentials (permanently inactive) and no preset tag. Snapshots now also capture both spawner configurations (spawn potentials, mob counts, spawn interval/range, reward loot tables) and the preset tag; the restore rebuilds them only when the live block entity has lost its configuration, so surviving spawners keep their full vanilla data (including equipment, which Bukkit's SpawnerEntry can't round-trip). Existing snapshot files keep working — re-create a chamber's snapshot to pick up the richer capture.
    22 downloads
  49. 1.8.1-mc26TrialChamberPro 1.8.1-mc26Jul 9, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.8.1] - 2026-07-10

    Added
    - World exclusion. New global.excluded-worlds list in config.yml keeps TCP inactive in named worlds — useful when a second overworld-type world has Trial Chambers you want to leave vanilla. In an excluded world, auto-discovery never registers chambers, /tcp generate and /tcp dungeon generate are refused, and wild trial spawners get no boss bars or wave tracking. Chambers registered before a world was excluded keep working; remove them with /tcp delete <name>.
    Changed
    - Updated the bundled PluginPulse updater to v0.8.0 (configurable source order, authenticated private-repo updates, Jenkins update source). [1.8.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    52 downloads
  50. 1.8.1TrialChamberPro 1.8.1Jul 9, 2026

    [1.8.1] - 2026-07-10

    Added
    - World exclusion. New global.excluded-worlds list in config.yml keeps TCP inactive in named worlds — useful when a second overworld-type world has Trial Chambers you want to leave vanilla. In an excluded world, auto-discovery never registers chambers, /tcp generate and /tcp dungeon generate are refused, and wild trial spawners get no boss bars or wave tracking. Chambers registered before a world was excluded keep working; remove them with /tcp delete <name>.
    Changed
    - Updated the bundled PluginPulse updater to v0.8.0 (configurable source order, authenticated private-repo updates, Jenkins update source). [1.8.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    44 downloads
  51. 1.8.0-mc26TrialChamberPro 1.8.0-mc26Jul 5, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.8.0] - 2026-07-05

    Added
    - Built-in updater with one-command installs. The old notify-only update check is replaced by [PluginPulse](https://github.com/darkstarworks/PluginPulse): updates are now checked on Modrinth first (GitHub Releases as fallback), and a new /tcp update command lets admins act on them — check, download (fetches the new jar, verifies its checksum, backs up the current jar, and stages it in the server's update folder so it installs on the next restart), restore (roll back to the previous jar), ignore <version>, and status. Behaviour is controlled by the new update section in config.yml: mode (check-only / notify / download / auto-stage), check-interval-hours, and require-hash. Servers running the -mc26 build automatically follow -mc26 releases. Nothing is ever downloaded in the default notify mode. - Optional no-restart updates. With update.allow-hot-reload: true, /tcp update apply swaps a staged, checksum-verified update in-place — the old version is unloaded, the jar replaced, and the new version enabled live (verified end-to-end on Paper 1.21.7). Refused on Folia and while other plugins depend on TCP; if the new version fails to load, TCP rolls back to the automatic backup. Off by default — restarting remains the recommended way to apply updates. - (if you don't use any of the premium modules, you are safe to use allow-hot-reload: true -> /tcp update apply)
    Changed
    - Update checks are rate-limit friendly: check state persists across restarts in plugins/TrialChamberPro/pluginpulse/, and fleet servers no longer check in lockstep at startup. [1.8.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    47 downloads
  52. 1.8.0TrialChamberPro 1.8.0Jul 5, 2026

    [1.8.0] - 2026-07-05

    Added
    - Built-in updater with one-command installs. The old notify-only update check is replaced by [PluginPulse](https://github.com/darkstarworks/PluginPulse): updates are now checked on Modrinth first (GitHub Releases as fallback), and a new /tcp update command lets admins act on them — check, download (fetches the new jar, verifies its checksum, backs up the current jar, and stages it in the server's update folder so it installs on the next restart), restore (roll back to the previous jar), ignore <version>, and status. Behaviour is controlled by the new update section in config.yml: mode (check-only / notify / download / auto-stage), check-interval-hours, and require-hash. Servers running the -mc26 build automatically follow -mc26 releases. Nothing is ever downloaded in the default notify mode. - Optional no-restart updates. With update.allow-hot-reload: true, /tcp update apply swaps a staged, checksum-verified update in-place — the old version is unloaded, the jar replaced, and the new version enabled live (verified end-to-end on Paper 1.21.7). Refused on Folia and while other plugins depend on TCP; if the new version fails to load, TCP rolls back to the automatic backup. Off by default — restarting remains the recommended way to apply updates. - (if you don't use any of the premium modules, you are safe to use allow-hot-reload: true -> /tcp update apply)
    Changed
    - Update checks are rate-limit friendly: check state persists across restarts in plugins/TrialChamberPro/pluginpulse/, and fleet servers no longer check in lockstep at startup. [1.8.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    43 downloads
  53. 1.7.3-mc26TrialChamberPro 1.7.3-mc26Jul 4, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.7.3] - 2026-07-04

    Fixed
    - Spawner-wave counter can no longer be stalled by a dead entity when a custom-mob provider fails mid-replacement. In both the chamber replace-after-spawn path and the wild-spawner resolver path, a provider that threw after the vanilla mob was removed caused the already-removed entity to be recorded into the wave — the counter then hung until the periodic sweep caught it. A failure after removal now records nothing (the wave undercounts that one spawn and completes normally); only failures before removal fall back to vanilla tracking. [1.7.3]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    33 downloads
  54. 1.7.3TrialChamberPro 1.7.3Jul 4, 2026

    [1.7.3] - 2026-07-04

    Fixed
    - Spawner-wave counter can no longer be stalled by a dead entity when a custom-mob provider fails mid-replacement. In both the chamber replace-after-spawn path and the wild-spawner resolver path, a provider that threw after the vanilla mob was removed caused the already-removed entity to be recorded into the wave — the counter then hung until the periodic sweep caught it. A failure after removal now records nothing (the wave undercounts that one spawn and completes normally); only failures before removal fall back to vanilla tracking. [1.7.3]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    26 downloads
  55. 1.7.2-mc26TrialChamberPro 1.7.2-mc26Jul 3, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.7.2] - 2026-07-03

    Fixed
    - Chamber resets no longer erase decorations. Snapshots only knew how to capture four block types (spawners, vaults, pots, chests) — everything else restored as a blank block, so sign text, player-head skins, banner patterns, lectern books, jukebox discs, chiseled-bookshelf contents, and suspicious-block items were silently wiped on every reset. All of these are now captured and restored faithfully, in chamber snapshots AND in captured/imported dungeon rooms. Re-run /tcp snapshot create <chamber> on decorated chambers to capture them with the new fidelity. - Opening a vault can no longer consume the wrong item. The key was taken from whatever the player was holding at the moment loot was delivered — scroll your hotbar in the split second after clicking and the plugin ate your sword instead of the key. The key is now consumed from the slot that held it at click time (or wherever the key stack actually is), and never from a non-key item. - Logging out — or crashing — while spectating no longer strands you in spectator mode. Quitting mid-spectate now restores your gamemode and position immediately, and a server crash/restart mid-spectate is recovered on your next join (the restore data survives in your player file). - Statistics no longer lose counts on shared MySQL databases. Increments were read-modify-write, so two servers writing at once could drop each other's updates; every counter now increments atomically in the database — groundwork for cross-server networks. - Key-to-reopen can't burn keys on a broken loot table. With reopen-cost-keys of 2+, a missing/typo'd loot table used to take part of the payment and give nothing; the table is now validated before any keys are consumed. - Vault loot ejection (`drop-loot-at-vault`) now drops items on the vault's own region thread — fixes a potential cross-region error on Folia when the opener moved away during the open. - Deleting a chamber now clears its wave-tracking state (active boss bars, clear-cycle progress, spawner caches) instead of leaving stale entries behind. - /tcp generate fallback volume limit aligned with the rest of the plugin (750,000 — was 500,000 in one code path when the config key is absent). - Explosions from outside a chamber can no longer destroy blocks inside it. The explosion filter only protected blocks when the blast center was inside a chamber — a creeper or TNT detonating just outside the wall blew chamber blocks up unprotected. Protection is now checked per affected block, and block-sourced explosions (beds/respawn anchors in the wrong dimension) — which previously bypassed chamber protection entirely — are covered too. - Pausing a chamber now actually stops a reset that's already counting down. A chamber paused mid-countdown still reset when the timer fired, and its "resets in 30 seconds!" warnings kept broadcasting; pause (and deletion) now cancel the scheduled reset, its warnings, and any parked confirmation. - Per-player container copies are saved if the server stops while a player has one open — previously the shutdown could discard the pending save, losing whatever they'd taken out or left in. - Teleporting across a chamber boundary now counts as entering/leaving. Teleports don't fire movement events, so /tp, /home, ender pearls — and the reset eviction itself — left stale "in chamber" tracking (time kept accruing, exit never fired). Logging out inside a chamber and back in also registers the entry immediately now. - Chamber names are no longer suggested in tab-completion to players without admin permission (they became visible to everyone when 1.7.1 opened /tcp for stats/leaderboard). - The post-reset event now reports the real number of restored blocks instead of the chamber's full volume. [1.7.2]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    16 downloads
  56. 1.7.2TrialChamberPro 1.7.2Jul 3, 2026

    [1.7.2] - 2026-07-03

    Fixed
    - Chamber resets no longer erase decorations. Snapshots only knew how to capture four block types (spawners, vaults, pots, chests) — everything else restored as a blank block, so sign text, player-head skins, banner patterns, lectern books, jukebox discs, chiseled-bookshelf contents, and suspicious-block items were silently wiped on every reset. All of these are now captured and restored faithfully, in chamber snapshots AND in captured/imported dungeon rooms. Re-run /tcp snapshot create <chamber> on decorated chambers to capture them with the new fidelity. - Opening a vault can no longer consume the wrong item. The key was taken from whatever the player was holding at the moment loot was delivered — scroll your hotbar in the split second after clicking and the plugin ate your sword instead of the key. The key is now consumed from the slot that held it at click time (or wherever the key stack actually is), and never from a non-key item. - Logging out — or crashing — while spectating no longer strands you in spectator mode. Quitting mid-spectate now restores your gamemode and position immediately, and a server crash/restart mid-spectate is recovered on your next join (the restore data survives in your player file). - Statistics no longer lose counts on shared MySQL databases. Increments were read-modify-write, so two servers writing at once could drop each other's updates; every counter now increments atomically in the database — groundwork for cross-server networks. - Key-to-reopen can't burn keys on a broken loot table. With reopen-cost-keys of 2+, a missing/typo'd loot table used to take part of the payment and give nothing; the table is now validated before any keys are consumed. - Vault loot ejection (`drop-loot-at-vault`) now drops items on the vault's own region thread — fixes a potential cross-region error on Folia when the opener moved away during the open. - Deleting a chamber now clears its wave-tracking state (active boss bars, clear-cycle progress, spawner caches) instead of leaving stale entries behind. - /tcp generate fallback volume limit aligned with the rest of the plugin (750,000 — was 500,000 in one code path when the config key is absent). - Explosions from outside a chamber can no longer destroy blocks inside it. The explosion filter only protected blocks when the blast center was inside a chamber — a creeper or TNT detonating just outside the wall blew chamber blocks up unprotected. Protection is now checked per affected block, and block-sourced explosions (beds/respawn anchors in the wrong dimension) — which previously bypassed chamber protection entirely — are covered too. - Pausing a chamber now actually stops a reset that's already counting down. A chamber paused mid-countdown still reset when the timer fired, and its "resets in 30 seconds!" warnings kept broadcasting; pause (and deletion) now cancel the scheduled reset, its warnings, and any parked confirmation. - Per-player container copies are saved if the server stops while a player has one open — previously the shutdown could discard the pending save, losing whatever they'd taken out or left in. - Teleporting across a chamber boundary now counts as entering/leaving. Teleports don't fire movement events, so /tp, /home, ender pearls — and the reset eviction itself — left stale "in chamber" tracking (time kept accruing, exit never fired). Logging out inside a chamber and back in also registers the entry immediately now. - Chamber names are no longer suggested in tab-completion to players without admin permission (they became visible to everyone when 1.7.1 opened /tcp for stats/leaderboard). - The post-reset event now reports the real number of restored blocks instead of the chamber's full volume. [1.7.2]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    19 downloads
  57. 1.7.1-mc26TrialChamberPro 1.7.1-mc26Jul 3, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.7.1] - 2026-07-03

    Fixed
    - Ominous Bottles in loot tables are now the real `minecraft:ominous_bottle` item. Previously, every example and doc taught a workaround — a renamed POTION with Bad Omen added as a custom effect. It granted Bad Omen when drunk, but it was the wrong item: potion texture, "Uncraftable Potion" underneath the custom name, and it didn't stack with bottles from vanilla vaults. Use type: OMINOUS_BOTTLE with potion-level: 0-4 (Bad Omen I–V), or the new potion-level-min / potion-level-max to roll the level randomly per drop exactly like vanilla vaults do (normal vaults use 0–1, ominous vaults 2–4). All bundled examples and the vanilla-accurate tables now use the real item; old workaround configs keep functioning. - Editing loot in the GUI no longer strips advanced fields from hand-written loot.yml entries. Saving from the loot editor rewrites the whole file, and the writer only knew a subset of the schema — so potion types/levels, ominous flags, effect durations, enchantment ranges, random-enchantment pools, durability ranges, and goat-horn instruments were silently deleted from every hand-authored entry, and VANILLA_TABLE entries were corrupted to type: AIR. Every field now round-trips intact. (This was also quietly manufacturing the "legacy entries with no NBT" that /tcp loot audit flags.) - A bad loot entry can no longer kill the whole vault roll. Reversed amount-min/amount-max or min-rolls/max-rolls ranges used to throw at generation time (player gets nothing); an out-of-range ominous potion-level did the same. These are now fixed up at load with a console warning. - Typo'd enchantment names are now reported instead of silently skipped in all three formats (enchantments, enchantment-ranges, random-enchantment-pool); namespaced ids from datapacks (somepack:blaze) are accepted too. - A pool whose entries all have `weight: 0` no longer drops its first entry every roll — zero weight now reliably means "never drops". - Splash potions with a custom level/duration now last as long as drinkable ones (the old 75% multiplier was the pre-1.9 rule); lingering (¼) and tipped arrows (⅛) were already correct. - Turtle Master potions with a custom level keep both effects — previously only the first (Resistance was dropped). - Loot item names and lore now support hex colors and MiniMessage tags (same syntax as messages.yml) and no longer render with Minecraft's forced italics. - Non-OP players can now actually use `/tcp stats` and `/tcp leaderboard`. The whole /tcp command was gated behind tcp.admin in plugin.yml, so the "default: everyone" permissions (tcp.stats, tcp.leaderboard) were unreachable — regular players got a permission error before any subcommand could run. The command-level gate is gone and every subcommand now checks its own permission (stats and leaderboard included, which previously checked nothing). Admins see no change; tcp.admin is now a properly declared node (still gates /tcp list / /tcp info and update notifications) and is granted by the tcp.admin.* wildcard. - `vaults.sounds.ominous-open` is honored. Ominous vaults always played the normal-open sound; the ominous key was read never. Set a distinct sound and ominous vaults now use it. - Every remaining hardcoded command message moved into messages.yml. ~75 admin-command strings (/tcp dungeon, /tcp container, /tcp claims, /tcp debug, the reset-confirmation queue, snapshot bulk/missing listings, /tcp list, loot audit, setup prompts, admin reminders) are now translatable — new dungeon-*, container-*, claims-*, debug-*, reset-*, snapshot-all-*/snapshot-missing-*, loot-audit-*, list-* and shared pagination-* key families, plus new help-* lines. Existing messages.yml files keep working; the startup schema check lists any new keys your file is missing (regenerate or copy them over), and leftover removed keys are harmless. - Time durations in messages are now localizable. The time-days/hours/minutes/seconds/now keys that shipped unused since forever are now actually used for every "2d 3h 5m"-style duration (cooldowns, reset warnings, /tcp info, stats, leaderboards, placeholders), joined by the new time-ago key for "… ago" timestamps.
    Changed
    - Deprecation cleanup: sound names resolve via the registry first (enum fallback kept), goat-horn instruments resolve via the Paper registry API, plugin info reads pluginMeta, and GUI titles pass the Adventure Component straight through (gradients/hex in titles render at full fidelity). - Removed the dead global.async-block-placement config key (restoration has been batched/async regardless since long ago) and ~30 unused messages.yml keys. [1.7.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    18 downloads
  58. 1.7.1TrialChamberPro 1.7.1Jul 3, 2026

    [1.7.1] - 2026-07-03

    Fixed
    - Ominous Bottles in loot tables are now the real `minecraft:ominous_bottle` item. Previously, every example and doc taught a workaround — a renamed POTION with Bad Omen added as a custom effect. It granted Bad Omen when drunk, but it was the wrong item: potion texture, "Uncraftable Potion" underneath the custom name, and it didn't stack with bottles from vanilla vaults. Use type: OMINOUS_BOTTLE with potion-level: 0-4 (Bad Omen I–V), or the new potion-level-min / potion-level-max to roll the level randomly per drop exactly like vanilla vaults do (normal vaults use 0–1, ominous vaults 2–4). All bundled examples and the vanilla-accurate tables now use the real item; old workaround configs keep functioning. - Editing loot in the GUI no longer strips advanced fields from hand-written loot.yml entries. Saving from the loot editor rewrites the whole file, and the writer only knew a subset of the schema — so potion types/levels, ominous flags, effect durations, enchantment ranges, random-enchantment pools, durability ranges, and goat-horn instruments were silently deleted from every hand-authored entry, and VANILLA_TABLE entries were corrupted to type: AIR. Every field now round-trips intact. (This was also quietly manufacturing the "legacy entries with no NBT" that /tcp loot audit flags.) - A bad loot entry can no longer kill the whole vault roll. Reversed amount-min/amount-max or min-rolls/max-rolls ranges used to throw at generation time (player gets nothing); an out-of-range ominous potion-level did the same. These are now fixed up at load with a console warning. - Typo'd enchantment names are now reported instead of silently skipped in all three formats (enchantments, enchantment-ranges, random-enchantment-pool); namespaced ids from datapacks (somepack:blaze) are accepted too. - A pool whose entries all have `weight: 0` no longer drops its first entry every roll — zero weight now reliably means "never drops". - Splash potions with a custom level/duration now last as long as drinkable ones (the old 75% multiplier was the pre-1.9 rule); lingering (¼) and tipped arrows (⅛) were already correct. - Turtle Master potions with a custom level keep both effects — previously only the first (Resistance was dropped). - Loot item names and lore now support hex colors and MiniMessage tags (same syntax as messages.yml) and no longer render with Minecraft's forced italics. - Non-OP players can now actually use `/tcp stats` and `/tcp leaderboard`. The whole /tcp command was gated behind tcp.admin in plugin.yml, so the "default: everyone" permissions (tcp.stats, tcp.leaderboard) were unreachable — regular players got a permission error before any subcommand could run. The command-level gate is gone and every subcommand now checks its own permission (stats and leaderboard included, which previously checked nothing). Admins see no change; tcp.admin is now a properly declared node (still gates /tcp list / /tcp info and update notifications) and is granted by the tcp.admin.* wildcard. - `vaults.sounds.ominous-open` is honored. Ominous vaults always played the normal-open sound; the ominous key was read never. Set a distinct sound and ominous vaults now use it. - Every remaining hardcoded command message moved into messages.yml. ~75 admin-command strings (/tcp dungeon, /tcp container, /tcp claims, /tcp debug, the reset-confirmation queue, snapshot bulk/missing listings, /tcp list, loot audit, setup prompts, admin reminders) are now translatable — new dungeon-*, container-*, claims-*, debug-*, reset-*, snapshot-all-*/snapshot-missing-*, loot-audit-*, list-* and shared pagination-* key families, plus new help-* lines. Existing messages.yml files keep working; the startup schema check lists any new keys your file is missing (regenerate or copy them over), and leftover removed keys are harmless. - Time durations in messages are now localizable. The time-days/hours/minutes/seconds/now keys that shipped unused since forever are now actually used for every "2d 3h 5m"-style duration (cooldowns, reset warnings, /tcp info, stats, leaderboards, placeholders), joined by the new time-ago key for "… ago" timestamps.
    Changed
    - Deprecation cleanup: sound names resolve via the registry first (enum fallback kept), goat-horn instruments resolve via the Paper registry API, plugin info reads pluginMeta, and GUI titles pass the Adventure Component straight through (gradients/hex in titles render at full fidelity). - Removed the dead global.async-block-placement config key (restoration has been batched/async regardless since long ago) and ~30 unused messages.yml keys. [1.7.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    24 downloads
  59. 1.7.0-mc26TrialChamberPro 1.7.0-mc26Jul 2, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.7.0] - 2026-07-02

    Added
    - Tunnel-breaking: let players mine INTO a walled chamber — without letting them farm it. Properly-generated Trial Chambers have no entrance; with block-break protection on, players were locked out entirely, and with it off they could strip-mine the (endlessly restored) tuff for infinite blocks. The new opt-in protection.tunnel-breaking mode allows breaking a configurable block set (default: the tuff-brick shell family) inside registered chambers with drops always suppressed — no items, no XP — so there's nothing to farm, and the tunnel heals on the next reset. An optional shell-depth (default 3) restricts digging to the outer wall so the interior can't be hollowed out; players digging too deep get a clear "outer wall only" message (tunnel-only-outer-wall in messages.yml). Everything else stays protected. - Import datapack rooms into the dungeon engine: `/tcp dungeon import <file|folder|zip> [tags…]`. Vanilla .nbt structure templates — the format "crazy chambers"-style datapacks use for their custom rooms — can now be imported straight into TCP's procedural dungeon system. Drop a loose .nbt, a folder of them, or a whole datapack .zip into plugins/TrialChamberPro/dungeon/import/ and import; zip imports pick up every data/<namespace>/structure/**/*.nbt entry and auto-tag rooms by their folder (e.g. spawner, large). Jigsaw blocks in the templates become door connectors exactly as with in-world capture, and generated dungeons register as normal chambers (resets, loot, protection all apply). Limits: rooms import literally (worldgen processor randomizers aren't applied), only the first palette is read, and vertical jigsaw connectors become walls. - Auto-discovery now understands datapack-enlarged chambers. When a naturally-generated Trial Chamber is found, discovery now asks the game for the structure's exact bounds (discovery.use-structure-bounds, default on) instead of flood-scanning blocks — so chambers enlarged by datapacks that override the vanilla layout with custom rooms register at their full, correct size in one pass (no clipping, no fragments), and bounds are marked confirmed immediately. Player-built chambers still discover via the block scan. A separate discovery.structure-max-volume cap (default 15,000,000; -1 = uncapped) applies to these, since datapack chambers can be much larger than vanilla ones.
    Changed
    - Chamber scanning, snapshot capture and spawner resets are now batched across ticks. These three operations used to walk the chamber's entire volume in a single tick — fine at vanilla sizes, but a freeze risk for the much larger chambers this release enables (structure-bounds discoveries and imported dungeons can run to millions of blocks). Each now processes ~100k blocks per scheduled task, so even a 15-million-block chamber scans smoothly in the background; small chambers behave exactly as before. Spawner resets also swap their old whole-scan 10-second timeout for a per-batch one, so huge chambers can't time out halfway. Note that block restoration speed is still governed by global.blocks-per-tick — for very large chambers, raise it or enable global.use-fawe. - All TCP database tables are now prefixed (`tcp_chambers`, `tcp_vaults`, …) and the prefix is configurable. TCP's generic table names (chambers, vaults, spawners, …) could collide with other plugins on a shared MySQL database. New database.table-prefix setting (default tcp_, letters/digits/underscore, max 16 chars). Existing installs migrate automatically on first start: legacy unprefixed tables are safely renamed (only when their columns unmistakably match TCP's schema — a same-named table belonging to another plugin is left alone and reported), foreign keys and data are preserved, and the migration is a no-op on every later start. No action needed; change the prefix only if you have a collision. [1.7.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    25 downloads
  60. 1.7.0TrialChamberPro 1.7.0Jul 2, 2026

    [1.7.0] - 2026-07-02

    Added
    - Tunnel-breaking: let players mine INTO a walled chamber — without letting them farm it. Properly-generated Trial Chambers have no entrance; with block-break protection on, players were locked out entirely, and with it off they could strip-mine the (endlessly restored) tuff for infinite blocks. The new opt-in protection.tunnel-breaking mode allows breaking a configurable block set (default: the tuff-brick shell family) inside registered chambers with drops always suppressed — no items, no XP — so there's nothing to farm, and the tunnel heals on the next reset. An optional shell-depth (default 3) restricts digging to the outer wall so the interior can't be hollowed out; players digging too deep get a clear "outer wall only" message (tunnel-only-outer-wall in messages.yml). Everything else stays protected. - Import datapack rooms into the dungeon engine: `/tcp dungeon import <file|folder|zip> [tags…]`. Vanilla .nbt structure templates — the format "crazy chambers"-style datapacks use for their custom rooms — can now be imported straight into TCP's procedural dungeon system. Drop a loose .nbt, a folder of them, or a whole datapack .zip into plugins/TrialChamberPro/dungeon/import/ and import; zip imports pick up every data/<namespace>/structure/**/*.nbt entry and auto-tag rooms by their folder (e.g. spawner, large). Jigsaw blocks in the templates become door connectors exactly as with in-world capture, and generated dungeons register as normal chambers (resets, loot, protection all apply). Limits: rooms import literally (worldgen processor randomizers aren't applied), only the first palette is read, and vertical jigsaw connectors become walls. - Auto-discovery now understands datapack-enlarged chambers. When a naturally-generated Trial Chamber is found, discovery now asks the game for the structure's exact bounds (discovery.use-structure-bounds, default on) instead of flood-scanning blocks — so chambers enlarged by datapacks that override the vanilla layout with custom rooms register at their full, correct size in one pass (no clipping, no fragments), and bounds are marked confirmed immediately. Player-built chambers still discover via the block scan. A separate discovery.structure-max-volume cap (default 15,000,000; -1 = uncapped) applies to these, since datapack chambers can be much larger than vanilla ones.
    Changed
    - Chamber scanning, snapshot capture and spawner resets are now batched across ticks. These three operations used to walk the chamber's entire volume in a single tick — fine at vanilla sizes, but a freeze risk for the much larger chambers this release enables (structure-bounds discoveries and imported dungeons can run to millions of blocks). Each now processes ~100k blocks per scheduled task, so even a 15-million-block chamber scans smoothly in the background; small chambers behave exactly as before. Spawner resets also swap their old whole-scan 10-second timeout for a per-batch one, so huge chambers can't time out halfway. Note that block restoration speed is still governed by global.blocks-per-tick — for very large chambers, raise it or enable global.use-fawe. - All TCP database tables are now prefixed (`tcp_chambers`, `tcp_vaults`, …) and the prefix is configurable. TCP's generic table names (chambers, vaults, spawners, …) could collide with other plugins on a shared MySQL database. New database.table-prefix setting (default tcp_, letters/digits/underscore, max 16 chars). Existing installs migrate automatically on first start: legacy unprefixed tables are safely renamed (only when their columns unmistakably match TCP's schema — a same-named table belonging to another plugin is left alone and reported), foreign keys and data are preserved, and the migration is a no-op on every later start. No action needed; change the prefix only if you have a collision. [1.7.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    16 downloads
  61. 1.6.3-mc26TrialChamberPro 1.6.3-mc26Jun 30, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.6.3] - 2026-06-30

    Changed
    - Per-player container loot now rolls fresh, random vanilla loot for each player — and again after every reset — instead of freezing one roll forever. With chests.per-player-loot enabled, the first roll of a chest / barrel / dispenser / dropper used to become a frozen template that every player and every future reset reused, so the loot looked random once and then never changed. Now each player who opens an untouched container gets their own independent roll of its vanilla loot table (true Lootr-style), the container's loot table is never consumed, and after a chamber reset clears per-player copies the next open rolls fresh again — "vanilla, but repeatable." Moderators can still customise a container: open the Container Loot GUI (/tcp menu → chamber → Container Loot) and click a container to edit it, which saves an override that every player then receives (still per-player, re-cloned each reset). Shift-left-click (or /tcp container resetone <chamber> <#>) reverts a container to vanilla random rolls. Each container is labelled Vanilla vs Custom override in the GUI. In-world editing of containers was removed in favour of the GUI. The snapshot-based reset path (servers not using per-player loot) gets the same freshness fix — restored container and decorated-pot loot tables now re-roll fresh each reset rather than repeating an identical fixed-seed roll. - The per-player container inventory is now titled "Personal Loot" (was the more confusing "Supply Loot (yours)").
    Added
    - `/tcp scan add <chamber>` — grow a chamber's bounds into sections auto-discovery missed. Auto-discovery floods outward from a vault/spawner, but if neighbouring chunks were still loading when a chamber was first detected (or the chamber was big enough to hit the flood's node cap), the bounding box could be clipped at a chunk boundary — leaving part of the chamber (and its chests, vaults, spawners) outside the registered region, so per-player loot and resets ignored it. The new command re-floods from the chamber's known vaults (now that chunks are loaded) and merges the result into the existing bounds, then re-scans and re-snapshots. Flooding from multiple spread-out vaults also covers more than the original single-seed pass. - Auto-expand on discovery. Because few operators will run /tcp scan add across 100+ chambers, newly auto-discovered chambers now get one automatic expand pass a few seconds after registration (config: discovery.expand-on-discover, default on; discovery.expand-delay-seconds). It's best-effort — it can only read chunks that are loaded when it runs — so a wing nobody has visited may still need a manual pass. - GUI "Travel & Expand" one-time prompt. The chamber detail screen shows a red button when a chamber's bounds haven't been confirmed: click it to teleport to the chamber (loading its chunks), then click again from inside to scan for and add any clipped sections. It disappears once a thorough pass has run (here or via /tcp scan add). - Opt-in `discovery.expand-force-load`. When enabled, expand passes (auto-expand and /tcp scan add) force-load unloaded chunks on demand so they can reach a wing nobody has visited yet. Off by default — it trades a chunk-load spike for completeness; Paper-only. - Per-player container loot can be toggled from the GUI. The Container Loot view now has an on/off switch for chests.per-player-loot, so it no longer needs a config edit + reload. - Chamber detail now shows the friendly display name as its title, with the internal ID on a separate line, so the auto-generated auto_world_x_z IDs are no longer mistaken for the chamber's name.
    Fixed
    - Auto-discovery chat alert always reported "0 spawners". The notification (and console line) for a newly auto-discovered chamber was built from the flood-fill scan, whose node budget could be exhausted among a chamber's thousands of structural blocks before reaching the recessed trial spawners — so it under-reported, usually as zero. The alert now uses the authoritative full-chamber scan (the same count written to the database), so vault and spawner totals are correct. - Chamber resets (and `/tcp generate wand`) failed on servers without WorldEdit — or with a WorldEdit built for a different Java version. The internal "is WorldEdit available?" check lived inside a class that imports WorldEdit types, so merely calling the check forced the server to load WorldEdit classes; when WorldEdit was missing or version-incompatible this threw NoClassDefFoundError / UnsupportedClassVersionError — and because that's an Error, not an Exception, it slipped past the reset's error handling, aborting the reset silently with no success/failure message and skipping cleanup. The availability check now lives in its own WorldEdit-free helper so it's always safe to call; reset degrades gracefully when WorldEdit is unusable (its optional //undo integration is simply skipped), catches errors of any kind, and always reports the outcome to the operator. WorldEdit remains an optional dependency — TCP no longer needs it installed to reset chambers. [1.6.3]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    45 downloads
  62. 1.6.3TrialChamberPro 1.6.3Jun 30, 2026

    [1.6.3] - 2026-06-30

    Changed
    - Per-player container loot now rolls fresh, random vanilla loot for each player — and again after every reset — instead of freezing one roll forever. With chests.per-player-loot enabled, the first roll of a chest / barrel / dispenser / dropper used to become a frozen template that every player and every future reset reused, so the loot looked random once and then never changed. Now each player who opens an untouched container gets their own independent roll of its vanilla loot table (true Lootr-style), the container's loot table is never consumed, and after a chamber reset clears per-player copies the next open rolls fresh again — "vanilla, but repeatable." Moderators can still customise a container: open the Container Loot GUI (/tcp menu → chamber → Container Loot) and click a container to edit it, which saves an override that every player then receives (still per-player, re-cloned each reset). Shift-left-click (or /tcp container resetone <chamber> <#>) reverts a container to vanilla random rolls. Each container is labelled Vanilla vs Custom override in the GUI. In-world editing of containers was removed in favour of the GUI. The snapshot-based reset path (servers not using per-player loot) gets the same freshness fix — restored container and decorated-pot loot tables now re-roll fresh each reset rather than repeating an identical fixed-seed roll. - The per-player container inventory is now titled "Personal Loot" (was the more confusing "Supply Loot (yours)").
    Added
    - `/tcp scan add <chamber>` — grow a chamber's bounds into sections auto-discovery missed. Auto-discovery floods outward from a vault/spawner, but if neighbouring chunks were still loading when a chamber was first detected (or the chamber was big enough to hit the flood's node cap), the bounding box could be clipped at a chunk boundary — leaving part of the chamber (and its chests, vaults, spawners) outside the registered region, so per-player loot and resets ignored it. The new command re-floods from the chamber's known vaults (now that chunks are loaded) and merges the result into the existing bounds, then re-scans and re-snapshots. Flooding from multiple spread-out vaults also covers more than the original single-seed pass. - Auto-expand on discovery. Because few operators will run /tcp scan add across 100+ chambers, newly auto-discovered chambers now get one automatic expand pass a few seconds after registration (config: discovery.expand-on-discover, default on; discovery.expand-delay-seconds). It's best-effort — it can only read chunks that are loaded when it runs — so a wing nobody has visited may still need a manual pass. - GUI "Travel & Expand" one-time prompt. The chamber detail screen shows a red button when a chamber's bounds haven't been confirmed: click it to teleport to the chamber (loading its chunks), then click again from inside to scan for and add any clipped sections. It disappears once a thorough pass has run (here or via /tcp scan add). - Opt-in `discovery.expand-force-load`. When enabled, expand passes (auto-expand and /tcp scan add) force-load unloaded chunks on demand so they can reach a wing nobody has visited yet. Off by default — it trades a chunk-load spike for completeness; Paper-only. - Per-player container loot can be toggled from the GUI. The Container Loot view now has an on/off switch for chests.per-player-loot, so it no longer needs a config edit + reload. - Chamber detail now shows the friendly display name as its title, with the internal ID on a separate line, so the auto-generated auto_world_x_z IDs are no longer mistaken for the chamber's name.
    Fixed
    - Auto-discovery chat alert always reported "0 spawners". The notification (and console line) for a newly auto-discovered chamber was built from the flood-fill scan, whose node budget could be exhausted among a chamber's thousands of structural blocks before reaching the recessed trial spawners — so it under-reported, usually as zero. The alert now uses the authoritative full-chamber scan (the same count written to the database), so vault and spawner totals are correct. - Chamber resets (and `/tcp generate wand`) failed on servers without WorldEdit — or with a WorldEdit built for a different Java version. The internal "is WorldEdit available?" check lived inside a class that imports WorldEdit types, so merely calling the check forced the server to load WorldEdit classes; when WorldEdit was missing or version-incompatible this threw NoClassDefFoundError / UnsupportedClassVersionError — and because that's an Error, not an Exception, it slipped past the reset's error handling, aborting the reset silently with no success/failure message and skipping cleanup. The availability check now lives in its own WorldEdit-free helper so it's always safe to call; reset degrades gracefully when WorldEdit is unusable (its optional //undo integration is simply skipped), catches errors of any kind, and always reports the outcome to the operator. WorldEdit remains an optional dependency — TCP no longer needs it installed to reset chambers. [1.6.3]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    20 downloads
  63. 1.6.2-mc26TrialChamberPro 1.6.2-mc26Jun 29, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.6.2] - 2026-06-29

    Fixed
    - Several player-facing strings rendered raw `&`/`§` codes (and an embedded `[TCP]` prefix). A recurring class of bug: a sub-value built with getMessage() — which adds the chat prefix and pre-renders to legacy section codes — was being substituted into another message's {placeholder} and parsed a second time, which the parser couldn't read. Most visible in /tcp info (Exit / Last Reset / Snapshot lines), but the same pattern affected per-chamber loot info, /tcp mobs listings, and several admin-GUI items (chamber detail/settings, global & protection toggles, back buttons). All nested sub-values now use a new rawMessage() helper (substitutes placeholders, no prefix, no pre-parse) so the outer message parses exactly once. No messages.yml changes required. [1.6.2]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    29 downloads
  64. 1.6.2TrialChamberPro 1.6.2Jun 29, 2026

    [1.6.2] - 2026-06-29

    Fixed
    - Several player-facing strings rendered raw `&`/`§` codes (and an embedded `[TCP]` prefix). A recurring class of bug: a sub-value built with getMessage() — which adds the chat prefix and pre-renders to legacy section codes — was being substituted into another message's {placeholder} and parsed a second time, which the parser couldn't read. Most visible in /tcp info (Exit / Last Reset / Snapshot lines), but the same pattern affected per-chamber loot info, /tcp mobs listings, and several admin-GUI items (chamber detail/settings, global & protection toggles, back buttons). All nested sub-values now use a new rawMessage() helper (substitutes placeholders, no prefix, no pre-parse) so the outer message parses exactly once. No messages.yml changes required. [1.6.2]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    16 downloads
  65. 1.6.1-mc26TrialChamberPro 1.6.1-mc26Jun 29, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.6.1] - 2026-06-29

    Fixed
    - Trial spawners weren't actually reset on a chamber reset. Reset cleared each spawner's tracked players (so it would drop keys again) and set the cooldown length, but never cleared the spawner's active cooldown end — so a spawner that a player had already completed stayed stuck in its post-completion cooldown after the chamber reset and wouldn't re-activate. Reset now clears cooldownEnd (and the pending spawn timer) so spawners are genuinely ready again — or, when reset.spawner-cooldown-minutes is positive, schedules the cooldown to end that many minutes from the reset. (Affected every chamber; most visible on freshly force-reset chambers.)
    Added
    - Chamber display names. Chambers can now carry a friendly display name, separate from their internal name (which stays the command/database key). Set one with `/tcp rename <chamber> <name>` (none clears it) or the new Rename button in the chamber GUI (/tcp menu → chamber → Rename, then type the name in chat). Display names appear in player-facing announcements (reset warnings, the new clear broadcast) and /tcp info, and are exposed on the chamber API so premium modules can use them. An optional name pool (naming.name-pool, on by default via naming.auto-assign) auto-assigns a random unused name to each newly registered or auto-discovered chamber. - Chamber-cleared broadcast. New opt-in server-wide announcement when a chamber is fully cleared in one run — "{chamber} has been cleared by {players}!" — using the display name and the participating players. Off by default (global.broadcast-chamber-cleared). Built on the existing ChamberClearedEvent.
    Fixed
    - "Reset Broadcast" toggle rendered raw `&` codes and a bracketed lore. Its messages.yml value used &-codes in the name and a multi-line list for the lore, but GuiComponents.toggleItem wraps the name in the gui.common.toggle-name-* template and expects a single-line description — so the name double-processed into raw codes and the list stringified to [line, line, …]. The keys now follow the toggle contract (plain name, single-line lore); the helper supplies the colour, Status, and Click lines. - Loot "Edit Amount" GUI: the Minimum buttons did nothing on most items. The yellow adjust buttons clamped the minimum to the current maximum, so on a freshly-added item (which starts at min 1 / max 1) "Minimum +N" was capped at 1 and appeared dead — as did "Minimum -N" and "Maximum -N" at their floors. The min/max range is now kept coherent both ways: raising the minimum past the maximum carries the maximum up with it, and lowering the maximum below the minimum pulls the minimum down. Every button now responds. - Wave mobs no longer fight each other. A trial spawner's skeletons would clip other mobs with stray arrows, and the wave dissolved into mob-vs-mob brawls — skeleton 1v1s, the occasional 3v3 — that the player never had to touch. Worse than just looking silly: those self-kills still counted toward wave (and chamber) completion, so a wave could clear itself while the player stood there. Friendly fire and AI target-locking strictly between two trial-spawner wave mobs are now suppressed; player-vs-mob combat is untouched, and non-wave entities (wild animals, other plugins' mobs) are left alone. Toggle with spawner-waves.prevent-infighting (default true). Also keeps premium TCP-MythicTrials tier progression honest, since "clearing" a chamber once again means the players actually did the fighting. [1.6.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    14 downloads
  66. 1.6.1TrialChamberPro 1.6.1Jun 29, 2026

    [1.6.1] - 2026-06-29

    Fixed
    - Trial spawners weren't actually reset on a chamber reset. Reset cleared each spawner's tracked players (so it would drop keys again) and set the cooldown length, but never cleared the spawner's active cooldown end — so a spawner that a player had already completed stayed stuck in its post-completion cooldown after the chamber reset and wouldn't re-activate. Reset now clears cooldownEnd (and the pending spawn timer) so spawners are genuinely ready again — or, when reset.spawner-cooldown-minutes is positive, schedules the cooldown to end that many minutes from the reset. (Affected every chamber; most visible on freshly force-reset chambers.)
    Added
    - Chamber display names. Chambers can now carry a friendly display name, separate from their internal name (which stays the command/database key). Set one with `/tcp rename <chamber> <name>` (none clears it) or the new Rename button in the chamber GUI (/tcp menu → chamber → Rename, then type the name in chat). Display names appear in player-facing announcements (reset warnings, the new clear broadcast) and /tcp info, and are exposed on the chamber API so premium modules can use them. An optional name pool (naming.name-pool, on by default via naming.auto-assign) auto-assigns a random unused name to each newly registered or auto-discovered chamber. - Chamber-cleared broadcast. New opt-in server-wide announcement when a chamber is fully cleared in one run — "{chamber} has been cleared by {players}!" — using the display name and the participating players. Off by default (global.broadcast-chamber-cleared). Built on the existing ChamberClearedEvent.
    Fixed
    - "Reset Broadcast" toggle rendered raw `&` codes and a bracketed lore. Its messages.yml value used &-codes in the name and a multi-line list for the lore, but GuiComponents.toggleItem wraps the name in the gui.common.toggle-name-* template and expects a single-line description — so the name double-processed into raw codes and the list stringified to [line, line, …]. The keys now follow the toggle contract (plain name, single-line lore); the helper supplies the colour, Status, and Click lines. - Loot "Edit Amount" GUI: the Minimum buttons did nothing on most items. The yellow adjust buttons clamped the minimum to the current maximum, so on a freshly-added item (which starts at min 1 / max 1) "Minimum +N" was capped at 1 and appeared dead — as did "Minimum -N" and "Maximum -N" at their floors. The min/max range is now kept coherent both ways: raising the minimum past the maximum carries the maximum up with it, and lowering the maximum below the minimum pulls the minimum down. Every button now responds. - Wave mobs no longer fight each other. A trial spawner's skeletons would clip other mobs with stray arrows, and the wave dissolved into mob-vs-mob brawls — skeleton 1v1s, the occasional 3v3 — that the player never had to touch. Worse than just looking silly: those self-kills still counted toward wave (and chamber) completion, so a wave could clear itself while the player stood there. Friendly fire and AI target-locking strictly between two trial-spawner wave mobs are now suppressed; player-vs-mob combat is untouched, and non-wave entities (wild animals, other plugins' mobs) are left alone. Toggle with spawner-waves.prevent-infighting (default true). Also keeps premium TCP-MythicTrials tier progression honest, since "clearing" a chamber once again means the players actually did the fighting. [1.6.1]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    18 downloads
  67. 1.6.0-mc26TrialChamberPro 1.6.0-mc26Jun 26, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.6.0] - 2026-06-26

    Added
    - `/tcp setup` — an opt-in, guided settings tour. TCP ships conservative defaults (auto-discovery and auto-snapshot are off, among others) and most operators never open a YAML file, so genuinely useful settings go unnoticed. /tcp setup walks the major settings one at a time — each with a plain-English explanation, its current state, and Enable / Skip / Disable buttons, plus ← Prev, Pause Setup and Stop Setup. Nothing is ever forced and no default is changed. On Paper 1.21.7+ it renders in the native Dialog UI; on older or non-Paper servers it falls back automatically to a clickable-chat tour with the same content. Includes preset pickers (e.g. how often chambers reset, shown with the current value as a real duration), a clear CPU-impact badge on the few settings that warrant one, and a gentle op-join reminder — at most weekly, three times — that stops for good once you run the tour (with a single follow-up nudge if you start but don't finish). Permission: tcp.admin.setup (OP).
    Changed
    - Paper API target raised to 1.21.7 for the Dialog API used by /tcp setup. The plugin's api-version stays 1.21, so it still loads on 1.21.1+ — the Dialog code is gated behind a runtime class-presence check and degrades to the clickable-chat tour wherever the Dialog API isn't available. [1.6.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    49 downloads
  68. 1.6.0TrialChamberPro 1.6.0Jun 26, 2026

    [1.6.0] - 2026-06-26

    Added
    - `/tcp setup` — an opt-in, guided settings tour. TCP ships conservative defaults (auto-discovery and auto-snapshot are off, among others) and most operators never open a YAML file, so genuinely useful settings go unnoticed. /tcp setup walks the major settings one at a time — each with a plain-English explanation, its current state, and Enable / Skip / Disable buttons, plus ← Prev, Pause Setup and Stop Setup. Nothing is ever forced and no default is changed. On Paper 1.21.7+ it renders in the native Dialog UI; on older or non-Paper servers it falls back automatically to a clickable-chat tour with the same content. Includes preset pickers (e.g. how often chambers reset, shown with the current value as a real duration), a clear CPU-impact badge on the few settings that warrant one, and a gentle op-join reminder — at most weekly, three times — that stops for good once you run the tour (with a single follow-up nudge if you start but don't finish). Permission: tcp.admin.setup (OP).
    Changed
    - Paper API target raised to 1.21.7 for the Dialog API used by /tcp setup. The plugin's api-version stays 1.21, so it still loads on 1.21.1+ — the Dialog code is gated behind a runtime class-presence check and degrades to the clickable-chat tour wherever the Dialog API isn't available. [1.6.0]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    29 downloads
  69. 1.5.22-mc26TrialChamberPro 1.5.22-mc26Jun 22, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.22] - 2026-06-22

    Added
    - Bulk snapshot backfill — `/tcp snapshot create all` and `/tcp snapshot missing`. Chambers registered with global.auto-snapshot-on-register turned off have no snapshot and can't be reset until one is captured, and there was no way to fix a backlog short of running create on each chamber by hand. create all now snapshots every chamber that's missing one (add force to re-capture all chambers), running them sequentially with a 20-tick gap after each capture finishes — a capture is a single heavy main-thread pass over the whole chamber, so the stagger keeps TPS healthy across a 60+ backlog — and reporting progress every 10. missing lists the snapshot-less chambers 10 per page, each with a clickable [Create] (plus a [Create all] header button); the periodic "chambers have no snapshot" reminder's [list] link now points here too. [1.5.22]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    26 downloads
  70. 1.5.22TrialChamberPro 1.5.22Jun 22, 2026

    [1.5.22] - 2026-06-22

    Added
    - Bulk snapshot backfill — `/tcp snapshot create all` and `/tcp snapshot missing`. Chambers registered with global.auto-snapshot-on-register turned off have no snapshot and can't be reset until one is captured, and there was no way to fix a backlog short of running create on each chamber by hand. create all now snapshots every chamber that's missing one (add force to re-capture all chambers), running them sequentially with a 20-tick gap after each capture finishes — a capture is a single heavy main-thread pass over the whole chamber, so the stagger keeps TPS healthy across a 60+ backlog — and reporting progress every 10. missing lists the snapshot-less chambers 10 per page, each with a clickable [Create] (plus a [Create all] header button); the periodic "chambers have no snapshot" reminder's [list] link now points here too. [1.5.22]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    29 downloads
  71. 1.5.21-mc26TrialChamberPro 1.5.21-mc26Jun 22, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.21] - 2026-06-22

    Added
    - `debug.verbose-logging` now explains protection decisions. With it on, the console logs why a block-break, PvP, teleport-into-chamber, walk-in entry, or AdvancedEnchantments action was or wasn't taken — including the bypass-permission exemptions (tcp.bypass.entry / tcp.bypass.protection, which OPs hold by default). This makes "I enabled the toggle but it doesn't work" self-diagnosable: the usual answer is testing as an OP. See the new troubleshooting entry.
    Fixed
    - AdvancedEnchantments enchants could still break into a chamber from outside. The protection.block-advanced-enchantments guard only checked the player's own location, so a player standing just outside a chamber and mining into it — Blast Mining the wall, or an AoE break reaching across the boundary — wasn't stopped. AE's EnchantActivateEvent exposes no block, so TCP now also ray-traces the block the player is looking at and checks it — expanded by the new `protection.advanced-enchantments-block-radius` (default 2, set it to your largest blast enchant's radius; 0 = only the mined block itself) — against chamber bounds via getIntersectingChamber, closing the outside-in route. The expansion is centred on the mined block, not the player. Standing inside a chamber is blocked as before, and tcp.bypass.protection / the allowlist still apply. [1.5.21]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    17 downloads
  72. 1.5.21TrialChamberPro 1.5.21Jun 22, 2026

    [1.5.21] - 2026-06-22

    Added
    - `debug.verbose-logging` now explains protection decisions. With it on, the console logs why a block-break, PvP, teleport-into-chamber, walk-in entry, or AdvancedEnchantments action was or wasn't taken — including the bypass-permission exemptions (tcp.bypass.entry / tcp.bypass.protection, which OPs hold by default). This makes "I enabled the toggle but it doesn't work" self-diagnosable: the usual answer is testing as an OP. See the new troubleshooting entry.
    Fixed
    - AdvancedEnchantments enchants could still break into a chamber from outside. The protection.block-advanced-enchantments guard only checked the player's own location, so a player standing just outside a chamber and mining into it — Blast Mining the wall, or an AoE break reaching across the boundary — wasn't stopped. AE's EnchantActivateEvent exposes no block, so TCP now also ray-traces the block the player is looking at and checks it — expanded by the new `protection.advanced-enchantments-block-radius` (default 2, set it to your largest blast enchant's radius; 0 = only the mined block itself) — against chamber bounds via getIntersectingChamber, closing the outside-in route. The expansion is centred on the mined block, not the player. Standing inside a chamber is blocked as before, and tcp.bypass.protection / the allowlist still apply. [1.5.21]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    12 downloads
  73. 1.5.20-mc26TrialChamberPro 1.5.20-mc26Jun 21, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.20] - 2026-06-22

    Added
    - Chamber entry control — two opt-in protection toggles for gating who can get into a chamber: - `protection.prevent-teleport-into-chamber` cancels teleporting into a chamber from outside — /tpa, /tpahere, /home, /warp, /tp, ender pearls, chorus fruit, anything. It hooks the teleport itself (PlayerTeleportEvent), so it catches every method rather than specific commands, and players can't /tpa past the intended entrance. - `protection.prevent-entry-without-permission` gates walking into a chamber by rank — only players with the new `tcp.bypass.entry` permission (default op) can enter on foot; others are stopped at the boundary. Makes chambers rank-restricted. Both are off by default. tcp.bypass.entry, spectators, and creative-mode players are exempt (the gamemode check also covers TCP's own spectator-entry teleport).
    Fixed
    - `/tcp info` rendered raw colour codes instead of formatting (e.g. &8&l&6TRIAL CHAMBER… and &7WorldEdit / FAWE:) — most visible with a translated, &-coded prefix. The integration/feature status ticks were built with § section signs, which TCP's message parser rejects, making it fall back to printing the whole line literally. They now use & codes, so the line formats correctly. [1.5.20]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    20 downloads
  74. 1.5.20TrialChamberPro 1.5.20Jun 21, 2026

    [1.5.20] - 2026-06-22

    Added
    - Chamber entry control — two opt-in protection toggles for gating who can get into a chamber: - `protection.prevent-teleport-into-chamber` cancels teleporting into a chamber from outside — /tpa, /tpahere, /home, /warp, /tp, ender pearls, chorus fruit, anything. It hooks the teleport itself (PlayerTeleportEvent), so it catches every method rather than specific commands, and players can't /tpa past the intended entrance. - `protection.prevent-entry-without-permission` gates walking into a chamber by rank — only players with the new `tcp.bypass.entry` permission (default op) can enter on foot; others are stopped at the boundary. Makes chambers rank-restricted. Both are off by default. tcp.bypass.entry, spectators, and creative-mode players are exempt (the gamemode check also covers TCP's own spectator-entry teleport).
    Fixed
    - `/tcp info` rendered raw colour codes instead of formatting (e.g. &8&l&6TRIAL CHAMBER… and &7WorldEdit / FAWE:) — most visible with a translated, &-coded prefix. The integration/feature status ticks were built with § section signs, which TCP's message parser rejects, making it fall back to printing the whole line literally. They now use & codes, so the line formats correctly. [1.5.20]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    14 downloads
  75. 1.5.19-mc26TrialChamberPro 1.5.19-mc26Jun 21, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.19] - 2026-06-21

    Added
    - `config.yml` and `messages.yml` now auto-update on startup. Bukkit only writes these files when they're absent, so servers that installed an earlier build never got options/message keys added later — features ran on code defaults that couldn't be configured, and new messages rendered as <missing: …> in-game. TCP now merges any key present in the bundled default but missing from your file, carrying its comment across, while leaving your existing values, comments, and order untouched. The previous file is saved as <file>.bak first. User-content files (loot.yml, spawner_presets.yml, dungeon.yml) are intentionally not merged — they're authored by you. (This is why some servers were stuck on old configs/messages.) - `protection.allow-pvp` is now implemented (was a reserved no-op). When false, player-vs-player damage — melee and player-shot projectiles — is cancelled inside registered chambers. tcp.bypass.protection exempts staff; mob and self-damage are never affected. - `reset.clear-trial-omen-effect` is now implemented (was a reserved no-op). On reset, Trial Omen and Bad Omen are stripped from players who were inside the chamber, so leftover omen doesn't carry into the next cycle. - Translatable `{type}` labels — the {type} placeholder was being filled with hardcoded English. It now resolves through new messages.yml keys so it can be localized everywhere it appears: vault-type-normal / vault-type-ominous (vault messages and trial-key give messages), and wave-type-* / wave-boss-type-* for the spawner-wave completion + boss-bar lines. Defaults are unchanged (Normal/Ominous, Trial/Ominous, Trial Spawner/Ominous Trial).
    Removed
    - Dropped the never-implemented `trial-keys.fix-paper-bugs`, `prevent-duplication`, and `max-stack-size` options. They were read by no code and had no effect. A consistent key stack-size cap isn't practical (spawner keys are dropped by vanilla, and the premium add-ons hand out their own keys), and dupe protection is better left to a dedicated plugin — validate-key-type stays, and the comment now points to AntiDupePro. Leftover keys in an existing config.yml are simply ignored. [1.5.19]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  76. 1.5.19TrialChamberPro 1.5.19Jun 21, 2026

    [1.5.19] - 2026-06-21

    Added
    - `config.yml` and `messages.yml` now auto-update on startup. Bukkit only writes these files when they're absent, so servers that installed an earlier build never got options/message keys added later — features ran on code defaults that couldn't be configured, and new messages rendered as <missing: …> in-game. TCP now merges any key present in the bundled default but missing from your file, carrying its comment across, while leaving your existing values, comments, and order untouched. The previous file is saved as <file>.bak first. User-content files (loot.yml, spawner_presets.yml, dungeon.yml) are intentionally not merged — they're authored by you. (This is why some servers were stuck on old configs/messages.) - `protection.allow-pvp` is now implemented (was a reserved no-op). When false, player-vs-player damage — melee and player-shot projectiles — is cancelled inside registered chambers. tcp.bypass.protection exempts staff; mob and self-damage are never affected. - `reset.clear-trial-omen-effect` is now implemented (was a reserved no-op). On reset, Trial Omen and Bad Omen are stripped from players who were inside the chamber, so leftover omen doesn't carry into the next cycle. - Translatable `{type}` labels — the {type} placeholder was being filled with hardcoded English. It now resolves through new messages.yml keys so it can be localized everywhere it appears: vault-type-normal / vault-type-ominous (vault messages and trial-key give messages), and wave-type-* / wave-boss-type-* for the spawner-wave completion + boss-bar lines. Defaults are unchanged (Normal/Ominous, Trial/Ominous, Trial Spawner/Ominous Trial).
    Removed
    - Dropped the never-implemented `trial-keys.fix-paper-bugs`, `prevent-duplication`, and `max-stack-size` options. They were read by no code and had no effect. A consistent key stack-size cap isn't practical (spawner keys are dropped by vanilla, and the premium add-ons hand out their own keys), and dupe protection is better left to a dedicated plugin — validate-key-type stays, and the comment now points to AntiDupePro. Leftover keys in an existing config.yml are simply ignored. [1.5.19]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  77. 1.5.18-mc26TrialChamberPro 1.5.18-mc26Jun 21, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.18] - 2026-06-21

    Added
    - AdvancedEnchantments integration. AE custom enchants (e.g. Blast Mining) break blocks through their own effect path that ignores TCP's BlockBreakEvent cancel — so they could bypass chamber protection. With protection.block-advanced-enchantments: true (and AE installed), TCP cancels AE enchant activations for a player standing in a registered chamber; protection.advanced-enchantments-allowlist keeps named enchants (e.g. combat ones) working there. Reflection-based — no dependency on the paid AE jar, inert when AE is absent — and tcp.bypass.protection exempts staff. Off by default.
    Fixed
    - Protection-message chat spam. A single multi-block action (Blast Mining, vein miners, rapid clicking) printed the "you can't break/place/access here" message once per affected block. The denial messages are now throttled per player via protection.message-cooldown-ms (default 1500 ms; 0 disables the throttle). [1.5.18]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  78. 1.5.18TrialChamberPro 1.5.18Jun 21, 2026

    [1.5.18] - 2026-06-21

    Added
    - AdvancedEnchantments integration. AE custom enchants (e.g. Blast Mining) break blocks through their own effect path that ignores TCP's BlockBreakEvent cancel — so they could bypass chamber protection. With protection.block-advanced-enchantments: true (and AE installed), TCP cancels AE enchant activations for a player standing in a registered chamber; protection.advanced-enchantments-allowlist keeps named enchants (e.g. combat ones) working there. Reflection-based — no dependency on the paid AE jar, inert when AE is absent — and tcp.bypass.protection exempts staff. Off by default.
    Fixed
    - Protection-message chat spam. A single multi-block action (Blast Mining, vein miners, rapid clicking) printed the "you can't break/place/access here" message once per affected block. The denial messages are now throttled per player via protection.message-cooldown-ms (default 1500 ms; 0 disables the throttle). [1.5.18]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    7 downloads
  79. 1.5.17-mc26TrialChamberPro 1.5.17-mc26Jun 20, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.17] - 2026-06-20

    Fixed
    - 1.5.16 could rename another plugin's `player_stats` table. The collision migration checked a table's columns via DatabaseMetaData.getColumns(), whose table-name argument treats _ as a SQL wildcard — so the "is this table TCP's?" test could pick up a player_uuid column from a different matching table and wrongly rename a foreign player_stats to tcp_player_stats. The metadata lookup now filters to the exact table name (and catalog). Servers affected by 1.5.16 auto-recover on next start: a tcp_player_stats that isn't TCP's (no player_uuid) is renamed back to player_stats — returning the other plugin's table and data — and TCP creates its own fresh tcp_player_stats. If both names are already occupied, TCP logs exactly how to reconcile instead of touching anything. [1.5.17]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    12 downloads
  80. 1.5.17TrialChamberPro 1.5.17Jun 20, 2026

    [1.5.17] - 2026-06-20

    Fixed
    - 1.5.16 could rename another plugin's `player_stats` table. The collision migration checked a table's columns via DatabaseMetaData.getColumns(), whose table-name argument treats _ as a SQL wildcard — so the "is this table TCP's?" test could pick up a player_uuid column from a different matching table and wrongly rename a foreign player_stats to tcp_player_stats. The metadata lookup now filters to the exact table name (and catalog). Servers affected by 1.5.16 auto-recover on next start: a tcp_player_stats that isn't TCP's (no player_uuid) is renamed back to player_stats — returning the other plugin's table and data — and TCP creates its own fresh tcp_player_stats. If both names are already occupied, TCP logs exactly how to reconcile instead of touching anything. [1.5.17]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  81. 1.5.16-mc26TrialChamberPro 1.5.16-mc26Jun 19, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.16] - 2026-06-20

    Fixed
    - Stats / leaderboard GUI crashed on shared databases (Could not pass event InventoryClickEvent). If another plugin (e.g. a duels / PvP-stats plugin) already owned a generically-named player_stats table, TCP's CREATE TABLE IF NOT EXISTS saw it and never created its own — so every stat read/write hit the wrong table. TCP now uses its own namespaced `tcp_player_stats` table: existing TCP stats are migrated to it automatically on first start, and a foreign player_stats is left completely untouched. The stats GUI also now degrades gracefully (logs a clear [TCP] error and shows an empty board) instead of throwing into the click handler if a stat query ever fails.
    Added
    - Database schema self-check on startup — reads each table's live columns and reconciles drift: missing (safe) tcp_player_stats columns are added automatically, and a missing critical column like the player_uuid primary key is reported with a loud, actionable warning that lists the table's actual columns. - `/tcp debug schema` — prints every TCP table's live columns on demand (no database client needed), flagging the stats table if its primary key is absent. [1.5.16]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    10 downloads
  82. 1.5.16TrialChamberPro 1.5.16Jun 19, 2026

    [1.5.16] - 2026-06-20

    Fixed
    - Stats / leaderboard GUI crashed on shared databases (Could not pass event InventoryClickEvent). If another plugin (e.g. a duels / PvP-stats plugin) already owned a generically-named player_stats table, TCP's CREATE TABLE IF NOT EXISTS saw it and never created its own — so every stat read/write hit the wrong table. TCP now uses its own namespaced `tcp_player_stats` table: existing TCP stats are migrated to it automatically on first start, and a foreign player_stats is left completely untouched. The stats GUI also now degrades gracefully (logs a clear [TCP] error and shows an empty board) instead of throwing into the click handler if a stat query ever fails.
    Added
    - Database schema self-check on startup — reads each table's live columns and reconciles drift: missing (safe) tcp_player_stats columns are added automatically, and a missing critical column like the player_uuid primary key is reported with a loud, actionable warning that lists the table's actual columns. - `/tcp debug schema` — prints every TCP table's live columns on demand (no database client needed), flagging the stats table if its primary key is absent. [1.5.16]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    12 downloads
  83. 1.5.15-mc26TrialChamberPro 1.5.15-mc26Jun 19, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.15] - 2026-06-19

    Added
    - Land-claim plugin protection — registered Trial Chambers can no longer be claimed (or have a claim expanded into them) with Residence, Lands, or GriefPrevention. Each integration cancels that plugin's claim-create / expand events when the claimed area overlaps a chamber, with a message to the player. Per-plugin config toggles (protection.residence-integration / lands-integration / griefprevention-integration, default on) and per-plugin bypass permissions (tcp.bypass.residence / .lands / .griefprevention, default op). Integrations are reflection-based — no version pinning, and nothing is touched on servers without the plugin. - Claim conflict scan — on startup (toggle: protection.claim-conflict-scan-on-startup) and via the new `/tcp claims scan`, TCP checks every registered chamber against existing claims and logs a warning per overlap (chamber name + location + claim owner), to help find and fix pre-existing conflicts on long-running servers. [1.5.15]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  84. 1.5.15TrialChamberPro 1.5.15Jun 19, 2026

    [1.5.15] - 2026-06-19

    Added
    - Land-claim plugin protection — registered Trial Chambers can no longer be claimed (or have a claim expanded into them) with Residence, Lands, or GriefPrevention. Each integration cancels that plugin's claim-create / expand events when the claimed area overlaps a chamber, with a message to the player. Per-plugin config toggles (protection.residence-integration / lands-integration / griefprevention-integration, default on) and per-plugin bypass permissions (tcp.bypass.residence / .lands / .griefprevention, default op). Integrations are reflection-based — no version pinning, and nothing is touched on servers without the plugin. - Claim conflict scan — on startup (toggle: protection.claim-conflict-scan-on-startup) and via the new `/tcp claims scan`, TCP checks every registered chamber against existing claims and logs a warning per overlap (chamber name + location + claim owner), to help find and fix pre-existing conflicts on long-running servers. [1.5.15]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  85. 1.5.14-mc26TrialChamberPro 1.5.14-mc26Jun 19, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.14] - 2026-06-19

    Fixed
    - Duplicate messages on right-clicking a vault (e.g. the "You need a Trial Key" line printed twice). A right-click fires PlayerInteractEvent once per hand (main + off); VaultInteractListener now acts only on the main-hand pass, so feedback is sent once. The same guard was added to ProtectionListener's container-access denial (prevent-container-access). Vault/key behaviour is unchanged — only the duplicate message is removed. [1.5.14]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    7 downloads
  86. 1.5.14TrialChamberPro 1.5.14Jun 19, 2026

    [1.5.14] - 2026-06-19

    Fixed
    - Duplicate messages on right-clicking a vault (e.g. the "You need a Trial Key" line printed twice). A right-click fires PlayerInteractEvent once per hand (main + off); VaultInteractListener now acts only on the main-hand pass, so feedback is sent once. The same guard was added to ProtectionListener's container-access denial (prevent-container-access). Vault/key behaviour is unchanged — only the duplicate message is removed. [1.5.14]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    7 downloads
  87. 1.5.13-mc26TrialChamberPro 1.5.13-mc26Jun 19, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.13] - 2026-06-19

    Fixed
    - MySQL/MariaDB vault saving failed with error in your SQL syntax … near 'CONFLICT(...)'. Two vault upserts (ChamberManager.saveVault, VaultManager.recordOpen) hardcoded SQLite's ON CONFLICT … DO UPDATE syntax instead of branching on the database type. They now use ON DUPLICATE KEY UPDATE on MySQL/MariaDB (matching the existing unique keys), like the other upserts already did. SQLite is unaffected. - Missing message key — /tcp give and /tcp stats against an unknown player rendered Message not found: player-not-found. Added the player-not-found key to messages.yml. (Verified all ~350 code-referenced message keys resolve.) [1.5.13]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    11 downloads
  88. 1.5.13TrialChamberPro 1.5.13Jun 19, 2026

    [1.5.13] - 2026-06-19

    Fixed
    - MySQL/MariaDB vault saving failed with error in your SQL syntax … near 'CONFLICT(...)'. Two vault upserts (ChamberManager.saveVault, VaultManager.recordOpen) hardcoded SQLite's ON CONFLICT … DO UPDATE syntax instead of branching on the database type. They now use ON DUPLICATE KEY UPDATE on MySQL/MariaDB (matching the existing unique keys), like the other upserts already did. SQLite is unaffected. - Missing message key — /tcp give and /tcp stats against an unknown player rendered Message not found: player-not-found. Added the player-not-found key to messages.yml. (Verified all ~350 code-referenced message keys resolve.) [1.5.13]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    8 downloads
  89. 1.5.12-mc26TrialChamberPro 1.5.12-mc26Jun 17, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.12] - 2026-06-17

    Added
    - Vault economy rewards in loot tables. A pool (or legacy table) can now pay money via Vault with an economy-rewards list — weight (% chance), a fixed amount or a min/max range, and an optional display-name. Works with any Vault economy provider (EssentialsX, CMI, …), deposits on the main thread, and is cleanly skipped (without affecting other loot) when no economy plugin is installed. A native, provider-agnostic alternative to eco give {player} … command rewards. New utils/VaultEconomyHook. - Time-based vault cooldowns now actually work (vaults.normal-cooldown-hours / ominous-cooldown-hours). A positive value reopens the vault that many hours after a player last opened it (tracked per player in player_vaults); the player sees the remaining time when it's still on cooldown. 0 (or negative) keeps the vanilla permanent-until-reset behaviour. Previously any positive value was read but ignored — vaults were always permanent. A chamber reset is still a full unlock regardless of cooldown.
    Fixed
    - Chamber completions were never recorded. chambers_completed was permanently 0, dead-ending the chambers leaderboard, the /tcp stats "Chambers Completed" line, the "Vaults per Chamber" GUI stat, and the %tcp_chambers_completed% / %tcp_leaderboard_chambers% / %tcp_top_chambers_*% placeholders. Completions are now credited to every participant when a chamber is fully cleared (all its trial spawners finish their waves in one run), via the existing ChamberClearedEvent. Toggle with statistics.track-chamber-completion (default on). - `economy-rewards` are no longer dropped when editing a legacy loot table in the GUI — the loot editor's legacy save path carried command-rewards forward but not economy-rewards. - Permissions: tcp.admin.loot (required by /tcp loot) is now declared in plugin.yml, and tcp.admin.loot / tcp.admin.containers / tcp.admin.mobs are now children of tcp.admin.* — so a wildcard grant covers them. (Previously loot was undeclared and containers/mobs weren't under the wildcard.) - Config validation keyed two rules to the wrong section (reset.default-reset-interval / performance.blocks-per-tick); corrected to global.* so those values are actually range-checked at startup.
    Removed
    - No-op config options removed: performance.async-database-operations, performance.use-folialib, and statistics.leaderboard-update-interval were never read by any code (DB is always async, Folia is auto-detected, leaderboard caching is fixed). Leftover entries in an existing config.yml are ignored. Five other never-implemented toggles (protection.allow-pvp, trial-keys.fix-paper-bugs / prevent-duplication / max-stack-size, reset.clear-trial-omen-effect) are now clearly marked not yet implemented in config.yml and the docs.
    Docs
    - Full factual-accuracy sweep of /docs: corrected the spawner-cooldown-minutes / wild-spawner-cooldown-minutes section (reset:, not global:), the /tcp delete & /tcp setexit permission (tcp.admin.create, not tcp.admin.generate), the stale tcp.admin.containers description, the permission hierarchy, a bogus /tcp debug command reference, and the missing tcp.admin.create / tcp.admin.loot permission docs. [1.5.12]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    19 downloads
  90. 1.5.12TrialChamberPro 1.5.12Jun 17, 2026

    [1.5.12] - 2026-06-17

    Added
    - Vault economy rewards in loot tables. A pool (or legacy table) can now pay money via Vault with an economy-rewards list — weight (% chance), a fixed amount or a min/max range, and an optional display-name. Works with any Vault economy provider (EssentialsX, CMI, …), deposits on the main thread, and is cleanly skipped (without affecting other loot) when no economy plugin is installed. A native, provider-agnostic alternative to eco give {player} … command rewards. New utils/VaultEconomyHook. - Time-based vault cooldowns now actually work (vaults.normal-cooldown-hours / ominous-cooldown-hours). A positive value reopens the vault that many hours after a player last opened it (tracked per player in player_vaults); the player sees the remaining time when it's still on cooldown. 0 (or negative) keeps the vanilla permanent-until-reset behaviour. Previously any positive value was read but ignored — vaults were always permanent. A chamber reset is still a full unlock regardless of cooldown.
    Fixed
    - Chamber completions were never recorded. chambers_completed was permanently 0, dead-ending the chambers leaderboard, the /tcp stats "Chambers Completed" line, the "Vaults per Chamber" GUI stat, and the %tcp_chambers_completed% / %tcp_leaderboard_chambers% / %tcp_top_chambers_*% placeholders. Completions are now credited to every participant when a chamber is fully cleared (all its trial spawners finish their waves in one run), via the existing ChamberClearedEvent. Toggle with statistics.track-chamber-completion (default on). - `economy-rewards` are no longer dropped when editing a legacy loot table in the GUI — the loot editor's legacy save path carried command-rewards forward but not economy-rewards. - Permissions: tcp.admin.loot (required by /tcp loot) is now declared in plugin.yml, and tcp.admin.loot / tcp.admin.containers / tcp.admin.mobs are now children of tcp.admin.* — so a wildcard grant covers them. (Previously loot was undeclared and containers/mobs weren't under the wildcard.) - Config validation keyed two rules to the wrong section (reset.default-reset-interval / performance.blocks-per-tick); corrected to global.* so those values are actually range-checked at startup.
    Removed
    - No-op config options removed: performance.async-database-operations, performance.use-folialib, and statistics.leaderboard-update-interval were never read by any code (DB is always async, Folia is auto-detected, leaderboard caching is fixed). Leftover entries in an existing config.yml are ignored. Five other never-implemented toggles (protection.allow-pvp, trial-keys.fix-paper-bugs / prevent-duplication / max-stack-size, reset.clear-trial-omen-effect) are now clearly marked not yet implemented in config.yml and the docs.
    Docs
    - Full factual-accuracy sweep of /docs: corrected the spawner-cooldown-minutes / wild-spawner-cooldown-minutes section (reset:, not global:), the /tcp delete & /tcp setexit permission (tcp.admin.create, not tcp.admin.generate), the stale tcp.admin.containers description, the permission hierarchy, a bogus /tcp debug command reference, and the missing tcp.admin.create / tcp.admin.loot permission docs. [1.5.12]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    14 downloads
  91. 1.5.11-mc26TrialChamberPro 1.5.11-mc26Jun 17, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.11] - 2026-06-17

    Fixed
    - Decorated pots came back empty after a chamber reset. A trial-chamber pot drops its break-loot from an unrolled LootTable (the pot is Lootable), but the snapshot only captured the pot's sherds — so a reset restored the block without its loot table and the pot dropped nothing forever after. Snapshots now capture and re-arm the pot's loot table (or its literal item), so pots refill with fresh loot every cycle. Re-run `/tcp snapshot create` on existing chambers so the new snapshot includes the pot loot tables (old snapshots predate this capture). - Container Loot GUI tooltip rendered `&` colour codes literally (e.g. &ePer-player-loot: &fon). The per-player-loot status was injected as a pre-rendered section-coded string, which broke the lore line's MiniMessage re-parse; it now passes the raw message so colours render.
    Changed
    - Container Loot GUI shows each template as its real container block — a dispenser template displays as a dispenser, a barrel as a barrel, etc., instead of every entry being a generic chest. Makes finding a specific container among 30+ far easier. (Adds a material column to container_template, migrated automatically; templates materialized before 1.5.11 show as a chest until you reset + re-materialize them via the GUI or /tcp container.) - Editing a template from the GUI or `/tcp container edit` now returns to the Container Loot view when you close it — a "back" affordance the deposit-style editor inventory couldn't otherwise offer. In-world sneak edits still just close. [1.5.11]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    11 downloads
  92. 1.5.11TrialChamberPro 1.5.11Jun 17, 2026

    [1.5.11] - 2026-06-17

    Fixed
    - Decorated pots came back empty after a chamber reset. A trial-chamber pot drops its break-loot from an unrolled LootTable (the pot is Lootable), but the snapshot only captured the pot's sherds — so a reset restored the block without its loot table and the pot dropped nothing forever after. Snapshots now capture and re-arm the pot's loot table (or its literal item), so pots refill with fresh loot every cycle. Re-run `/tcp snapshot create` on existing chambers so the new snapshot includes the pot loot tables (old snapshots predate this capture). - Container Loot GUI tooltip rendered `&` colour codes literally (e.g. &ePer-player-loot: &fon). The per-player-loot status was injected as a pre-rendered section-coded string, which broke the lore line's MiniMessage re-parse; it now passes the raw message so colours render.
    Changed
    - Container Loot GUI shows each template as its real container block — a dispenser template displays as a dispenser, a barrel as a barrel, etc., instead of every entry being a generic chest. Makes finding a specific container among 30+ far easier. (Adds a material column to container_template, migrated automatically; templates materialized before 1.5.11 show as a chest until you reset + re-materialize them via the GUI or /tcp container.) - Editing a template from the GUI or `/tcp container edit` now returns to the Container Loot view when you close it — a "back" affordance the deposit-style editor inventory couldn't otherwise offer. In-world sneak edits still just close. [1.5.11]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    8 downloads
  93. 1.5.10-mc26TrialChamberPro 1.5.10-mc26Jun 16, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.10] - 2026-06-16

    Added
    - More PlaceholderAPI placeholders. New: %tcp_kdr% (kill/death ratio), %tcp_current_chamber_reset% (time until the current chamber resets), %tcp_current_chamber_paused%, %tcp_chamber_count% (registered chambers server-wide), %tcp_leaderboard_mobs% (rank by mobs killed), and %tcp_top_mobs_<1-10>_name% / _value%. The previously-implemented-but-undocumented %tcp_top_time_*% board is now documented too. - Full PlaceholderAPI reference added to the docs ([reference/placeholders](https://darkstarworks.gitbook.io/plugins/mc/tcp-documenta… — the complete, accurate list with caching/freshness notes and examples. (The old "full placeholder list" link pointed at a page that didn't exist.)
    Fixed
    - *`%tcp_leaderboard_vaults%` and `%tcp_top_vaults_% now rank by the normal + ominous TOTAL**, matching %tcp_vaults_opened%. They previously ranked by *normal vaults only*, so a player's "vaults" rank could disagree with their displayed vault total. (StatisticsManager.getLeaderboard gains a "vaults"` total option.) - Stale documentation links. Updated all GitBook URLs in MODRINTH.md / SPIGOT.md to the current docs home (darkstarworks.gitbook.io/plugins/mc/tcp-documentation). [1.5.10]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    9 downloads
  94. 1.5.10TrialChamberPro 1.5.10Jun 16, 2026

    [1.5.10] - 2026-06-16

    Added
    - More PlaceholderAPI placeholders. New: %tcp_kdr% (kill/death ratio), %tcp_current_chamber_reset% (time until the current chamber resets), %tcp_current_chamber_paused%, %tcp_chamber_count% (registered chambers server-wide), %tcp_leaderboard_mobs% (rank by mobs killed), and %tcp_top_mobs_<1-10>_name% / _value%. The previously-implemented-but-undocumented %tcp_top_time_*% board is now documented too. - Full PlaceholderAPI reference added to the docs ([reference/placeholders](https://darkstarworks.gitbook.io/plugins/mc/tcp-documenta… — the complete, accurate list with caching/freshness notes and examples. (The old "full placeholder list" link pointed at a page that didn't exist.)
    Fixed
    - *`%tcp_leaderboard_vaults%` and `%tcp_top_vaults_% now rank by the normal + ominous TOTAL**, matching %tcp_vaults_opened%. They previously ranked by *normal vaults only*, so a player's "vaults" rank could disagree with their displayed vault total. (StatisticsManager.getLeaderboard gains a "vaults"` total option.) - Stale documentation links. Updated all GitBook URLs in MODRINTH.md / SPIGOT.md to the current docs home (darkstarworks.gitbook.io/plugins/mc/tcp-documentation). [1.5.10]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    12 downloads
  95. 1.5.9-mc26TrialChamberPro 1.5.9-mc26Jun 16, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.9] - 2026-06-16

    Fixed
    - Per-player chamber container loot was broken for naturally-generated chambers — every container appeared empty. A trial-chamber chest/barrel/dispenser holds its loot as an unrolled vanilla loot table (the inventory is genuinely empty until a player triggers a vanilla open). The feature cancelled that vanilla open and read the empty inventory as the "template", so every player's copy came out empty. Containers are now seeded by rolling the loot table (Bukkit LootTable/Lootable) the first time one is accessed, so copies contain the real generated loot. Single chests, double chests (each half rolled), barrels, dispensers, and droppers are all handled. - The op "edit template" (sneak-open) did nothing — no inventory opened. It only printed a message and deferred to vanilla. Sneak-opening with tcp.admin.containers now opens the shared loot template for editing; changes affect every player's first-open loot. - Container edits never persisted across a reset, and container loot was not restored on reset at all. Two causes: (1) there was no template store — the "template" was just the live block, whose loot table a reset wipes (a block-data restore recreates an empty block entity); (2) the snapshot system never captured containers in the first place. Now: the shared template is stored in a new container_template table and persists across resets (per-player copies still reset for renewable loot), and snapshots capture and restore each container's loot table so a broken or reset container comes back with its loot intact. Existing chambers should re-run `/tcp snapshot create` so their containers are captured under the new format; persisted templates already survive regardless.
    Added
    - Dispensers and droppers are now covered by per-player container loot (chests.per-player-loot), alongside chests, trapped chests, and barrels. - Container loot in the GUI — the chamber screen (/tcp menu <chamber>) gains a Container Loot view: status + template/copy counts, a paginated list of every container template (left-click to edit the shared template inventory, right-click to teleport), and bulk actions to materialize all containers, clear player copies, or reset templates. - `/tcp container` command (tcp.admin.containers) — CLI parity with the GUI: list, materialize, reset, clearcopies, tp <#>, edit <#>. materialize rolls a template for every container in a chamber at once, so loot can be curated before anyone opens it. Tab-completed. - WorldGuard integration is now functional (protection.worldguard-integration, previously a no-op stub). When a WorldGuard region covers a spot inside a chamber and grants the player build rights (region membership, an explicit build allow, or WG bypass), TCP yields and skips its own block-break / block-place / container-access protection there — so region owners and staff can work inside chambers overlapping their regions. Where there's no region (or no build rights), TCP protection applies as before. [1.5.9]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    16 downloads
  96. 1.5.9TrialChamberPro 1.5.9Jun 16, 2026

    [1.5.9] - 2026-06-16

    Fixed
    - Per-player chamber container loot was broken for naturally-generated chambers — every container appeared empty. A trial-chamber chest/barrel/dispenser holds its loot as an unrolled vanilla loot table (the inventory is genuinely empty until a player triggers a vanilla open). The feature cancelled that vanilla open and read the empty inventory as the "template", so every player's copy came out empty. Containers are now seeded by rolling the loot table (Bukkit LootTable/Lootable) the first time one is accessed, so copies contain the real generated loot. Single chests, double chests (each half rolled), barrels, dispensers, and droppers are all handled. - The op "edit template" (sneak-open) did nothing — no inventory opened. It only printed a message and deferred to vanilla. Sneak-opening with tcp.admin.containers now opens the shared loot template for editing; changes affect every player's first-open loot. - Container edits never persisted across a reset, and container loot was not restored on reset at all. Two causes: (1) there was no template store — the "template" was just the live block, whose loot table a reset wipes (a block-data restore recreates an empty block entity); (2) the snapshot system never captured containers in the first place. Now: the shared template is stored in a new container_template table and persists across resets (per-player copies still reset for renewable loot), and snapshots capture and restore each container's loot table so a broken or reset container comes back with its loot intact. Existing chambers should re-run `/tcp snapshot create` so their containers are captured under the new format; persisted templates already survive regardless.
    Added
    - Dispensers and droppers are now covered by per-player container loot (chests.per-player-loot), alongside chests, trapped chests, and barrels. - Container loot in the GUI — the chamber screen (/tcp menu <chamber>) gains a Container Loot view: status + template/copy counts, a paginated list of every container template (left-click to edit the shared template inventory, right-click to teleport), and bulk actions to materialize all containers, clear player copies, or reset templates. - `/tcp container` command (tcp.admin.containers) — CLI parity with the GUI: list, materialize, reset, clearcopies, tp <#>, edit <#>. materialize rolls a template for every container in a chamber at once, so loot can be curated before anyone opens it. Tab-completed. - WorldGuard integration is now functional (protection.worldguard-integration, previously a no-op stub). When a WorldGuard region covers a spot inside a chamber and grants the player build rights (region membership, an explicit build allow, or WG bypass), TCP yields and skips its own block-break / block-place / container-access protection there — so region owners and staff can work inside chambers overlapping their regions. Where there's no region (or no build rights), TCP protection applies as before. [1.5.9]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    5 downloads
  97. 1.5.8-mc26TrialChamberPro 1.5.8-mc26Jun 14, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.8] - 2026-06-14

    Added
    - Hologram vault feedback (vaults.feedback.mode, default TEXT = unchanged). Switch to HOLOGRAM and the chat lines for every vault outcome are replaced by a floating green ✔ / red ✘ above the vault — shown only to the player who interacted, so looters get a clean, glanceable result instead of a column of [TCP] chat. Covers all outcomes: a tick on a successful open, a cross on every failure (no key, wrong key type, on cooldown/locked, can't afford a reopen). Each result is paired with a configurable sound (defaults to the pillager celebrate cheer for success and the pillager grumble for failure) and despawns after a configurable duration. Position, scale, see-through, the symbols themselves, and both sounds are all tunable under vaults.feedback.hologram / vaults.feedback.sounds. Particles and advancements are unaffected, so existing setups keep their sparkles either way. [1.5.8]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    16 downloads
  98. 1.5.8TrialChamberPro 1.5.8Jun 14, 2026

    [1.5.8] - 2026-06-14

    Added
    - Hologram vault feedback (vaults.feedback.mode, default TEXT = unchanged). Switch to HOLOGRAM and the chat lines for every vault outcome are replaced by a floating green ✔ / red ✘ above the vault — shown only to the player who interacted, so looters get a clean, glanceable result instead of a column of [TCP] chat. Covers all outcomes: a tick on a successful open, a cross on every failure (no key, wrong key type, on cooldown/locked, can't afford a reopen). Each result is paired with a configurable sound (defaults to the pillager celebrate cheer for success and the pillager grumble for failure) and despawns after a configurable duration. Position, scale, see-through, the symbols themselves, and both sounds are all tunable under vaults.feedback.hologram / vaults.feedback.sounds. Particles and advancements are unaffected, so existing setups keep their sparkles either way. [1.5.8]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    13 downloads
  99. 1.5.7-mc26TrialChamberPro 1.5.7-mc26Jun 10, 2026
    This plugin version is compatible with Minecraft 26.X.X

    [1.5.7] - 2026-06-10

    Added
    - Per-player chamber container loot (chests.per-player-loot, opt-in). Lootr-style: every player who opens a chest, trapped chest, or barrel inside a registered chamber gets their own private copy of its contents — the second player into a chamber no longer finds gutted chests. The real container is never modified (it stays the pristine template each player's copy is cloned from on first open); copies persist in a new player_container_loot table, survive restarts, and reset with the chamber so every cycle is fresh loot for everyone. Double chests share one copy. Hopper automation in/out of chamber containers is blocked while enabled (it would drain or pollute the shared template). Containers placed by players inside chambers are tagged at place time and keep vanilla behaviour. Admins with tcp.admin.containers (default op) sneak-click to open the real container and edit the template — a normal click gives them their own copy like any player, so the feature can't be silently "broken for ops only". Together with per-player vaults, the entire chamber is now per-player. Decorated pots are deliberately excluded (their loot is break-based and already renews via chamber resets). - Wild vault placement blocked (protection.block-wild-vault-placement, default on). Placing a functioning VAULT block outside a registered chamber is now cancelled with a friendly message — a wild vault is a permanent vanilla loot dispenser TCP can't manage (no per-player tracking, no resets, no loot tables). Players with tcp.bypass.vaultplace (default op) are exempt, so creative builds and crate setups are unaffected. - Key-to-reopen vaults (vaults.reopen-cost-keys, default 0 = off). Players can open an already-used vault again by paying the configured number of matching trial keys in total (a fresh open costs 1, so 1 = reopen at the same price, 2 = one extra key). Keys are taken from the main hand; the cooldown/locked message is replaced by a price hint when the player can't afford it. Covers the key-gated-reopen model popularized by single-feature vault-reset plugins while keeping TCP's time/reset-based cooldowns as the default. - Vanilla / datapack loot-table passthrough in loot.yml. A pool entry of type: VANILLA_TABLE with table: "namespace:path" (e.g. minecraft:chests/trial_chambers/reward or any datapack key) populates the referenced server loot table when rolled and adds every generated stack to the drop. Resolved via the Bukkit LootTable API at roll time on the player's region thread; unknown keys log a warning and yield nothing without breaking the rest of the pool. Examples documented at the bottom of loot.yml. - Clickable `/tcp list`. Each chamber line is now interactive for players: click the chamber name to copy it to the clipboard (hover hint included), or click the new [menu] button to jump straight into that chamber's GUI detail view. Backed by a new /tcp menu <chamber> deep-link (tab-completed; same tcp.admin.menu permission). Console output keeps the plain localized format. - Anonymous usage metrics (bStats). Aggregate, non-personal charts that guide development: database backend, discovery enabled, glow mode, chamber-count bucket, and which premium modules are installed. Opt out via metrics.enabled: false or the global bStats config. [1.5.7]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    31 downloads
  100. 1.5.7TrialChamberPro 1.5.7Jun 10, 2026

    [1.5.7] - 2026-06-10

    Added
    - Per-player chamber container loot (chests.per-player-loot, opt-in). Lootr-style: every player who opens a chest, trapped chest, or barrel inside a registered chamber gets their own private copy of its contents — the second player into a chamber no longer finds gutted chests. The real container is never modified (it stays the pristine template each player's copy is cloned from on first open); copies persist in a new player_container_loot table, survive restarts, and reset with the chamber so every cycle is fresh loot for everyone. Double chests share one copy. Hopper automation in/out of chamber containers is blocked while enabled (it would drain or pollute the shared template). Containers placed by players inside chambers are tagged at place time and keep vanilla behaviour. Admins with tcp.admin.containers (default op) sneak-click to open the real container and edit the template — a normal click gives them their own copy like any player, so the feature can't be silently "broken for ops only". Together with per-player vaults, the entire chamber is now per-player. Decorated pots are deliberately excluded (their loot is break-based and already renews via chamber resets). - Wild vault placement blocked (protection.block-wild-vault-placement, default on). Placing a functioning VAULT block outside a registered chamber is now cancelled with a friendly message — a wild vault is a permanent vanilla loot dispenser TCP can't manage (no per-player tracking, no resets, no loot tables). Players with tcp.bypass.vaultplace (default op) are exempt, so creative builds and crate setups are unaffected. - Key-to-reopen vaults (vaults.reopen-cost-keys, default 0 = off). Players can open an already-used vault again by paying the configured number of matching trial keys in total (a fresh open costs 1, so 1 = reopen at the same price, 2 = one extra key). Keys are taken from the main hand; the cooldown/locked message is replaced by a price hint when the player can't afford it. Covers the key-gated-reopen model popularized by single-feature vault-reset plugins while keeping TCP's time/reset-based cooldowns as the default. - Vanilla / datapack loot-table passthrough in loot.yml. A pool entry of type: VANILLA_TABLE with table: "namespace:path" (e.g. minecraft:chests/trial_chambers/reward or any datapack key) populates the referenced server loot table when rolled and adds every generated stack to the drop. Resolved via the Bukkit LootTable API at roll time on the player's region thread; unknown keys log a warning and yield nothing without breaking the rest of the pool. Examples documented at the bottom of loot.yml. - Clickable `/tcp list`. Each chamber line is now interactive for players: click the chamber name to copy it to the clipboard (hover hint included), or click the new [menu] button to jump straight into that chamber's GUI detail view. Backed by a new /tcp menu <chamber> deep-link (tab-completed; same tcp.admin.menu permission). Console output keeps the plain localized format. - Anonymous usage metrics (bStats). Aggregate, non-personal charts that guide development: database backend, discovery enabled, glow mode, chamber-count bucket, and which premium modules are installed. Opt out via metrics.enabled: false or the global bStats config. [1.5.7]: https://github.com/darkstarworks/TrialChamberPro/compare/…
    13 downloads

Similar projects

Plugin →