Skip to content

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)