Release 1.8.0#421
Conversation
…e4b1f0 ci: bump pinned reusable workflow to fe4b1f0
…ca2dcd1 ci: bump pinned publish-platforms.yml to ca2dcd1
The player panel only checked the global remove-complete-one-time-challenges setting; the per-challenge "remove when completed" flag set in the admin editor was never consulted, so it silently did nothing. Fixes #337 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
New gui-settings option (default off) that skips only the location-on-island check when opening /challenges. Completion checks in TryToComplete are unchanged, so island protection still applies when actually completing challenges. Fixes #349 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Normal completion via TryToComplete validated level completion after marking a challenge complete, but the admin command and admin GUI called setChallengeComplete directly, so a level whose last challenge was admin-completed never registered as complete. Fixes #385 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Honour per-challenge removeWhenCompleted flag in player GUI
Add setting to open the challenges GUI while off-island
…el-check Run level-completion check when challenges are completed by admins
When a potion material was in the ignore-metadata list, items were matched by Material alone, so any potion matched any other potion and removal could consume the wrong ones. Now potion-like items (POTION, SPLASH_POTION, LINGERING_POTION, TIPPED_ARROW) still compare their base PotionType while ignoring other metadata. Fixes #320 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Covers the removal checklist from #111: items taken (and not taken), block and entity removal for island challenges, money/XP consumption in the full completion flow, and that nothing is consumed when a requirement fails. Tests added: - testInventoryChallengeWithTakeItemsTrue: verifies items removed when takeItems=true - testInventoryChallengeWithTakeItemsFalse: verifies items NOT removed when takeItems=false - testInventoryChallengeMultipleItemsRemoved: verifies multiple item types removed correctly - testIslandChallengeWithRemoveBlocksTrue: verifies blocks set to AIR when removeBlocks=true - testIslandChallengeWithRemoveBlocksFalse: verifies blocks NOT removed when removeBlocks=false - testIslandChallengeWithRemoveEntitiesTrue: verifies entities removed when removeEntities=true - testIslandChallengeWithRemoveEntitiesFalse: verifies entities NOT removed when removeEntities=false - testOtherChallengeMoneyWithdrawn: verifies money withdrawn when takeMoney=true - testOtherChallengeMoneyNotWithdrawn: verifies money NOT withdrawn when takeMoney=false - testOtherChallengeExperienceWithdrawn: verifies XP taken when takeExperience=true - testOtherChallengeExperienceNotWithdrawn: verifies XP NOT taken when takeExperience=false - testInventoryChallengeFailureDoesNotRemoveItems: verifies no items removed on requirement failure - testIslandChallengeBlockRemovalFailureDoesNotRemoveBlocks: verifies no blocks removed on failure - testIslandChallengeEntityRemovalFailureDoesNotRemoveEntities: verifies no entities removed on failure - testOtherChallengeFailureDoesNotWithdrawMoney: verifies no money withdrawn on failure - testOtherChallengeFailureDoesNotWithdrawExperience: verifies no XP taken on failure - testMultipleInventoryItemsPartialRemovalFailure: verifies no items removed if any item requirement fails Part of #111 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Fixes #352 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Challenges and challenge levels can now grant island levels on completion (rewardIslandLevel / repeatIslandLevel, default 0). Applied only when the Level addon is present. Repeat rewards multiply by the completion factor, consistent with money and XP. Fixes #279 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
New rewardChance percentage on challenges (default 100, so nothing changes for existing data). For first-time completion one roll gates the item, money, and XP rewards together; repeat completions roll once per completion instance. Reward commands and completion state are never gated. Fixes #76 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Add challenge completion percentage placeholders
Add tests verifying consumption/removal on challenge completion
Remove the always-false inventory null check (User#getInventory is non-null for players), use Stream.toList(), use pattern-matching instanceof in Utils, and drop an unused test variable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Extract the three identical island-level reward blocks into a single rewardIslandLevel() helper. This also fixes the reward being applied once per team member: the island is shared, so it is now applied once per completion, outside the recipient loops. Exclude the Gson data objects from copy-paste detection: their accessors are intentionally identical bean boilerplate across Challenge, ChallengeLevel and ChallengesPlayerData. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Translate the new challenges.gui.buttons.reward_chance strings into cs, de, es, fr, hu, ja, lv, pl, pt, ru, uk, zh-CN, zh-HK and zh-TW, matching each file's existing formatting style. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Keep both the #320 potion tests and the #111 consumption tests in TryToCompleteTest. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
…data Compare base potion type when metadata is ignored
Combine the island-level reward tests with the #320 potion tests and #111 consumption tests in TryToCompleteTest. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Add island level rewards via the Level addon
Resolve overlaps with the island level reward feature (#411): both GUI buttons kept (reward chance at slot 37, island level at 38), both copy() lines and helper methods kept, and all test groups combined. The reward chance gates item/money/XP rewards; island level rewards, like commands, are not gated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Add optional per-challenge reward chance
generateLevelDescription() fell back to the level's unlock
("Congratulations...") message as the lore description regardless of
whether the level was unlocked, so a locked level showed the congrats
text while its status read "locked / N challenges to go".
Gate the fallback on levelStatus.isUnlocked() so a locked level keeps
its status text and only unlocked levels show the unlock message.
Added CommonPanelTest coverage asserting getUnlockMessage() is not
consulted for a locked level and is for an unlocked one.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
The confirmation conversation only accepts specific words (confirm / cancel / ...) but the prompt never said so, so players didn't know they had to type "confirm" in chat. createConfirmation() now appends a locale-driven instruction line to the question via a new confirm-instruction locale string, so every confirmation (import, reset, wipe, ...) tells the player what to type. Translators can localise the sentence and their own confirm/deny words. Extracted the assembly into ConversationUtils.appendConfirmationInstruction and added JUnit coverage for both the appended and empty-locale cases. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
The include-undeployed setting (whether undeployed challenges count towards level completion) existed in Settings and the admin GUI but was missing from the shipped config.yml, so admins couldn't discover it without reading the source. Add it to config.yml with a description, and fix the "undepolyed" typo and clarify the wording in the Settings ConfigComment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Fix #323: hide level unlock message on locked levels
- S1192: extract the duplicated "click-to-add" literal into Constants.CLICK_TO_ADD and use it in all three spots. - S6204: MultiBiomeSelector.getElements collects with toCollection(ArrayList::new) — the list must stay mutable because UnifiedMultiSelector's constructor sorts it in place (Stream.toList() would be immutable and throw at runtime). - S7158: use StringBuilder.isEmpty() in Utils.prettifyBiome. - S6541: keep the biome button out of the already-oversized createIslandRequirementButton "brain method" entirely — dispatch REQUIRED_BIOMES straight to a self-contained createBiomeRequirementButton from the outer switch, leaving the island method unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Add biome requirement to island challenges (#335)
- Bump build.version 1.7.0 -> 1.8.0 (1.7.0 is already released). - CLAUDE.md: correct stale dependency facts (Paper 1.21.11-R0.1-SNAPSHOT, BentoBox 3.14.0; note addon.yml api-version 3.12.0). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
There was a problem hiding this comment.
Pull request overview
Release 1.8.0 merge bringing multiple player/admin GUI, challenge-completion, and configuration enhancements into master, alongside expanded test coverage and updated release tooling/docs.
Changes:
- Added new challenge mechanics and settings: per-challenge reward chance, island level rewards (Level addon), biome requirements for island challenges, and “open GUI anywhere”.
- Completed/extended GUI behavior: toggleable undeployed-challenge view mode, default lore text colors, and improved confirmation prompts.
- Added/updated placeholders and expanded automated tests (including consumption/removal scenarios and GUI filtering).
Reviewed changes
Copilot reviewed 46 out of 46 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/world/bentobox/challenges/utils/UtilsTest.java | Adds unit tests for default-color application and biome prettification helpers. |
| src/test/java/world/bentobox/challenges/tasks/TryToCompleteTest.java | Adds extensive tests for reward chance, biome requirement, island-level rewards, potion ignore-metadata behavior, and consumption/removal. |
| src/test/java/world/bentobox/challenges/panel/user/ChallengesPanelTest.java | New tests for “remove when completed” and undeployed-visibility filtering behavior in the user panel. |
| src/test/java/world/bentobox/challenges/panel/ConversationUtilsTest.java | Adds tests ensuring confirmation instructions are appended when present. |
| src/test/java/world/bentobox/challenges/panel/CommonPanelTest.java | Adds tests ensuring locked levels don’t leak unlock (“Congratulations”) lore. |
| src/test/java/world/bentobox/challenges/commands/ChallengesCommandTest.java | Adds tests for open-anywhere allowing GUI access off-island under protection. |
| src/test/java/world/bentobox/challenges/ChallengesAddonTest.java | Adds tests asserting new placeholders are registered. |
| src/main/resources/panels/main_panel.yml | Adds a toggle button slot for TOGGLEABLE undeployed-view-mode. |
| src/main/resources/locales/zh-TW.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/zh-HK.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/zh-CN.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/uk.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/ru.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/pt.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/pl.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/lv.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/ja.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/hu.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/fr.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/es.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/en-US.yml | Adds biome selector strings, undeployed toggle strings, reward chance/island level strings, open-anywhere strings, and confirm-instruction/wrong-biome. |
| src/main/resources/locales/de.yml | Adds locale entries for reward chance. |
| src/main/resources/locales/cs.yml | Adds locale entries for reward chance. |
| src/main/resources/config.yml | Documents/ships open-anywhere, default text colors, and include-undeployed; updates TOGGLEABLE docs. |
| src/main/java/world/bentobox/challenges/utils/Utils.java | Adds potion-like base-type comparison, biome prettification, and default-color lore prefixing. |
| src/main/java/world/bentobox/challenges/utils/Constants.java | Adds new constants for click-to-add and confirm-instruction keys. |
| src/main/java/world/bentobox/challenges/tasks/TryToComplete.java | Implements reward-chance gating, island-level rewards, biome requirement checks, level-completion refactor, and potion-aware ignore-metadata matching. |
| src/main/java/world/bentobox/challenges/panel/util/MultiBiomeSelector.java | New biome multi-selector backed by the biome registry with heuristic icons and prettified names. |
| src/main/java/world/bentobox/challenges/panel/user/ChallengesPanel.java | Implements TOGGLEABLE undeployed filtering and adds a per-session “toggle undeployed” button. |
| src/main/java/world/bentobox/challenges/panel/ConversationUtils.java | Appends localized “type confirm/cancel” instruction to confirmation prompts. |
| src/main/java/world/bentobox/challenges/panel/CommonPanel.java | Applies default lore colors, adds biome lore rendering, and prevents locked-level unlock-message leakage. |
| src/main/java/world/bentobox/challenges/panel/admin/ListUsersPanel.java | Ensures admin completion triggers a level completion re-check. |
| src/main/java/world/bentobox/challenges/panel/admin/EditSettingsPanel.java | Adds admin GUI toggle for open-anywhere. |
| src/main/java/world/bentobox/challenges/panel/admin/EditLevelPanel.java | Adds island-level reward editing for levels. |
| src/main/java/world/bentobox/challenges/panel/admin/EditChallengePanel.java | Adds biome requirement editing and reward chance/island level reward editing. |
| src/main/java/world/bentobox/challenges/managers/ChallengesManager.java | Adds tryCompleteLevel/tryCompleteLevelAdmin helpers with shared validation logic. |
| src/main/java/world/bentobox/challenges/database/object/requirements/IslandRequirements.java | Adds requiredBiomes storage with copy/serialization support. |
| src/main/java/world/bentobox/challenges/database/object/ChallengeLevel.java | Adds rewardIslandLevel to level data model. |
| src/main/java/world/bentobox/challenges/database/object/Challenge.java | Adds rewardChance, island-level rewards, and repeat island-level rewards to challenge model. |
| src/main/java/world/bentobox/challenges/config/Settings.java | Adds openAnywhere, description/reward default colors, and improves config docs. |
| src/main/java/world/bentobox/challenges/commands/ChallengesPlayerCommand.java | Allows GUI opening off-island when open-anywhere is enabled. |
| src/main/java/world/bentobox/challenges/commands/admin/CompleteCommand.java | Ensures admin completions can trigger admin level completion. |
| src/main/java/world/bentobox/challenges/ChallengesAddon.java | Registers new completion-percent placeholders (overall + latest level). |
| pom.xml | Bumps build version to 1.8.0 and adds Sonar CPD exclusions for bean-like data objects. |
| CLAUDE.md | Updates dev-doc dependency/runtime version notes. |
| .github/workflows/publish.yml | Updates pinned reusable publish workflow SHA. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Boots a real Paper 1.21.11 server with BentoBox 3.14.0 + BSkyBlock 1.20.0 + the Maven-built Challenges jar, and drives a headless Mineflayer bot to verify in-game behaviour the MockBukkit unit tests can't. A separate Gradle sidecar under e2e/ (does not touch the Maven build). Uses useExternalPluginsOnly + writeFiles to deploy prebuilt jars; BentoBox addons are staged into plugins/BentoBox/addons/ so they register as gamemodes (the non-obvious part — dropping them in plugins/ leaves the gamemode world uncreated and every gamemode command "Unknown"). Tests (src/test/e2e/challenges.spec.ts): - smoke: bot joins 1.21.11, ops, runs a command, receives the reply. - #329: opens the Challenges admin GUI, clicks Challenge Wipe, and asserts the confirmation instruction line added in #415 ("Type 'confirm' ... or 'cancel' ...") — an end-to-end validation of a 1.8.0 feature in-game. CI: .github/workflows/e2e.yml runs it on demand (workflow_dispatch) — advisory/opt-in, not wired to every PR yet. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
- workflow_dispatch input to filter by test name (-PtestNames) - 25-min job timeout - cache Paper jar + libraries + BentoBox/BSkyBlock deps + npm modules - always upload server log + plugwright report as an artifact (so a regression failure is debuggable) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
- S7630 (BLOCKER, script injection): bind inputs.test_names to a
TEST_NAMES env var and reference it as a quoted shell variable instead
of interpolating ${{ inputs.* }} directly into the run block.
- S7637 (MAJOR, unpinned action): pin gradle/actions/setup-gradle to the
v4.4.4 commit SHA.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Spike: plugwright in-game E2E tests (validates #329 on 1.8.0)
The on-demand E2E run failed in CI with "Server version '1.21.11' is not supported. Latest supported version is '1.21.4'." — without a committed package-lock.json, CI's fresh npm install resolved an older mineflayer/minecraft-data than the local run, and it didn't know 1.21.11. Commit the lockfile (mineflayer 4.37.1 / minecraft-data 3.111.0, which support 1.21.11) so installs are reproducible, and key the npm cache on the lockfile (also invalidates the stale node_modules the failed run cached under the package.json hash). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NKxodNE4h3TsSHMqDEeC8v
Fix E2E CI: pin mineflayer via committed lockfile (1.21.11 support)
Extends the plugwright in-game suite with two tests that drive the admin Settings GUI on a live Paper 1.21.11 server: - open-anywhere (#349): the new "Open GUI Anywhere" Elytra toggle renders and its click-handler flips + persists the setting. - include-undeployed (#179): the "Include Undeployed Challenges" barrel toggle now shipped in config.yml behaves the same way. Both are self-restoring (read state, flip, assert, flip back) so they are independent of the persisted run-dir config and of test ordering. Shared openSettingsPanel()/expectToggleFlips() helpers; LiveGuiHandle/ GuiItemLocator types derived from PlayerWrapper since the package does not re-export them. README coverage list updated. Full suite: 4/4 pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DfEq1X2sy57G8nq2Cd23ba
- ChallengesAddon.allLoaded(): reset levelProvided=false when the Level add-on is absent, so isLevelProvided() can't be stale-true and TryToComplete.rewardIslandLevel() can't NPE on a null level add-on. - EditChallengePanel: sort the required-biome list before rendering so the admin GUI description is stable (the backing set is unordered). - ChallengesPanel.createToggleUndeployedButton(): guard the template description with !isBlank() to avoid inserting empty lore lines, matching the other button builders. - ChallengesAddonTest: verify placeholder registration with atLeastOnce() instead of times(13) so the tests don't break whenever a placeholder is added or removed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DfEq1X2sy57G8nq2Cd23ba
|
Thanks for the review — all five points are addressed in #425 (into
I'll merge #425 before this one goes out. |
1.8.0 in-game test plan (pre-release)Run against a live server: BentoBox 3.14.0 + a game mode (BSkyBlock) + Level + Vault (+ PlaceholderAPI for the placeholder checks). The plugwright E2E already covers the #329 confirmation instruction and the admin-GUI toggle wiring for #349/#179 — the list below is the runtime behaviour that still needs a human on an island. Setup
Per-challenge reward chance (#76)
Island level rewards (#279) — needs Level addon
Biome requirement (#335)
TOGGLEABLE undeployed-view-mode (#175)
Default text colour (#340)
Placeholders (#352) — needs PlaceholderAPI
Open GUI off-island (#349)
include-undeployed (#179)
Locked-level "Congratulations" leak (#323)
removeWhenCompleted in the player GUI (#337)
Admin-completed level check (#385)
Ignore meta-data potion (#320)
Confirmation prompts (#329) — quick sanity (covered by E2E)
|
Address Copilot review on the 1.8.0 release PR (#421)
…finite New challenges created in the GUI defaulted to maxTimes = 1, so toggling repeatable had no effect: the completion check blocks once the count reaches maxTimes. Default maxTimes to 0 (unlimited), matching the template importer's default. Also make the Repeat Count button explain that 0 means unlimited: the description says so, the current-value lore shows "(infinite)" when the value is 0, and the chat input prompt mentions it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
Add translations for the 28 keys missing from all 14 locale files: the new repeat-count strings (value-infinite, input-repeat-count, the 0-means-unlimited description line) plus the 1.8.0 keys that were never translated (biome requirements, open-anywhere, island level rewards, undeployed challenges toggle, confirm-instruction, wrong-biome). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
The REPEAT_REWARD_ITEMS click handler passed getRewardItems() to ItemSelector, so the selector displayed the first-time rewards instead of the repeat rewards, and saving silently copied them into repeatItemReward. Pass getRepeatItemReward() instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
A failed reward chance roll was silent, making it indistinguishable from a bug. Send a "no reward this time" message when the roll fails on first completion, or when every roll fails on a repeat, but only if the challenge actually has chance-gated rewards (items, money or experience) configured. Add the locale key to en-US and all translations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
Dependabot alert #1: uuid < 11.1.1 has a missing buffer bounds check in v3/v5/v6 when buf is provided. It reaches the E2E lockfile transitively via @azure/msal-node (8.3.2) and yggdrasil (10.0.0) under mineflayer. Force 11.1.1 with an npm override; test-only dependency, nothing ships in the addon jar. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
A reward chance of 0% would mean rewards are never given, which is never a sensible configuration. Clamp setRewardChance to 1-100, raise the GUI numeric input minimum from 0 to 1, and update the button description in all locales from (0-100) to (1-100). Hand-edited database values of 0 still load and behave as "never rewards" since Gson bypasses the setter. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
The conversation validation accepts min and max themselves, but the not-valid-value message claimed the number must be "greater than [min] and less than [max]". Reword to "between [min] and [max] inclusive" in en-US and all translations, and fix the broken [valor] placeholder in the Portuguese string. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
The "Input Text:" echo in the description conversation showed raw MiniMessage tags (e.g. <red>bread</red>) instead of rendering them. Parse each echoed line through BentoBox's MiniMessage/legacy bridge so the player sees the colors they will actually get. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
The description-color and reward-text-color config comments described only legacy '&' codes, but MiniMessage tags are the primary format now. Verified end-to-end that '<white>', '<#55FFFF>', '<color:#55FFFF>', '&b' and '7FFFF' all render correctly through applyDefaultColor → translateColorCodes → parseMiniMessageOrLegacy, and updated the config comments and javadoc to match. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
The key appeared twice in the gui.tips section with identical values, causing a YamlConstructor duplicate-keys warning on server load. Scanned all resource YAML files for other duplicate keys; this was the only one. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016uXwirQRfvEkRThWELRcM2
|



Release 1.8.0 — merges
developintomaster. (build.versionbumped 1.7.0 → 1.8.0; 1.7.0 was released 2026-07-01.)✨ Features
TOGGLEABLEundeployed-view-mode — a per-player button to show/hide undeployed challenges (finishes the previously-unimplemented mode) (Not show Challenges that are not deployed. #175)gui-settings.description-color/reward-text-colorso admins needn't prefix every challenge's text (lore-length readded + Ability to set some GUI default colors #340)challenges_completed_percentplaceholder (Placeholder: Challenge Progress Placeholder in the Panel or GlobalPlaceholder #352)gui-settings.open-anywhere(/challenges without having to be on the island #349)include-undeployedsetting now shipped inconfig.ymland documented (Uncountable in missing challenges #179)🐛 Fixes
removeWhenCompletedflag (Challenges Bug - OneTime challenge not dissapearing #337)confirm/cancel(Suggestion: Improve challenges confirmation (Please confirm that you want to replace your current challenges with new one.) #329)🧰 Internal
CLAUDE.mdFull release notes to follow.