StructureLib
16 merged pull requests.
New Features
- #74 Added ChannelPickHandler, a client-side ChannelWipeConfirmation gate, a MouseEvent handler in ClientProxy, and MixinGuiContainer_PickChannel for in-GUI picking. SetChannelDataMessage was extended, and lang entries and an init hook in CommonProxy and StructureLib were added. - @vermz99
- Added: middle-click channel pick on the hologram projector in GUI, middle-click channel pick in world, shift+middle-click wipe of all channels with confirmation
- #66 Enhanced GuiScreenConfigureChannels with confirmation UI for channel clearing. Added localization strings in English and Russian. - @Eldrinn-Elantey
- Added: confirmation step to Clear button
- #57 Added a default IStructureElement.getDescription() that returns null, plus a withDescription() wrapper in StructureUtility. It is delegated through IStructureElementChain, LazyStructureElement and the wrapper methods (onElementPass, onElementFail, withChannel, withContext, onlyIf). Descriptions are lang keys. - @Luca-Guettinger
- Added: IStructureElement.getDescription, StructureUtility.withDescription
- #56 Enhanced StructureUtility ofBlock method to provide descriptive error messages and added corresponding localization strings. - @evgengoldwar
- Added: block placement hint messages
- #53 Added tab-key autocomplete handler to GuiScreenConfigureChannels. - @Worive
- Added: tab autocomplete for channel names
- #49 Added IStructureDefinition.iterate(), which calls StructureUtility.iterateV2 with a caller-supplied walker. IStructureWalker is now public, documented and marked @FunctionalInterface. - @RecursivePineapple
- Added: IStructureDefinition.iterate, public IStructureWalker
New Content
- #52 Replaced dot-based hint textures in BlockHint with numbered variants (HINT_0 through HINT_11, plus HINT_AIR and HINT_DEFAULT) and updated BlockHint logic to support numeric display. - @UltraProdigy
- Added: numbered hint textures
Changes
- #67 Updated subchannel color localization strings from orange (§6) to aqua (§b) across English, Russian, and Chinese language files. - @DylanTaylor1
- #59 ofBlocksTiered without a description now builds lang keys from allKnownTiers via ItemStack.getUnlocalizedName() + ".name" and passes them to the description overload. The element also stores the last context passed to check() and couldBeValid(). - @Luca-Guettinger
Bug Fixes
- #75 ChannelDataAccessor.wipeChannelData now sets stackTagCompound to null when the compound has no tags left after removing the channels tag. - @Chitak985
- Fixed: Cleared hologram projectors not stacking with new projectors
- Closes GTNH#26755
- #68 The channel wrapper in StructureUtility now passes the trigger through ChannelDataAccessor.withChannel(trigger, channel) when delegating getBlocksToPlace to the backing element. - @AnsonYeung
- Fixed: getBlocksToPlace ignoring the channel
- #63 Added PlaceResult.REJECT_CONTINUE. SKIP now short-circuits IStructureElementChain.survivalPlaceBlock, and the default survivalPlaceBlock, IStructureElementCheckOnly and onlyIf return REJECT_CONTINUE. SurvivalBuildStructureWalker treats it like SKIP. - @Yoshy2002
- Added: REJECT_CONTINUE place result
- Fixed: ofChain survival placement replacing already valid blocks
- #51 GuiScreenConfigureChannels.updateButtons now also requires a non-blank key for the ADD_BTN, and keyTyped calls updateButtons after typing in either the key or value box. - @wlhlm
- Fixed: crash when adding a channel with an empty key in the hologram projector
- Closes GTNH#22838
Performance
- #54 StructureDefinition.Builder.addShape replaces the regex replaceAll and contains checks with a single in-place pass over the StringBuilder that strips the marker chars and records whether '+' and '-' occur. - @danyadev
Internal / Refactor
- #61 Replaced instanceof casts with pattern matching, removed unused @SuppressWarnings and dead code, and moved comments. Added a GPLv3 LICENSE and renamed LICENSE.txt to LICENSE.LESSER. Updated the javadoc workflow and addon.gradle to JDK 25. - @Nikolay-Sitnikov
- #60 IStructureElement.getDescription() becomes getDescription(T context). IStructureElementChain, LazyStructureElement and the wrapper in IStructureElement forward the context. The tiered ofBlocksTiered element reads the tier through the passed context and drops its stored lastContext field. - @Luca-Guettinger
- Removed: getDescription() without a context argument, lastContext field in the tiered block element
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@Glease (7), @AnsonYeung (4), @Luca-Guettinger (4), @RecursivePineapple (2), @UltraProdigy (2), @Yoshy2002 (2), @Alexdoru (1), @AshVz (1), @Chitak985 (1), @chrombread (1), @cubefury (1), @danyadev (1), @Dream-Master (1), @DylanTaylor1 (1), @Eldrinn-Elantey (1), @evgengoldwar (1), @leagris (1), @Nikolay-Sitnikov (1), @Spicierspace153 (1), @vermz99 (1), @wlhlm (1), @Worive (1)