Building Gadgets Extra 0.0.4 - Forge 1.20.1
Curse Maven Snippet
What's new
Changelog
0.0.4 — 2026-09-02
Fixed
- Fixed the Builder's Multitool energy capability on NeoForge 26.1.2.
- Fixed the Builder's Multitool recipe on Minecraft 26.1.2 after the ingredient JSON format changed.
- Fixed multitool Cut execution on Forge 1.20.1 and NeoForge 26.1.2.
- Fixed Cut energy/reporting so only blocks that actually pass validation are counted.
- Prevented the upstream empty-Cut crash path on NeoForge 1.21.1 and 26.1.2.
- Fixed Forge 1.20.1 Builder's Multitool range changes being rejected by Building Gadgets 2's concrete gadget-type check.
- Fixed fresh multitool profiles resolving to the wrong upstream fallback mode; Build, Exchange, Copy/Paste, and Cut/Paste now start on their intended native modes.
- Isolated multitool UUIDs, undo histories, template state, general gadget settings, bound inventory position/side, and active-profile energy costs.
- Restored the native Cut/Paste
Paste Replacedefault for multitool Cut profiles. - Restored busy-operation checks when exporting multitool Cut templates.
- Bound structure uploads to the initiating gadget/profile and revalidated them through final commit.
- Required external imports to start and remain in Copy/Paste Paste mode until commit.
- Bound structure Save responses to explicit request IDs instead of filename/FIFO matching.
- Removed a client-thread/file-dialog-thread race in structure download cleanup.
Changed
- Added
multitoolRangeMultiplier(default 2.0, allowed 1.0-4.0) for all-profile targeting, Build To Me, Build/Exchange and destruction.multitoolMaxRangenow defaults to 0 (automatic); existing positive overrides are preserved. - Multitool radial range controls, the range hotkey, server packet handling, and restored/stale item state now obey the same server-authoritative range cap.
- Added opt-in
debugInstrumentationdiagnostics for multitool range packet/state synchronization. The instrumentation is disabled by default and uses a shared per-category token bucket with a burst of 4 and refill rate of 2 messages per second, including suppression counts when traffic is throttled. - Creative players can operate the Builder's Multitool with an empty FE battery; Survival still obeys the configured gadget energy costs.
Security
Abandoned uploads expire on server ticks and are cleared on player logout and server shutdown across all four ports.
In-flight uploads are limited globally to 64 transfers and 64 MiB of retained chunk data, in addition to the two-transfer-per-player cap.
Multitool mode identifiers are limited to 128 characters on Forge 1.20.1 and both NeoForge ports.
External structure files can only be imported into Copy/Paste semantics.
Untrusted block-entity NBT is stripped instead of replayed on the server.
Building Gadgets 2 imports validate and clean imported block states through upstream rules.
Imported structures are limited to a 100,000-position bounding volume, including air inside the declared dimensions.
Compressed transfers are limited to 8 MiB and decoded NBT to 64 MiB, including the Forge 1.16.5 path.
Concurrent upload transfers are capped per player and overflow-safe dimension validation is shared across all supported ports.
Testing and release
- Added PR/main CI without publishing ordinary code changes.
- Added in-game GameTests for Forge 1.20.1, NeoForge 1.21.1, and NeoForge 26.1.2, including profile defaults, configured range clamping, creative zero-FE operation, and 26.1.2 FE/profile/Cut runtime coverage.
- Added shared unit tests and cross-version contracts for the debug-instrumentation rate limiter/config gating.
- Releases now trigger automatically when
mod_versionchanges onmain; touchinggradle.propertieswithout changing the version does not publish. - The version-bump release reruns the dedicated client E2E gate, unit/contract tests, and all four builds before publishing.
- All four supported artifacts are published to CurseForge project 1614988, then the matching
v<mod_version>tag and GitHub release are created automatically. - CurseForge retries are duplicate-safe and an existing version tag is reused only when it already points at the same release commit.
- Manual workflow dispatch remains available as a recovery path for the current version.
- Fixed native targeting and Build To Me limits remaining in effect for multitools on all four versions.
- Fixed destruction controls retaining native bounds; server validation and restored values now follow the multitool multiplier.
- Extended real-client tests beyond native caps: Build 30, Exchange 29, and destruction Left/Depth 20. Added runtime targeting/Build To Me regression checks and corrected a shared test to compile on Java 8.
- Fixed the BG2 multitool range slider staying at 15: the old hook targeted an integer instead of the slider's double limit. All BG2 radial screens now read the config directly.
- Fixed Forge 1.20.1 integration-server launcher inheritance and added resolved-launcher verification.
- Release notes now live in
changelog/<mod_version>.mdand are used as the GitHub release body.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include