Nanite Libary is a general use library providing abstraction around various Mod Loader differences, essential features for cross mod loader mods and some helpful utilities for modding Minecraft.
Features
- Abstractions
- Registries
- Networking
- Resource loading
- Features
- Config system
- Server -> Client syncing
- Json5 based
- Familiar builder like pattern to defining configs
- Config system
More is planned to come, this is a very early feature set for the use of our mods currently.
Usage
Although this mod is designed to primarily work with the Nanite Family mods, we recommend this mod to anyone building cross-platform mods. We'll aim to preserve existing API's whilst, on occasion breaking them if needed to keep the library simple and lean
Documentation
In progress! Yes yes, we know, all libraries should have documentation but whilst we're in our early versions, we're focusing more on features & stability.
License
We're an open source license under Mozilla Public License Version 2.0 and all contributes, issues and feature requests are welcome
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 28d ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 1mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 6mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 |
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Added
NetworkRegistry#versioned(String)andNetworkRegistry#optional()to set a packet's network version and optionality on NeoForge- Both are no-ops on Fabric as it has no version negotiation and never refuses connections over missing packets
Config#restoreFromDisk()andConfigManager#restoreSyncedConfigs()to drop values synced from a server
### Changed
- Fabric registries are now deferred until
initialize()is called, matching NeoForge'sDeferredRegister - Registering an entry after its registry has been initialized now throws on both platforms instead of silently doing nothing
- Accessing a Fabric registry entry before its registry is initialized now throws with the entry's id
- Common configs now load as soon as they're registered, and reload when a server starts
- Registering a config after its type has loaded now loads it immediately instead of throwing
- Server configs on NeoForge now load before the world loads, matching Fabric
- The config sync packet is now optional, so clients with the library can join servers without it (and vice versa)
- The config sync packet no longer sends comments and supports much larger configs (256K characters, up from 32K)
ConfigValue#setnow saves the config file- Config files now keep values in the order they're declared
CreativeModeTabBuilder#populateFromRegistrynow reads the registry's entries when the tab is populated instead of when it's called
### Deprecated
ExecutionTargetand theNetworkRegistryoverloads that take one, handlers always run on the main thread
### Fixed
- Dedicated Fabric servers loading client-only networking classes when packets were registered
NetworkRegistry#playBidirectionalcrashing on NeoForge due to the payload being registered twicePlatform#sendPacketToAllPlayersdoing nothing on NeoForgePlatformClient#registerResourcePackReloadListenersnever registering the listeners on NeoForge- Server configs never loading on Fabric
- Sending an optional packet to a side without it throwing on NeoForge
- Values synced from a server sticking around after disconnecting, and being able to be written to disk
- Config keys removed from the file keeping their old value on reload
- Duplicate config keys silently replacing each other, they now throw
CreativeModeTabBuildercrashing when no icon was setLazy#invalidateholding onto the old value
### Fixed
- Generics issues with createResourceKey return type... Whoops.
### Fixed
- Generics issues with createResourceKey return type... Whoops.
### Added
- More helper methods for tag + resource key creation in the RegistryHolder interface
TagKey<R> createTagKey(Registry<R> registry)TagKey<R> createTagKey(ResourceKey<? extends Registry<R>> registryKey)ResourceKey<T> createResourceKey(ResourceKey<? extends Registry<T>> registryKey)ResourceKey<T> createResourceKey(Registry<T> registry)
### Removed
- Removed the
createKeymethod from the RegistryHolder interface as it was redundant with the new helper methods.
### Added
- More helper methods for tag + resource key creation in the RegistryHolder interface
TagKey<R> createTagKey(Registry<R> registry)TagKey<R> createTagKey(ResourceKey<? extends Registry<R>> registryKey)ResourceKey<T> createResourceKey(ResourceKey<? extends Registry<T>> registryKey)ResourceKey<T> createResourceKey(Registry<T> registry)
### Removed
- Removed the
createKeymethod from the RegistryHolder interface as it was redundant with the new helper methods.
### Fixed
- Incorrect generics on the
createKeymethod in the RegistryHolder interface (TagKey<R> createKey(Registry<R> registry))
### Fixed
- Incorrect generics on the
createKeymethod in the RegistryHolder interface (TagKey<R> createKey(Registry<R> registry))
### Added
TagKey<T> createKey(ResourceKey<Registry<T>> registryKey)helper method to the RegistryHolder interface
### Added
TagKey<T> createKey(ResourceKey<Registry<T>> registryKey)helper method to the RegistryHolder interface
### Changed
- Ported to 26.3
### Changed
- Ported to 26.3
### Changed
- Ported to 26.2
### Changed
- Ported to 26.2
### Fixed
- Actually fixed the Fabric Minecraft version range being incorrect causing load time issues.
- Added the correct description to the fabric mod metadata.
### Fixed
- Actually fixed the Fabric Minecraft version range being incorrect causing load time issues.
- Added the correct description to the fabric mod metadata.
### Fixed
- Fabric Minecraft version range being incorrect causing load time issues.
### Fixed
- Fabric Minecraft version range being incorrect causing load time issues.
### Fixed
- Fixed common jar still not being correctly marked as
apifor thejson5dep
### Fixed
- Fixed common jar still not being correctly marked as
apifor thejson5dep
