Jump to content

Forge 12.17.0 Minecraft 1.9.4


Recommended Posts

Forge Version: 1.9.4-

Minecraft Version: 1.9.4



1.9.4 has been out for quite some time but it seems that my Recomended Build post disspaeared.

So before I post the 1.10.2 RB post, heres 1.9.4.

Moving forward, 1.9.4 is in bugfix mode.

1.10.2 is 99.999% binary compatible with 1.9.4 mods so there is quite LITERALLY no reason to not update you mod packs, seriously guys do it.


Minecraft Forge 12.17.0 Changelog:



  • New LootTable interaction system and event.
  • New ScreenShotEvent for capturing/manipulating screenshots.
  • Extended Animation State Machine format to allow multiple transitions from one state.
  • Add modder facing API for Villager Career level trades.
  • Expanded max Enchantments to 32,000
  • New ItemAxe constructor to bypass vanilla array issue.
  • New hook in Tile Entity syncing packets.
  • We will now pre-load subclasses of ICrashReportDetail to help prevent crashes when displaying crashes!
  • Now Fire LivingSpawnEvents for MobSpawners.
  • Added automatic stats registractions for modded items.
  • Initial support for model visibility system.
  • Added warning and premissions check to load a world with unknown registries.
  • Expanded custom villagers to Zombies and world gen.
  • Moved IFluidHandler to capabilities, old system is deprecated and will be removed in next deprecation sweep {next MC version most likely}
  • Add methods to Fluid to allow custom vaporization overrides
  • Made dispensers with buckets work with modded fluids
  • Improve the "missing mods" on-screen error message


Bug Fix:

  • Fixed url detection in chat messages. Stops false positives such as `um.....no`
  • Fixed potential NPE with in-hand item rendering.
  • Fixed areas where dimension types are used as dimension IDs.
  • Fixed the rand given to PopulateChunkEvent
  • Fixed map extension recipie.
  • Fixed issue in ChunkIO that would potentially cause NPEs on chunks.
  • Fixed joint hierarchy not being used fully in the animation system.
  • Fixed up release jsons to clean up extraneous netty references
  • Fixed Bucket rendering and add sounds for modded fluids
  • Fixed capabilities not being taken into account when comparing ItemStack NBT's
  • Fixed screenshot link paths on Windows
  • Tipped arrows are now not affected by infinite enchantment but are still effected by creative mode. {Vanilla behavior}
  • Fixed Container.compouteStackSize not respecting stack version of maxStackSize.
  • Fixed missing playerDestroyItem event's in some cases where we were not.
  • Fixed paramters for addArmorMaterial, addOption and addGameType.
  • Fixed wrong position being sent to isSideSolid in BlockRailBase#canPlaceBlockAt
  • Fixed @Optional not stripping from class signatures.
  • Fixed installer downloading vanilla jar when not needed. And filter some more known libraries.
  • Fixed PopulateChunkEvent Pre and Post not being fired in ChunkProviderFlat.
  • Fixed rotation and animations not being set on items with custom armor models.
  • Fixed potential dupe issues related to modded items.
  • Fixed Enchantment Table's harvest level.
  • Fixed EntityRegistry.addSpawn adding duplicate spawn entries.
  • Fixed setTileEntity causing the world to remove the new and old tile entities.
  • Fixed NBTTagString.toString not properly escaping \'s.
  • Fixed Thorns enchantment bypassing ISpecialArmor.damageArmor function.
  • Fixed tooltip for survival tab in the creative menu not drawing on any but the first page.
  • Fixed FluidUtil.tryEmptyFluidContainerItem not checking if the tank can accept fluids first.
  • Fixed potential issue with Chunk.getLightOpacity being called before the chunk is added to the world map.
  • Fixed TileEntityBeacon not using position-aware getLightOpacity.
  • Fixed village wells not having their biomes set.
  • Fixed static inializers being run on @ObjectHolder classes in incorrect order.
  • Fixed item transforms on entities.
  • Fixed BlockFluidBase having collision.
  • Fixed position sent to sanSustainPlant from cactus.
  • Fixed client side ticking TileEntites after they are unloaded.
  • Fixed edge cases where custom professiosn wernt being used correctly.
  • Fixed POTENTIAL issue where mods would query world infrom from TEs before they are set
  • Fixed shift+double clicking items into Containers that use SlotItemHandler.
  • Fixed PlayerInteractEvent issues.
  • Fixed ChunkWatchEvent.Watch not firing.
  • Fixed issue with some mods and the Splash Screen.
  • Fixed model part hiding always applying to some models when transformations are specified in the blockstate json.
  • Fixed custom fluids having odd transperency.
  • Fixed arrows not showing in non default AchievementPages
  • Fixed encoding issue with update jsons, now uses UTF8 for custom characters.
  • Fixed Fernflower decompile issue in AnvilChunkLoader.saveExtraData()
  • Fixed Capability data not being preserved by fluid handler interactions
  • Fixed AnimationItemOverrideList not falling back to super
  • Fixed brewing stand returning incorrect solts for side inventories.
  • Fixed broken EntityItem merging for Items with capabilities


