# 1.20.4-v2.17.0
Ported to 1.20.4 and now on NeoForge
## General Changes
- Removed old `IForgeRegistry` methods. Vanilla registries are used now.
## Registries
- All custom registries have been moved to proper NeoForge registries stored within `com.legacy.structure_gel.api.registry.StructureGelRegistries` and their respective events have been removed.
- DataHandlerType
- LootTableAlias
- DynamicSpawnerType
- JigsawCapabilityType
## Registrar
- General optimizations to registry behavior. Removed a number of redundant checks.
- `RegistrarHandler.BlockHandler` returns `Registrar.BlockRef` instead of `Registrar.Static`.
- `BlockRef` implements `ItemLike` and has a `defaultBlockState()` method.
- Added `RegistrarHandler.ItemHandler`
- Similar to `BlockHandler` but specific to Items.
- Creates `Registrar.ItemRef` instead of `Registrar.Static`.
- `ItemRef` implements `ItemLike` and has a `defaultInstance()` method.
- Removed `RegistrarDatapackEntriesProvider`
- Use `new DatapackBuiltinEntriesProvider(packOutput, gatherDataEvent.getLookupProvider(), RegistrarHandler.injectRegistries(new RegistrySetBuilder()), Set.of(my_mod_id));`
- Added `@RegistrarHolder`
- Class annotation that allows Structure Gel to find and load `RegistrarHandler` fields within it.
- `RegistarHandler`s must be `public` and `static` to be accessible. An exception will be thrown if this is not the case.
- `RegistarHandler`s are registered during `RegisterEvent` during `EventPriority.HIGHEST`. If you have `RegisterEvent` listeners at this priority, mod load order may prevent this from working properly.
## Jigsaw Capability
- Recieved a major refactor to better organize the data.
- `JigsawCapability.IJigsawCapability` -> `JigsawCapability`
- `JigsawCapability.JigsawType` -> `JigsawCapabilityType`
## Building Tool
- Added Fuzzy as an option to the Extend tool.
## GelPortal block
- Thanks to `BlockType` codec requirements, this is now an abstract class.
- The `GelTeleporter` factory that was previously passed as an argument is now an abstract method `getTeleporter(ServerLevel, GelPortalBlock)`
- 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 nv` to 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`, and `server` (unused currently)
- Packets are now located in their own package based on direction.
- `c_to_s`, `s_to_c`, and `bi_directional`
- Redid several mixins to utilize MixinExtras for better cross-mod compat.
- `ExtendedJigsawPlacement` has been removed. All logic is handled through mixins to the vanilla JigsawStructure and JigsawPlacement.
- `GelTemplate` has beem moved to the api package.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }