Unofficial site, not affiliated with modrinth.com.What is this?
Моды/InsaneLib
InsaneLib

InsaneLib

A set of common classes and utilities used by Insane's mods

1.1M
27
  • 2.4.18.0

    release13 июня 2026 г.

    2.4.18.0

    Technical

    • Added ObjTag#getAllObjects

    2.4.17.2

    • Startup crash fix

    2.4.17.1

    • Allow picking up items from anvil with 0 cost and don't render cost label when 0

    2.4.17.0

    Technical

    • Added CreativeTabsUtils with methods to add items to a creative tab before or after another item, or remove an item from a creative tab

    2.4.16.0

    • Added ILRangedAttribute
      • Same as a RangedAttribute, but the descriptionId is calculated from the attribute id and can define a baseId.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.17.2

    release12 июня 2026 г.

    2.4.17.2

    • Startup crash fix

    2.4.17.1

    • Allow picking up items from anvil with 0 cost and don't render cost label when 0

    2.4.17.0

    Technical

    • Added CreativeTabsUtils with methods to add items to a creative tab before or after another item, or remove an item from a creative tab

    2.4.16.0

    • Added ILRangedAttribute
      • Same as a RangedAttribute, but the descriptionId is calculated from the attribute id and can define a baseId.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.17.1

    release12 июня 2026 г.

    2.4.17.1

    • Allow picking up items from anvil with 0 cost and don't render cost label when 0

    2.4.17.0

    Technical

    • Added CreativeTabsUtils with methods to add items to a creative tab before or after another item, or remove an item from a creative tab

    2.4.16.0

    • Added ILRangedAttribute
      • Same as a RangedAttribute, but the descriptionId is calculated from the attribute id and can define a baseId.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.17.0

    release12 июня 2026 г.

    2.4.17.0

    Technical

    • Added CreativeTabsUtils with methods to add items to a creative tab before or after another item, or remove an item from a creative tab

    2.4.16.0

    • Added ILRangedAttribute
      • Same as a RangedAttribute, but the descriptionId is calculated from the attribute id and can define a baseId.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.16.0

    release24 мая 2026 г.

    2.4.16.0

    • Added ILRangedAttribute
      • Same as a RangedAttribute, but the descriptionId is calculated from the attribute id and can define a baseId.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.15.1

    release23 мая 2026 г.

    2.4.15.1

    • Fixed Item components' programmatic providers overwriting each-other

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.15.0

    release3 мая 2026 г.

    2.4.15.0

    • Fixed a NeoForge bug that caused global_loot_modifiers.json to not respect the order of the loot modifiers

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.14.1

    release26 апреля 2026 г.

    2.4.14.1

    • Added copper equipment item tags and fixed wooden and golden being wood and gold

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.14.0

    release26 апреля 2026 г.

    2.4.14.0

    • Added GetMaxDamageEvent to modify item's max damage
    • Added Item Tags for equipment by material

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.13.1

    release22 апреля 2026 г.

    2.4.13.1

    • Fixed Integrated resource packs not being enabled by default

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.13.0-beta

    beta19 апреля 2026 г.

    2.4.13.0-beta

    • Added block_broken advancement trigger
    • insanelib:enchant_with_treasure
      • Renamed allow_curses and allow_treasure to ignore_curses and ignore_treasures

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "ignore_curses": false,
          "ignore_treasures": false
        }
        
        ignore_curses: exclude curse enchantments (tag minecraft:curse). ignore_treasures: exclude non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.12.2-beta

    beta18 апреля 2026 г.

    2.4.12.2-beta

    • Crash fix

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.12.1-beta

    beta18 апреля 2026 г.

    2.4.12.1-beta

    • Crash fix

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.12.0-beta

    beta18 апреля 2026 г.

    2.4.12.0-beta

    Technical

    • Added SerializableMobEffectInstance

    2.4.11.0-beta

    • Added insanelib:enchantability item component

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.10.0-beta

    beta17 апреля 2026 г.

    2.4.10.0-beta

    • Added merge_components array for item_components
      • Arrays are concatenated, objects are recursively merged, and primitives are overridden.
        This is useful for adding entries to a list component (e.g. appending attribute modifiers) without discarding the item's existing values

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.9.3-beta

    beta6 апреля 2026 г.

    2.4.9.3-beta

    • Optimized ModNBTData path parsing to avoid regex overhead on every NBT access

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.9.2-beta

    beta15 марта 2026 г.

    2.4.9.2-beta

    Technical

    • Allow ObjTag to use dynamic registries

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.9.1-beta

    beta14 марта 2026 г.

    2.4.9.1-beta

    Technical

    • Added JsonFeature#loadAndReadJson overloads for specifying the registry

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
  • 2.4.9.0-beta

    beta13 марта 2026 г.

    2.4.9.0-beta

    Technical

    • Added back json utilities (ILGsonHelper and validators)

    2.4.8.0-beta

    Technical

    • Added loot modifiers:
      • insanelib:replace_loot — replaces items in a loot table with another item, optionally copying components (durability, enchantments) and scaling the count
        {
          "type": "insanelib:replace_loot",
          "conditions": [...],
          "original_item": "minecraft:iron_sword",
          "replacement_item": "minecraft:diamond_sword",
          "copy_components": true,
          "count_multiplier": 1.0
        }
        
      • insanelib:inject_loot_table — injects the contents of another loot table into the current one
        {
          "type": "insanelib:inject_loot_table",
          "conditions": [...],
          "loot_table": "minecraft:chests/simple_dungeon"
        }
        
      • insanelib:drop_multiplier — multiplies the count of matching items in loot
        {
          "type": "insanelib:drop_multiplier",
          "conditions": [...],
          "item": "minecraft:wheat",
          "multiplier": 2.0
        }
        
      • insanelib:loot_purger — removes or damages items based on distance from world spawn; useful for progressive loot difficulty
        {
          "type": "insanelib:loot_purger",
          "conditions": [...],
          "end_range": 5000,
          "start_range": 0,
          "multiplier_at_start": 0.0,
          "apply_to_damageable": false,
          "blacklisted_items_tag": "insanelib:loot_purger_blacklist",
          "blacklisted_entity_type_tag": "insanelib:loot_purger_entity_blacklist"
        }
        
        Items are progressively purged the closer to spawn the loot generates. At start_range the survival chance is multiplier_at_start, at end_range it is 1. apply_to_damageable damages items proportionally instead of removing them.
      • insanelib:disenchant — removes enchantments from all items; enchanted books become plain books
        {
          "type": "insanelib:disenchant",
          "conditions": [...],
          "blacklisted_items_tag": "insanelib:disenchant_blacklist"
        }
        
    • Added loot functions:
      • insanelib:enchant_randomly_weightless — enchants an item with a given number of random enchantments, each chosen with equal probability (no weight). Supports books.
        {
          "function": "insanelib:enchant_randomly_weightless",
          "conditions": [...],
          "count": 2,
          "max_lvl": false,
          "treasure": false
        }
        
        count: number of enchantments to apply (supports number providers). max_lvl: always apply the maximum level. treasure: allow treasure enchantments (tag minecraft:treasure).
      • insanelib:enchant_with_treasure — applies a single random treasure enchantment to the item. Supports books.
        {
          "function": "insanelib:enchant_with_treasure",
          "conditions": [...],
          "allow_curses": true,
          "allow_treasure": true
        }
        
        allow_curses: include curse enchantments (tag minecraft:curse). allow_treasure: include non-curse treasure enchantments.
    • Added loot conditions:
      • insanelib:block_tag_match — passes if the broken block is in the given tag (returns true if no block state is in context)
        { "condition": "insanelib:block_tag_match", "block_tag": "minecraft:logs" }
        
      • insanelib:killer_has_advancement — passes if the killing player has completed the given advancement
        { "condition": "insanelib:killer_has_advancement", "advancement": "minecraft:story/mine_diamond" }
        
      • insanelib:non_player_arised_drop — passes if the drop was not caused by a player, explosion, or tool (i.e. natural mob death without a player killer)
        { "condition": "insanelib:non_player_arised_drop" }
        

    2.4.7.1-beta

    Technical

    • Fixed self() methods not being @Unique

    2.4.7.0-beta

    Technical

    • Added ItemComponentsReloadListener.PROGRAMMATIC_PROVIDERS to change stacks programmatically

    2.4.6.2-beta

    Technical

    • Attached sources in the .jar

    2.4.6.1-beta

    Technical

    • Changed MCUtils.computeFoodFormula variables
      • Removed effectiveness
      • Renamed hunger to nutrition

    2.4.6.0-beta

    Technical

    • Added back InsaneLib.ONE_DECIMAL_FORMATTER

    2.4.5.0-beta

    Technical

    • Added MCUtils.computeFoodFormula using EvalEx
    • Added back all the events

    2.4.4.0-beta

    Technical

    • Added back feature_enabled neoforge condition and loot condition

    2.4.3.0-beta

    Technical

    • Added back PlayerUseItemMovSpeedEvent and PlayerSprintEvent

    2.4.2.0-beta

    • Moved Attack Speed Based Invincibility feature to ISO

    2.4.1.1-beta

    Technical

    • Fixed concurrent modification exception

    2.4.1.0-beta

    Technical

    • Ported back ClientUtils

    2.4.0.1-beta

    • Attack invincibility frames are now reduced by 10%
    • Fixed invincibility frames not shown on entities if damage was not from an entity or from non-weapon

    2.4.0.0-beta

    • Added insanelib:knockback_multiplier data component
      • 0~1 that can reduce the knockback of an item

    2.3.1.1-beta

    • Fixed invincibility feature erroring when installed server side only

    2.3.1.0-beta

    • Added config option to limit invincibility frames to only faster attack speeds

    2.3.0.0-beta

    • Added Attack Speed Based Invincibility feature
      • Makes attack change invincibility frames based off attack speed, so faster attacks will give less invincibility frames and vice versa
      • If installed on the client, they will actually see the red invincibility frames correctly based off attack speed

    2.2.2.0-beta

    • Added back /insanelib command, but, more importantly, added a new subcommand get_data_components
      • With /insanelib get_data_components <item> you can get a list of all the data components that are currently applied to the item

    2.2.1.0-beta

    • Renamed Item Definitions to Item components (the data pack folder has also changed to item_components)
      • Added remove_components, a list of components to remove from the item
      • Added priority, integer value. When multiple json target the same item, components are merged — higher priority wins per component type.
    • A higher-priority remove overrides a lower-priority set, and vice versa.

    2.2.0.0-beta

    • Added Item Definitions feature
      • Use data packs to change items' data components
        E.g. in data/<namespace>/item_definitions/strong_diamond_sword.json will make diamond swords have 50 Attack Damage and 2000 durability
      {
          "item": "minecraft:diamond_sword",
          "components": {
              "minecraft:max_damage": 2000,
              "minecraft:attribute_modifiers": {
                  "modifiers": [
                      {
                          "type": "minecraft:generic.attack_damage",
                          "id": "minecraft:attack_damage",
                          "amount": 50.0,
                          "operation": "add_value",
                          "slot": "mainhand"
                      }
                  ]
              }
          }
      }
      

    2.1.3.0-beta

    • Ported Push Resistance attribute from Enhanced AI

    2.1.2.5-beta

    • Crash fix when saving a parsed effect instance

    2.1.2.4-beta

    • Fix Network messages again

    2.1.2.3-beta

    • Fix Network messages being sent to clients with no mod installed

    2.1.2.2-beta

    • Fix ObjTag resolving unknown registry entries as fallback objects

    2.1.2.1-beta

    • Fixed missing ObjTagValue.LIST_TYPE

    2.1.2.0-beta

    • Added back IdTagValue as ObjTagValue
    • Added ObjTag#asHolder

    2.1.1.0-beta

    • Added MCUtils.createPotionStackFromEffectInstances

    2.1.0.1-beta

    • Fixed startup crash

    2.1.0.0-beta

    • Modules now require Resource Location as identifier
    • You can now use ILModConfig to prevent having to create a config class each mod
      • In the mod class
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(MOD_ID, ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
      • You can also create a single module mod via ILModConfig constructor
          public static ILModConfig CONFIG;
        
          public YourMod(IEventBus modEventBus, ModContainer modContainer) {
            CONFIG = new ILModConfig(location("main"), "Main", ModConfig.Type.COMMON, modEventBus,
                    Modules::init, InsaneLib.class.getClassLoader());
            modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.spec, MOD_ID + "/common.toml");
          }
        
        Features in single module mods can now omit the module parameter in @LoadFeature
    • Ported more MCUtils functions

    2.0.4.0-beta

    • Ported Better Falling Blocks

    2.0.3.0-alpha

    • Added Fix Swimmers Swimming Attribute, making Drowned and Fishes use the neoforge swimming speed attribute instead of the vanilla movement speed

    2.0.2.1-alpha

    • Player attributes are now empty by default

    2.0.2.0-alpha

    • Added Player Attributes feature
      • Directly from Insane's Survival Overhaul, change players attributes with a json in the config folder.
      • By default, it will slightly reduce movement speed and block reach
    • Added back JsonFeature (needed for Player Attributes)

    2.0.1.0-alpha

    • Added back MessageCreeperDataSync
      • Creeper data is now automatically synced client-side (if the mod is installed on the client).

    2.0.0.5-alpha

    • Fixed "Fix Air Speed.Sprinting Jump Slowdown" being ignored

    2.0.0.4-alpha

    Port to 1.21.1

    This version contains most of the player features (missing Better Falling Blocks) + everything needed to make MPR work.

    • Removed spawn_type tag, neoforge already does that with neoforge:spawn_type NBT Tag
    • Follow range fix now applies to any entity that uses vanilla NearestAttackableTargetGoal and will update everytime the mob tries to find a new target instead of only on spawn
    • Enhanced Fix Air Speed (aka Fix Jump Movement Factor)
1
...

Совместимость

Minecraft: Java Edition

Платформы

Сведения

Лицензия:
Опубликован:3 года назад
Обновлён:1 день назад
ID проекта:
Главная