Tags
Creators
Details
3.22.3
Compatibility
Changes
Thhis is mostly a bug fix and API related update.
Release Highlights
- š² Dialog grid layout ā
DialogBuildercan now lay buttons out in a configurable number of columns with per-button widths, enabling grids, maps, and pickers without leaving the API. Used in the latest ChunkBlock. - āļø bStats metrics opt-out ā new
general.metricstoggle lets server owners disable BentoBox's anonymous usage statistics independently of the global bStats switch. - š”ļø Paper 26.2 & Adventure 5 ā BentoBox now compiles and runs against Paper 26.2, bringing Adventure 5 API changes that addon authors should be aware of.
- š Player head 429 spam fixed ā heads with missing textures no longer trigger repeated Mojang session-server lookups that flood the console with rate-limit errors.
- š YAML numeric type widening ā config values like
20written without a decimal point now correctly load intodouble,float, andlongfields instead of throwingClassCastException.
Compatibility
āļø Paper Minecraft 1.21.x ā 1.21.11 (26.2) āļø Java 21+
Upgrading
- As always, take backups just in case. (Make a copy of everything!)
- Stop the server.
- Replace the BentoBox jar with this one.
- Restart the server.
- You should be good to go!
āļø New config option:
general.metricshas been added toconfig.yml(defaulttrue). Set it tofalseand restart to disable BentoBox's bStats telemetry. The global switch inplugins/bStats/config.ymlstill works as before.
šŗ Addon authors ā Adventure 5 changes: Paper 26.2 ships Adventure 5, which seals
Component(Mockito can no longer mock it) and replacesClickEvent.value()withpayload(). See PR #3067 for the full removal list and migration notes. Addons already deployed against a 26.2 server may already be affected at runtime; recompiling against BentoBox 3.22.3 will surface any issues at compile time.
Legend
- āļø config options have been removed, renamed, or added.
- šŗ special attention needed.
New Features
š² Dialog Grid Layout
[PR #3066]
DialogBuilder#columns(int) lays a multi-action dialog's buttons out in a grid instead of the default two-wide list. DialogButton gains a width parameter (1ā1024) matching Paper's ActionButton sizing, plus withWidth(int) for resizing existing buttons. Existing callers are unaffected ā omitting columns and width preserves the client's default behaviour.
āļø bStats Metrics Opt-Out
[PR #3065]
A new general.metrics setting (default true) in config.yml lets server owners disable BentoBox's bStats telemetry without touching the global bStats config. When set to false, no metrics collector is registered and no data is submitted. Changing this setting requires a server restart.
Bug Fixes
Player Head Texture-Less Profile Spam
[PR #3063]
Opening a panel with player heads (e.g. a top-ten list) could flood the console with HTTP 429 errors from sessionserver.mojang.com. This happened because HeadGetter delivered profiles without texture data, causing the server to re-resolve them on every panel open. Now, heads without a usable texture degrade to a plain head instead of triggering repeated lookups, and a failed fetch no longer evicts a cached head that already has a working texture.
YAML Numeric Type Widening
[PR #3068]
YAML types a number by how it is written: 20 loads as Integer regardless of the declared field type. A double config field written without a decimal point reached the setter as an Integer, and inside collections, generic erasure hid the mismatch until the first read threw ClassCastException. A new widen() helper now correctly promotes Integer to Double, Float, or Long as needed, while deliberately refusing to silently narrow Double to Integer or Long.
Literal Color Names in Panels
A previous refactor replaced deprecated ChatColor constants with NamedTextColor in string concatenations, but NamedTextColor.WHITE.toString() returns the word "white", not a color code ā so the Management panel showed addon names like "whiteChallenges". Fixed by using MiniMessage tags instead.
Other Improvements
- šŗ Paper 26.2 & Adventure 5 ā Compiled against Paper 26.2 (
build.111-stable) with MockBukkit 4.116.1. See the addon author note above for API removals. [PR #3067] - Removed workarounds for 26.2 symbols that were missing at compile time ā
SULFUR_CUBEis nowstatic finalagain, and tests use the real entity type directly (ā87 lines). [PR #2994] - Published JSON Schemas (draft 2020-12) for the
.blueprintand blueprint-bundle file formats, covering blocks, spawners, entities, display entities, and item frames. - Referenced the new org-wide privacy policy, AI policy, and contributing guidelines from the README.
What's Changed
- š² Lay dialog buttons out in a grid: columns and button width by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3066
- āļø Add general.metrics config toggle to opt out of bStats by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3065
- Do not put texture-less profiles on player heads by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3063
- Fix: widen YAML-loaded numbers to the declared numeric field type by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3068
- šŗ Compile against Paper 26.2 now that MockBukkit supports it by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/3067
- Drop the workarounds for 26.2 symbols missing at compile time by @tastybento in https://github.com/BentoBoxWorld/BentoBox/pull/2994
Full Changelog: https://github.com/BentoBoxWorld/BentoBox/compare/3.22.2...3.22.3
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:aBVLHiAW:mbwznE5M"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:aBVLHiAW:mbwznE5M"
}

