Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Forge 14.21.1 Minecraft 1.12

Recommended Posts

Forge Version: 1.12-

Minecraft Version: 1.12



Minecraft 1.12 has been released! And we have finally gotten the big breaking changes in and Forge should be in a fairly stable state!

1.12 has brought a lot of changes, most notably the new Json based recipe system. This was a major hurdle to get over as we had to expand this system to support modded recipes. And to support the many different ways modders interact with crafting. We also had to re-write a large section of internal Forge code due to how Mojang implemented the new crafting guide book. Mojang also is now forcing Java 8 in the vanilla client. Which broke quite a few things related to how we decompile Minecraft itself. Which required me to re-write large portions of the decompiler we use. Overall there was a lot of things changed and due to this there are no doubt still issues in these systems. However I am wanting to push out this release so that we can switch the official development to 1.12 versions. This is also a signal to modders who have already adopted 1.12 {There are a lot of you, this is very encouraging!} that we have stabilized our API. Which means no more intentionally breaking everyone's mods <3


So I hope you guys will stick with us, and I apologize for the delay in getting this first build out.


The Recipe System:

  1.12 introduced a new JSON based recipe system. Like all systems Forge has had to expand this to support the things that modders want to do. To that extent if you are a modder please read this gist. That is my initial comments and design ideas for the JSON based system. My intention is that someone from the community who is better at writing documentation then I am will come along and convert that to proper docs in our documentation repo. *Hint Hint*


Registry Rewrite:

  One of the core feature of Forge has been the Block/Item registry system. This is what has allowed us to internally manage the ids, world saves, all that stuff. This system has expanded from it's original implementation of just Blocks/Items to a lot of things. Biomes, Entities, Potions, Enchantments, and now Recipes. This is the system that has allowed users and mod pack creators to not need to care about ID conflicts anymore. With recipes being added to this system it has required a MAJOR rewrite of how it works. However this re-write is for the better as it fleshes out and fixes some features that were not fully supported in the older version. There are however things people need to know.

  • Users: Due to the re-write being a great time to delete old complicated, sadly we have had to remove support for updating <1.10 worlds. It is recommended that you load the world using 1.11.2 Forge so it can do the legacy upgrade and THEN load it with 1.12. And as always with anything related to updating worlds between Minecraft versions, we recommend that you make backups of your world before hand!
  • Modders: It is now recommended and HIGHLY encouraged that you use the RegistryEvent.Register<T> functions when creating your block, items, potions, recipes, etc... These events have changed to being fired after pre-init. If you use these events you will better suited for the future when we introduce reloading mods dynamically at runtime. Basically.. use these events!
  • Modders: Substitutions and @ObjectHolders have got a major enhancement, things should be a lot simpler to use now!



Minecraft Forge 14.21.1 Changelog:



  • MAJOR rewrite of the Registry system
  • Dropped world loading support for <1.10 worlds. Load them in 1.11.2 before updating to 1.12.
  • New JSON recipe loading system enhancements.
  • Added support to vanilla JSONS to specify NBT data in output.
  • MissingMappingEvent is now fired for ALL registries
  • @ObjectHolders and overriding should now be supported on ALL registries.
  • Added AnimalTameEvent for Parrots.
  • Forced Block/Item.getSubItems method to be available on the server side. 


Bug Fix:

  • Fixed crash related to player names
  • Fix NPE in config menu with custom keybinds.
  • Fixed exception in ShapedOreRecipe.checkMatch for recipes that don't fill entire crafting grid
  • Fixed bug SPacketLoginSuccess when in development environments.
  • Fixed exception related to vanilla clients connecting to a Forge server.
  • Fixed NoteBlockEvent not supporting new vanilla instruments.
  • Fixed Universal bucket handling for Fluids with NBT


