Repository navigation
Releases
Releases · litQA/Forge-1.12.2-Generator
3.1.8-beta: Fluid and plant support
3.1.8-beta
Fixes
- Generate
blockstates/<fluid>.jsonwith Forge fluid variants for every
fluid level; this satisfies the blockstate load that occurs before model
rendering. - Removed the custom fluid state mapper that caused the loader to look for a
missingtest_fluidblockstate.
3.1.7-beta
New Content
- Fluid elements expose density, viscosity, temperature, luminosity and flow
rate; viscosity/temperature are applied toFluid, and flow rate/tick rate
toBlockFluidClassic.
Fixes
- Fluid custom state mapping is registered during
ModelRegistryEvent, so it
is active when models load. - Restored the Forge fluid model, which provides fluid-height/flow rendering
instead of a static cube. - Growable plant growth is delayed and probabilistic, preventing instant growth.
3.1.6-beta
Fixes
- Growable plants no longer grow to maximum height immediately; growth is
random and scheduled with a delay. - Fluid blocks generate a normal blockstate and cube model instead of relying
on the unavailable custom fluid state mapper. - Bucket models fall back to the fluid still texture.
3.1.5-beta
New Content
- Growable plants can stack on themselves and grow upward up to
growapableMaxHeightwhile force ticking.
Fixes
- Growable plants genuinely use
BlockBushplacement rules. - Fluid state mapping points at the generated
test:<fluid>model and its
<fluid>variant, avoiding theblocks/<texture>#fluidlookup. - Bucket models use the vanilla bucket texture when no custom bucket texture is
configured.
3.1.4-beta
Fixes
- Growable plants now actually extend
BlockBush(the earlier template change
was not written to the shipped template), so normal soil placement works. - Fluid client state mapping points back to the fluid still resource, the
format expected by Forge 1.12.2 fluid model loading. - Bucket models use the fluid still texture as a fallback when no custom bucket
texture is configured, avoiding a missing vanilla texture.
3.1.3-beta
Fixes
- Growable plants use normal plant placement instead of the water-only
BlockReedplacement rules. - Double-plant blockstates now include all six vanilla double-plant variants
and valid separators. - Fluid bucket models fall back to the vanilla bucket texture when no custom
bucket texture is supplied. - Fluid blockstate mapping points at the generated fluid model.
3.1.2-beta
Fixes
- Fluid blocks no longer set their registry name in the constructor; the
generated block registry assigns it once, preventing a crash during
TestModBlocksstatic initialization.
3.1.1-beta
New Content
- Plant elements can opt into block NBT through a generated TileEntity and
registration. - Plant elements can force scheduled tick updates (
forceTicking).
Fixes
- Plant model selection no longer compares the GUI render-type model object
directly with an integer; cross/crop/custom selection falls back to the model
name. - Fluid client registration uses a 1.12.2
StateMapperBaseinstead of the
unavailableFluidStateMapperclass.
v3.0.17-beta: Blocks and items for Forge 1.12.2
New Content
- Generator plugin foundation for MCreator EAP 2026.3.44621 with plugin id
generator-forge-1.12.2, plugin weight 100 and EAP build-number aware version
support. - 2026.3-format
generator.yamlfor theforge-1.12.2generator, including
mod base templates, language file configuration, resource folders and the
Java model key for the legacy 1.12.2 renderer. - Self-contained Gradle 9.8.0 build for the plugin with a Java 25 toolchain,
local wrapper distribution URL and project-local Gradle caches. - RetroFuturaGradle 2.0.6 / Gradle 9.8.0 / Java 8 toolchain workspace base for
generated mods, including local wrapper distribution URL, workspace-local
Gradle caches and a guardedmcreator.gradleinclude. - Foojay toolchain resolver configuration in the generated workspace, so a
Java 8 toolchain is provisioned automatically when no local JDK 8 is present. - Creative tab mod element: name, icon and search bar rendering through the
generated<Mod>Tabsclass. - Item mod element: fixed/procedure tooltips, normal and tool models, rarity, creative tabs, stack size,
durability, enchantability, use duration, use animation, destroy speed,
melee damage and attack speed, container item / recipe remainder, food
properties, block harvesting and localized name. - Recipe mod element: shaped and shapeless crafting JSON, furnace smelting
registered throughGameRegistry.addSmelting, and brewing recipes generated
as per-elementIBrewingRecipeimplementations with potion-type aware
inputs and outputs. - Block mod element for the default basic cube: per-face textures, custom boolean\n block properties, cube model,
block state, block item model, hardness, resistance, step sound, creative
tabs, stack size, rarity, self/custom drops and XP range. - Stairs, slab, fence and wall block bases, including full block state/model
sets, slab double placement/drops and multipart fence/wall models. - Cutout and translucent render layer support for transparent cubes.
- Minimal procedure element with world/entity chat, set/remove block, get/set block state properties, play
sound, give item, call-procedure and return-value blocks. - Block interaction triggers that call procedures: right click, block added,
destroyed by player, entity walk, scheduled tick, random tick and neighbour
change. No global triggers are provided. - Block item generation with optional auto-generated
ItemBlock, multi-tab
creative tab membership and automatic model registration. - Ore Dictionary bridge for MCreator tags:
ITEMSandBLOCKStags generate
OreDictionary.registerOreentries, with conventional names for common
forge:tag paths and a fallback for custom tags. - Inert tag JSON output keeps MCreator's tag editor workflow available while
the actual 1.12.2 registration uses the Ore Dictionary. - Complete 1.12.2 MCP name mappings for the implemented elements, including a
two-column blocks/items mapping used by both Java code and JSON generation. - Static generator validator that parses all YAML documents, parses all
FreeMarker templates, verifies template references and include paths, checks
plugin metadata and validates the two-column blocks/items mapping. - Headless MCreator render harness used for development verification of the
plugin discovery, workspace creation and template rendering pipeline. - Project documentation: README, changelog, migration report and support matrix.
Changes
- The generator architecture was rebuilt on the Apache-2.0
2021.1-v4.0.1
Forge 1.12.2 reference generator instead of the incomplete 2025.3 community
snapshot, whose templates and workspace base mixed 1.13+ APIs into 1.12.2
code and could not be rendered. - Creative tabs are created in a dedicated generated initialization class, so
item initialization always runs after the custom tab fields are populated. - The generated plugin uses a single
<Mod>Itemsregistry class rather than the
ASM-tag based element registry of the 2021.1 reference generator, which has no
deterministic initialization order for creative tab dependencies. - The Forge build is locked to
14.23.5.2847, the 1.12.2 Forge version
supported by RetroFuturaGradle 2.0.6 and the newest build that still
publishes the legacy-userdevartifact. - The generated workspace build chain moved from ForgeGradle 2.3 / Gradle
4.10.3 to RetroFuturaGradle 2.0.6 / Gradle 9.8.0. MCreator 2026.3 sends a
Java 25 bytecode Gradle synchronization action (class file major version 69)
that Gradle 4.10.3 cannot parse or load; Gradle 9.8 runs on MCreator's Java 25
runtime and RetroFuturaGradle supplies the Java 8 compile/run toolchain. - The generated mod no longer requires MCreator's Gradle Java home override to
point at a JDK 8 installation. - Generated mod folders use the 2026.3 default
src/main/javaand
src/main/resourceslayout and the 1.12.2 asset paths
(textures/items,textures/blocks,recipes). - Item creative tab membership is implemented through a generated
getSubItems(CreativeTabs, NonNullList<ItemStack>)override, so an item can
appear in all selected vanilla and custom tabs on Forge 1.12.2. - Item and recipe definitions now use
field_exclusionsinstead of
field_inclusions. Inclusion cleanup hides every GUI component it cannot
resolve by reflection, which broke grouped controls such as the recipe slot
grid. - The exported plugin archive is always named
generator-forge-1.12.2.zip
instead of embedding the plugin version in the file name. - Furnace smelting and brewing recipes are now generated in the
<Mod>Recipes
initialization class, which is registered ingenerator.yamland called from
the generated modinitevent. - Blasting, Smoking, Campfire cooking, Stone cutting and Smithing are rejected
at generation time with an explicit message because these recipe types do not
exist in Forge 1.12.2. potions.yamlnow maps potion types to the 1.12.2PotionTypesconstants used
by brewing recipes.- The blocks/items mapping declares the
CUSTOM:mapping prefix, so procedure
block inputs keep their workspace element identity.
Fixes
Fixed 24 bug(s).
- Creative tab selections after the first entry were ignored for items.
- Recipe elements could not be created because the recipe slot grid, result and
input selectors were hidden by the previous field inclusion configuration. - The plugin export file name changed with every version instead of staying
generator-forge-1.12.2.zip. - Furnace smelting recipes were never registered because the recipes
initialization template was not part of the base templates and was not called
from the mod init event. - Generated recipe and brewing classes did not import
net.minecraft.init.Blocks,
so recipes using vanilla blocks failed to compile. - Basic blocks ignored the per-face texture fields and always rendered the
texturefield as a singlecube_alltexture. - Block elements without a stored
blockBasevalue failed FreeMarker rendering,
so their block class and blockstate were not generated. - The
block_addprocedure block crashed when the block input exposed only its
mapped value; MCItem mapping now falls back between unmapped and mapped
values. - Generated procedure classes did not import
net.minecraft.world.World(and
other dependency types), so every generated procedure failed to compile. - Blockstate JSON referenced block models as
<modid>:block/<name>, which
resolves tomodels/block/block/<name>in 1.12.2 and produced missing models. - Blockstate property procedure templates required a block input; when MCreator
supplied no block input they failed generation instead of using the current
trigger blockstate. - The block property setter template emitted a BlockState value expression as a
statement and did not understandblockstate_from_depsinputs, producing
broken ternary/parenthesis code. - Blockstate property templates called
getProperty(String)onIBlockState;
in 1.12.2 the lookup must go throughIBlockState.getBlock().getBlockState()
(the block state container). - Custom boolean block properties from the block editor were not generated in
the block class or blockstate, so procedures toggling them had no effect. - State model generation crashed when a state had no particle texture; the
model template now falls back to the state face texture. - State models were generated from combinations that carry no textures; models
now usegetDefinedStates()and blockstate variants resolve their model by
property name/value, so partial integer state sets and a default value work. - Enum property setters used
java.util.Optional; 1.12.2PropertyEnum.parseValue
returns Guavacom.google.common.base.Optional. - Blocks with custom properties did not override
getMetaFromState, so Forge
crashed during block registration while enumerating block states. - Blockstates for multiple custom properties only covered the first state map
key, leaving bool/enum variants without models; all property combinations are
now generated and resolved against defined state models. - The multi-property blockstate variant list omitted commas between outer
property groups, producing invalid JSON and missing models for every variant. - Custom-property blocks lost their transparency render layer/culling overrides;
crop/cross models were rendered with opaque cube lighting. - Added the pass-through (
isNotColidable) option with null collision and
isPassablesupport. - Added configurable harvest tool/level with
setHarvestLeveland a
requires-correct-tool check. - Added placement-condition procedures in
canPlaceBlockAt/canBlockStay. - Added optional TileEntity generation and registration for blocks with
inventory opt-in. - Ad...