Loot Tables:

1.9's major feature from Mojang was the switch to using Loot Tables, which is a json objust describing what should be generated where for things like mineshaft chests/entities.

Forge has had a hook into this system for a long time and tried to make it sane.

Mojang has finally come through and cleaned it up on their end to make it more flexible for everyone.

Sadly this means everyone's most hated friend Json is back.

Just deal with it, it's not that bad.

A short rundown of the API and what you can do with it is here:



    Will be fired on the main forge event bus for every loot table loaded FROM RESOURCES by the LootTableManager.

    It WILL NOT be fired for loot tables loaded from NBT/World Folder, or anything else as those are considered CONFIG files, to be taken as gospel and NOT touched by modders.

    Can be canceled in which case EMPTY_TABLE is returned, or the table can be modified. THIS IS THE ONLY TIME A TABLE CAN BE MODIFIED ANYTHING OUTSIDE THE EVENT WILL THROW AN ERROR!!!!!


  New functions for managing the encased pools. Done by name.


  New functions for managing entries, and changing rolls info, Conditions are not yet editable. We'd have to uniquely name them as welll. Do people care to edit the conditions?

  Now have names, anything outside the 'minecraft' domain MUST provide a 'name' each pool. If they do not an exception is thrown and EMPTY_TABLE is used instead.

    Anything inside the 'minecraft' domain has names auto-generated for them. This is to keep compatiblity with loading vanilla jsons.

    The names are simple, the first pool is called 'main' any others are called 'pool#', For example minecraft:chests/spawn_bunus_chest has the pools 'main', 'pool1', 'pool2', 'pool3'.

    As these names are generated at loading time, they are static, and determinstic if you glance over the pool json.

    And if you remove a pool THE OTHER NAMES DO NOT CHANGE. So for the bonus chest, if you remove pool2, pool3 is still named pool3

    So modders can safely assume that table(minecraft:chests/spawn_bonus_chest).pool(pool3) will always be the building materials pool {sticks, planks whatever}


    New function to get the name, but beyond that the entries can't be edited, you have to remove+replace if you want to edit.

    We could add functions to edit the conditions/functions.... but is that needed? We'd have to find a way to uniquely name them.

    Again now have names, but this time in the 'entryName' field.

    And again names are generated for vanilla. As there are only two types of entries at this point it's easy.


      entryName = name

      Going with the bonus chest example, the "main" pool has two entries, one named 'minecraft:wooden_axe' and the other named 'minecraft_stone_axe'

      If there is a vanilla json that has two enties in the same pool for the same item name, a counter is appended.

      'minecraft:stick', 'minecraft:stick#0', 'minecraft:stick#1'


      entryName = name

      Same style as items


      entryName == 'empty'

      same style as items/table

    However when it comes to MODDED tables. The name ARE generated, except that it will NOT uniqueafiy the names by appending a counter.

    If you have two entries that are for 'minecraft:stick' then you MUST name the second entry something unique. It's suggested you name both, but for modder ease we do not force you to name something we can guess.


    See this image for an example of how to modify tables.


I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Consider supporting the team on Patreon

Link to comment
Share on other sites

This topic is now closed to further replies.


  • Create New...

Important Information

By using this site, you agree to our Terms of Use.