Just wanted to reiterate this again, BACKUP your worlds! And to properly report any issues you run into. This means including your fml log!

  • Like 4

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to post
Share on other sites
This topic is now closed to further replies.

  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Try to swich versions of the game, if that dest work try to install the game again.
    • Hello There! Yes I know it's been a while and there are reasons that I explain in this video! But in this video talk about some pretty cool updates and announcements to the channel that I am super excited to share with you guys! Also yes this was filmed on the Hive about a day before it shut down! I hope you all enjoy this video and if you did don't forget to like and sub for more!  
    • Hi, I'm trying to create an entity based of a minecart but the entity appears to be invisible and unable to be interacted with. I'm not seeing any errors in the debug log. I have included my entity and renderer. I have not added any attributes to this entity as I don't think there is any way to add them to minecarts. I added a message during ticks that appears when its alive but the minecart itself does not. public class TrainEntity extends AbstractMinecartEntity { public TrainEntity(EntityType<?> p_i50126_1_, World p_i50126_2_) { super(p_i50126_1_, p_i50126_2_); } public TrainEntity(World p_i1723_1_, double p_i1723_2_, double p_i1723_4_, double p_i1723_6_) { super(EntityRegister.TRAINENTITY.get(), p_i1723_1_, p_i1723_2_, p_i1723_4_, p_i1723_6_); } public static final String REG = "train_entity"; @Override public Type getMinecartType() { return AbstractMinecartEntity.Type.RIDEABLE; } public ActionResultType interact(PlayerEntity p_184230_1_, Hand p_184230_2_) { ActionResultType ret = super.interact(p_184230_1_, p_184230_2_); if (ret.consumesAction()) return ret; if (p_184230_1_.isSecondaryUseActive()) { return ActionResultType.PASS; } else if (this.isVehicle()) { return ActionResultType.PASS; } else if (!this.level.isClientSide) { return p_184230_1_.startRiding(this) ? ActionResultType.CONSUME : ActionResultType.PASS; } else { return ActionResultType.SUCCESS; } } @Override public void tick() { super.tick(); STAR.LOGGER.debug("STAR - Training Hard"); } public class TrainEntityRender<T extends TrainEntity> extends EntityRenderer<T> { protected final EntityModel<T> model = new CreeperModel<>(); public TrainEntityRender(EntityRendererManager p_i46155_1_) { super(p_i46155_1_); this.shadowRadius = 0.7F; } @Override public ResourceLocation getTextureLocation(TrainEntity p_110775_1_) { return new ResourceLocation(STAR.MODID, "textures/entity/purple_thing.png"); } @Override public void render(T p_225623_1_, float p_225623_2_, float p_225623_3_, MatrixStack p_225623_4_, IRenderTypeBuffer p_225623_5_, int p_225623_6_) { super.render(p_225623_1_, p_225623_2_, p_225623_3_, p_225623_4_, p_225623_5_, p_225623_6_); //Bunch of other stuff copied from the MinecartRenderer p_225623_4_.scale(-1.0F, -1.0F, 1.0F); this.model.setupAnim(p_225623_1_, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F); IVertexBuilder ivertexbuilder = p_225623_5_.getBuffer(this.model.renderType(this.getTextureLocation(p_225623_1_))); this.model.renderToBuffer(p_225623_4_, ivertexbuilder, p_225623_6_, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); p_225623_4_.popPose(); STAR.LOGGER.debug("STAR - RENDER"); } protected void renderMinecartContents(T p_225630_1_, float p_225630_2_, BlockState p_225630_3_, MatrixStack p_225630_4_, IRenderTypeBuffer p_225630_5_, int p_225630_6_) { Minecraft.getInstance().getBlockRenderer().renderSingleBlock(p_225630_3_, p_225630_4_, p_225630_5_, p_225630_6_, OverlayTexture.NO_OVERLAY); } } Event Register: @SubscribeEvent public static void onClientSetupEvent(FMLClientSetupEvent event) { LOGGER.info("STAR - Client Setup"); //Other renderers RenderingRegistry.registerEntityRenderingHandler(EntityRegister.TRAINENTITY.get(), TrainEntityRender::new); } Any help would be greatly appreciated. 
    • I used diesieben07 suggestion and got it all working. I have included my completed entity for anyone who needs it. Entity Class: public class TestEntity extends CowEntity { public static final String REG = "simple_entity"; public TestEntity(EntityType<? extends CowEntity> p_i48567_1_, World p_i48567_2_) { super(p_i48567_1_, p_i48567_2_); STAR.LOGGER.debug("STAR - Entity Constructed"); } public static AttributeModifierMap.MutableAttribute createAttributes() { return MobEntity.createMobAttributes().add(Attributes.MAX_HEALTH, 0.5D) .add(Attributes.MOVEMENT_SPEED, (double)0.2F) .add(Attributes.FOLLOW_RANGE, 20.0) .add(Attributes.ATTACK_DAMAGE, 20.0); } @Override protected void registerGoals() { STAR.LOGGER.debug("STAR - Entity Goals"); this.goalSelector.addGoal(0, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); } } Entity register: public class EntityRegister { public static final DeferredRegister<EntityType<?>> ENTITIES = DeferredRegister.create(ForgeRegistries.ENTITIES, STAR.MODID); public static final RegistryObject<EntityType<TestEntity>> TESTENTITY = ENTITIES.register(TestEntity.REG, () -> EntityType.Builder.<TestEntity>of(TestEntity::new, EntityClassification.MISC) .sized(0.98F, 0.7F) .clientTrackingRange(8) .build(TestEntity.REG)); } Thanks for all your help.
    • Ha, lol, I got confused between galloping and sprinting. Turns out horses gallop not sprint. Anyway I just override the gallop method instead and it works a treat.  Thanks for your help
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.