1.21.4-v2.20.0
General Changes
- We're on 1.21.4. With that comes the general expected changes, like item data components.
Building Tool
- Clone: Now works across dimensions and players. You can hand another player a building tool and access their cloned region regardless of what dimension it's from.
- Added a nifty animation when the GUI opens :D
Gel Blocks
- Gel blocks have had their back end rewritten from scratch.
- Previously, Gel Blocks implemented the
IStructureGelinterface to hook into the various spreading mechanics, used an enum of behaviors to determine the default spreading rules, and had a block state for how far it traveld. Most of this is gone. - Gel spreading behavior is now registered under
structure_gel:gel_spread_behavior.- This is how gel spreads along a specific axis, or along diagonals.
- Gel spreading restrictions can be registered under
structure_gel:gel_spread_restriction.- This is how blue gel knows not to spread into exposed areas, or how orange gel knows to stop based on the item stack count.
- The distance gel spreads is now an absolute distance to the initial source instead of traveling and counting how many were placed, and reaches a sphere shape if fully expanded.
- This allows gel to spread more effectively in twisting hallways, and more reliably hit the corners of large rooms.
- Any block can be used as gel in a structure as long as it's added to the
structure_gel:gelblock tag. If the block in the tag is actually aStructureGelBlock, it can customize what it places instead of defaulting to air.
Data Handler
- Changed how registry works so that a builder is what gets registered. See implemented data handlers for reference.
Dynamic Spawner
- Changed how registry works so that a builder is what gets registered.
GelPortalBlock
- Completely rewritten. Hopefully for the last time. The
GelPortalBlockclass is abstract and requires the implementation of various methods to make the portal function properly (with similar behavior to a nether portal).- Ignition of the portal is handled by calling
GelPortalBlock.tryIgnite. - The dimension transition screen must be registered manually.
- Ignition of the portal is handled by calling
Registries
- Added two new registries;
structure_gel:gel_spread_behaviorandstructure_gel:gel_spread_restriction.- Used to control the behavior of Gel blocks. Custom values can be registered and implemented on your own custom Gel block.
- Changed the registry process of
structure_gel:dynamic_spawner_typeandstructure_gel:data_handler_type.- The new registry approach instead works by registering a "factory" to create a Data Handler or Dynamic Spawner. Overall, the code is more builder-focused and simplified, with access to registry data to prepare for more registries moving to datapacks in vanilla.
- See
com.legacy.structure_gel.core.registry.SGRegistriesfor how to register the new data.
Registrar
- Internal changes to how data is stored. The basic rules of "don't get a value before it was registered" still applies.
Registrar.Staticnow contains aHolder.Referencefor the object registered.Registrar.Staticcan be created with a name only usingRegistrarHandler.named(String).- In this case, a value must be assigned later through
RegistrarHandler.addHandlerListener(Consumer<RegistrarHandler>). - An error will be thrown if a static registrar is created by name only and never assigned a value.
- In this case, a value must be assigned later through
- Added updated handling for block and item registry.
- See
com.legacy.structure_gel.core.registry.SGRegistriesfor usage.
1.20.4-v2.19.1
Data Handler
- Fixed cycle buttons in the GUI not starting at the correct default value
- Made adding
StringRepresentableenums to the parser easier
Building Tool
- Fixed the selection edit screen not hovering buttons correctly
1.20.4-v2.19.0
Building Tool
- Can now set if blocks placed will cause block updates or not
- This also supresses block and fluid ticks that occur when the block is placed (water won't flow, sand won't fall)
- Each mode shows up in the creative mode search tab
- The Building Tool palette screen no longer serializes default block state values when re-opening the screen
- If an oak log was set in the palette, it would previously display as
minecraft:oak_log[axis=y], even if theaxisproperty was left as the default. It will now displayminecraft:oak_login that case. This is especially visible with blocks that have a large number of states, such as fences
- If an oak log was set in the palette, it would previously display as
- Building Tool block palettes can be exported as a Block Palette item. This item can be dropped onto the Building Tool, like how you'd use a bundle, to set the palette.
Fill Tool
- Fixed the
Retain Stateproperty not functioning as expected Retain Statehas been renamed toCopy States- When True (default): Copies applicable block state values from the replaced block to the block being placed. This means stairs/slabs/fences/etc will have the same block states when replaced.
- When False: Places the block without any modifications. This is similar to the vanilla
fillcommand.
Replace Tool
- Added the
Copy Statesproperty- Defaults to true
Clone Tool
- Fixed pasted regions being hollowed out
- Can now also handle entities
- Improved the handling of internally saving captured regions for the Clone tool
- Regions with the same bounding box are not saved more than once. Only the latest copy will be saved
- This prevents multiple copies of the same selected region from completely filling your clipboard
- This breaks old clipboard data
- Pressing
ctrl + cin game while holding the clone tool will manually re-copy the selected region - Pressing
ctrl + vin game while holding the clone tool will paste the copied region- This does not replace left click, it's just an alternative button press
- Improved the compile time of the render-preview
- If a render preview takes longer than 8 seconds to compile (freezing the game client in the process), the preview will be aborted. This timer can be adjusted in the config.
Move Tool
- Can now also handle entities
Commands
- Dramatically optimized the time to find Structure Blocks when using
/structure_gel savestructures search - Added
/structure_gel debug- This will be used for miscellaneous commands that have a very specific function and won't need to be used often, if at all
- Currently used for
/structure_gel debug update_structures_to_structureto update the file location in a Structure Block to the 1.21 format where thestructuresfolder is renamed tostructure(if applicable). It does so by finding and replacing the first instance of:structures/with:structure/in the resource location. This uses the exact same syntax as/structure_gel savestructures
- Commands affecting Structure Blocks display a Redstone Torch particle above the affected blocks
- Added
/structure_gel ?to display the basic function of the other sub-commands
Structure Blocks
- The
Show Invisible Blocksoption allows selecting which blocks to show- The
Show Invisible Blocksoption can dramatically decrease your fps on large selections. This can help by only showing what you care about.
- The
Misc
- Made a number of GUI changes to improve mouse scrolling and hovering
- Some GUIs have tooltips when elements are hovered over
- Dynamic spawner labels give extra info
- The Building Tool palette screen gives info when hovering over the item icon for a block
Added /structure_gel getfeatures command. Uses the same syntax as getstructures... but for features!
1.20.4-v2.18.0
RegisterArmorTrimTexturesEvent
- Added
registerSprite(ResourceLocation)for registering a direct texture that isn't standard armor with a_leggingssuffix.
Building Tool
- Added more replace options to more tool modes.
- Added
Replaceableas a replace option. Replaces blocks that could be replaced by a player when placing a block, such as short grass and blocks in the#minecraft:replaceabletag.
Fixes
- The Building Tool and Data Handler no longer allow objects disabled through feature flags.
1.20.1-v2.16.1
RegisterArmorTrimTexturesEvent
- Added
registerSprite(ResourceLocation)for registering a direct texture that isn't standard armor with a_leggingssuffix.
1.20.4-v2.17.2
Fixes
Fixed a crash when connecting to servers
1.20.4-v2.17.1
Updated NeoForge version as well as minor updates and fixes.
Building Tool
- Added the delete key as a keybind for tool modes to use.
- Currently only used by the fill tool to delete all blocks in the selection.
Fixes
- Fixed en_us.lang using
•instead of\u2022.
1.20.4-v2.17.0
Ported to 1.20.4 and now on NeoForge
General Changes
- Removed old
IForgeRegistrymethods. Vanilla registries are used now.
Registries
- All custom registries have been moved to proper NeoForge registries stored within
com.legacy.structure_gel.api.registry.StructureGelRegistriesand their respective events have been removed.- DataHandlerType
- LootTableAlias
- DynamicSpawnerType
- JigsawCapabilityType
Registrar
- General optimizations to registry behavior. Removed a number of redundant checks.
RegistrarHandler.BlockHandlerreturnsRegistrar.BlockRefinstead ofRegistrar.Static.BlockRefimplementsItemLikeand has adefaultBlockState()method.
- Added
RegistrarHandler.ItemHandler- Similar to
BlockHandlerbut specific to Items. - Creates
Registrar.ItemRefinstead ofRegistrar.Static.ItemRefimplementsItemLikeand has adefaultInstance()method.
- Similar to
- Removed
RegistrarDatapackEntriesProvider- Use
new DatapackBuiltinEntriesProvider(packOutput, gatherDataEvent.getLookupProvider(), RegistrarHandler.injectRegistries(new RegistrySetBuilder()), Set.of(my_mod_id));
- Use
- Added
@RegistrarHolder- Class annotation that allows Structure Gel to find and load
RegistrarHandlerfields within it. RegistarHandlers must bepublicandstaticto be accessible. An exception will be thrown if this is not the case.RegistarHandlers are registered duringRegisterEventduringEventPriority.HIGHEST. If you haveRegisterEventlisteners at this priority, mod load order may prevent this from working properly.
- Class annotation that allows Structure Gel to find and load
Jigsaw Capability
- Recieved a major refactor to better organize the data.
JigsawCapability.IJigsawCapability->JigsawCapabilityJigsawCapability.JigsawType->JigsawCapabilityType
Building Tool
- Added Fuzzy as an option to the Extend tool.
GelPortal block
- Thanks to
BlockTypecodec requirements, this is now an abstract class.- The
GelTeleporterfactory that was previously passed as an argument is now an abstract methodgetTeleporter(ServerLevel, GelPortalBlock)
- The
- Now has some handling for when the Axis property isn't present to allow not including it.
Data Handlers
- Fixed text boxes not always losing focus in the GUI.
- Tab-navigation no longer autocompletes the first option for text boxes that suggest a field if nothing was typed.
- Control + Pick Block now also copies if the block was waterlogged and if it should connect to other blocks.
- Updated hover-tooltips (see below).
Rendering
- Updated how hover-tooltips work for Jigsaws, Structure Blocks, and Data Handlers.
- The display name now renders with transparency, so it doesn't get cut off when it goes into a block.
- The display name also adjusts its offset according to what side of the block you're looking at, and if that side of the block is exposed.
Commands
- Added
/structure_gel nvto toggle night vision- Has optional arguments for players and if the effect should be added or removed
Misc Internal Changes
- Mixins are now located in their own package based on environment side.
client,common, andserver(unused currently)
- Packets are now located in their own package based on direction.
c_to_s,s_to_c, andbi_directional
- Redid several mixins to utilize MixinExtras for better cross-mod compat.
ExtendedJigsawPlacementhas been removed. All logic is handled through mixins to the vanilla JigsawStructure and JigsawPlacement.GelTemplatehas beem moved to the api package.
1.20.1-v2.16.0
LoadStructureTemplateEvent
- New event that fires after a
StructureTemplateloads. - Contains methods to modify the blocks and entities within the template.
Gel Blocks
- Now automatically perform their function without needing to implement the structure processor or use a specific StructurePiece type.
- If the processor is already present, it will still use that.
- This will not be done when loading a template through Structure Blocks or the
place templatecommand.
IModifyState
- Any
TemplateStructurePiecethat extendsIModifyStatewill now work with it as long as thepostProcessmethod isn't overwritten.
Data Handler
- All handlers can now mark blocks for post processing in the Properties menu.
- Useful for making sure water flows after being placed, or updating fence connections for neighboring structures.
- The position marked for post processing will be the position of the data handler itself, with the applied offset.
- Added
structure_gel:emptyas an empty data handler.- Its primary function is to set an offset and mark a position for post processing.
- This is not used by default if the data handler can't be loaded from nbt.
- Fixed the
structure_gel:block_stateusingstructure_gel:chestfor its data parser.
Building Tool
- The Shape tool now has Hollow Cube, Cube Frame, Pyramid, and Cone.
- Changing the shape now uses a selection panel instead of clicking to cycle to the next value.
- The Fill tool now supports all the shapes from the Shape tool for fine control over shapes (replaces the old Mode property).
- The Clone tool now temporarily saves its selected region into a clipboard.
- This allows for cloning to an area far away, regardless of the source being loaded.
- The region is not actually saved to the item itself, but rather to an external file in the dimension's
datafolder.. - This results in drastic client performance improvements, especially for large selections.
- The Replace tool now has a "Fuzzy" property that allows only replacing directly attached neighbors or diagonal neighbors.
- Fixed a number of vertex sorting issues with the Clone tool.
- Translatable text values in the GUI's now scroll like vanilla options buttons.
- Action history is no longer stored in a level capability. It has been moved to
SavedDatafiles to allow for more dynamic loading.
Block Entities
- Added
IRotatableinterface.- Allows a block entity to be rotated and mirroed when placed in a structure.
- Contains
void mirror(Mirror)andvoid rotate(Rotate). - Supported by vanilla's
StructureTemplate(mixin),GelTemplate, relavent data handlers, and relavent Building Tool modes.
Misc
- Added an abstract item interface:
StructureFinderItem- Contains basic methods to get/set located structure info within itself.
- Improved performance with data handler processing.
- Some registry events have been deprecated. They will become NeoForge registries in 1.20.4.
1.20.1-v2.15.1
Data Handler
- Now preserves block state values when giving the player a copy after using the generate button.
- Fixed item frames potentially causing a world lockup.
1.20.1-v2.15.0
Building Tool
- Fixed the replace tool not maintaining block states with things like stairs.
Data Handler
- Added an option for the data handler to not connect to fences, walls, etc.
1.18.2-v2.4.8
- Fixed a world gen lockup with entity data handlers.
1.20.1-v2.14.0
Building Tool
-
The Flood tool now has a radius and replace property.
- Replace can be "Air" or "Air and Liquid" and defaults to "Air and Liquid" (was "Air" only).
- Radius can range from 0-200 and defaults to 80 (was 64).
-
The Extend tool now has a radius and replace property.
- Replace can be "Air" or "Air and Liquid" and defaults to "Air and Liquid" (was "Air" only).
- Radius can range from 0-200 and defaults to 80 (was 64).
-
The size of the currently selected region is displayed above the hotbar and in the selection edit GUI.
- The line tool displays its length instead.
-
The blocks in your current pallete are displayed in the bottom right corner of the screen.
-
The size of a selection can now be edited in the GUI with text boxes.
- This assumes you're changing the positive most corner of the selection box. If a full selection box doesn't exist, one will be created from your position, or a point.
-
The line tool selection can be edited by grabbing the "corner" position of the selection points.
-
Holding right and left click allows the building tool to spam operations.
- Actions that happen as a result of spamming are grouped into one undo/redo.
-
Color coded some text values related to positions.
-
Dramatically improved the visuals of some renders.
- This also improves performance.
General
- Added more utility methods to
VoxelShapeUtil.
Fixes
- The clone building tool wasn't updating the render when you rotate or mirror.
- The building tool render wasn't displaying right away when you join a world.
- Keybinds weren't working when mapped to mouse buttons.
Fixes
- Fixed an issue that could cause a world lockup when creating an entity through a data handler.
1.20.1-v2.13.1
Data Handlers
- Data handlers now support position offsets.
- Position offsets are handled as left, up, and forwards, from the perspective of the data handler.
- The offset position is rendered in world.
- Updated the Data Handler GUI to be more organized.
- Data handlers can be waterlogged in the GUI now.
- Data Handlers are now in the
dragon_immuneandwither_immuneblock tags.
Building Tool Rendering
- Optimized the rendering logic.
- Rendering in Shape, Replace, or Clone mode now works with a proper culling system, which should make it look nicer.
- Renders now have shading to improve their visibility.
Before and After

Fixes
- Fixed the building tool not working with negative reach values properly.
- Fixed the building tool's message for the new reach distance showing an incorrect value.
- Fixed building tool rendering in Fabulous graphics to match fast/fancy.
- Fixed a crash when a mod's dependency is missing.
Updated to 1.20.1, general code cleanup with deprecated data, armor trims can be registered to the texture atlas.
A full changelog can be found here: https://gitlab.com/modding-legacy/structure-gel-api/-/blob/1.20.1/changelogs/1.20.1-v2.13.0.md


