Skip to main content

Creating/Removing recipes in mechanisms

Below is a comprehensive guide for players on how to create custom JSON recipes for the industrialupgrade:universal_recipe system. This document focuses exclusively on the recipe format and usage—no internal algorithm details are included.


1. Basic JSON Structure

Every Universal Recipe JSON file must follow this format(adding):

{
"type": "industrialupgrade:universal_recipe",
"recipe_type": "<machine_name>",
"isFluidRecipe": <true|false>, // optional; defaults to false
"inputs": [
// array of input components: item, fluid, or tag
],
"outputs": [
// array of output components: item or fluid
],
"params": {
// optional additional parameters (numbers, booleans, strings)
}
}
  • type must always be "industrialupgrade:universal_recipe".
  • recipe_type defines the machine or processing type to which this recipe belongs (e.g., "macerator", "fluid_integrator", "crusher", "alloy_smelter"). The mod registers recipes under this name.
  • isFluidRecipe (boolean) indicates whether the recipe should also be registered as a fluid-centric recipe. If omitted, it defaults to false.
  • inputs is an array of input definitions (items, fluids, or tags).
  • outputs is an array of output definitions (items or fluids).
  • params is an optional object for any additional metadata (e.g., heat value, processing time, flags).

Every Universal Recipe JSON file must follow this format(removing):

{
"type": "industrialupgrade:universal_recipe_delete",
"recipe_type": "<machine_name>",
"isFluidRecipe": <true|false>, // optional; defaults to false
"isRemoveAll": <true|false>, // optional; defaults to false
"output": [
// array of output components: item or fluid
]
}
  • type must always be "industrialupgrade:universal_recipe_delete".
  • recipe_type defines the machine or processing type to which this recipe belongs (e.g., "macerator", "fluid_integrator", "crusher", "alloy_smelter"). The mod registers recipes under this name.
  • isFluidRecipe (boolean) indicates whether the recipe should also be registered as a fluid-centric recipe. If omitted, it defaults to false.
  • isRemoveAll (boolean) indicates whether it is necessary to delete all recipes with such an output`.
  • output is an array of output definitions (items or fluids).

2. Field Descriptions

2.1. recipe_type

  • Type: string
  • Purpose: Specifies the machine or processing category. This string must match exactly the identifier registered in the mod’s code (e.g., "macerator" or "fluid_integrator").

Example:

"recipe_type": "fluid_integrator"

Registers the recipe under the fluid_integrator machine.


2.2. isFluidRecipe

  • Type: boolean (true or false)

  • Purpose: If true, the mod will attempt to register the recipe in both the standard machine registry and the fluid‐only registry. Useful when a recipe involves fluids as primary inputs or outputs.

  • When to use true:

    • If you want the recipe to function as pure‐fluid processing (only fluid inputs or outputs).

    • If you want both a standard item‐based version and a fluid‐based version available. In mixed recipes (items + fluids), setting isFluidRecipe: true ensures the mod creates two registrations:

      1. A standard version using item slots (plus one fluid slot if present).
      2. A fluid‐driven version (all fluids plus one item slot if present).
  • When to omit or set false:

    • Pure item‐to‐item recipes.
    • Mixed recipes where you only want the item‐driven variant.
    • Fluid‐only recipes that should NOT register as pure‐fluid.

Note: Fluid‐only recipes require isFluidRecipe: true. Otherwise, they will not appear in the fluid registry.


2.3. inputs

An array of objects, each describing exactly one required input. Each object must include:

KeyDescription
typeOne of: "item", "fluid", or "tag".
idFor item: a ResourceLocation of a Minecraft or mod item (e.g., "minecraft:iron_ingot").
For fluid: a ResourceLocation of a fluid (e.g., "minecraft:water").
For tag: a Forge tag name (e.g., "forge:ingots/iron").
amountA positive integer. Defaults to 1 if omitted. For fluids, this is in millibuckets (mB).
  • type: "item" creates an ItemStack with the specified count.
  • type: "fluid" creates a FluidStack (number in mB).
  • type: "tag" creates an ore‐dictionary‐style entry that matches any item in that tag.

Example:

"inputs": [
{ "type": "item", "id": "minecraft:iron_ingot", "amount": 1 },
{ "type": "fluid", "id": "minecraft:water", "amount": 1000 }
]
  • Requires 1× iron ingot and 1000 mB (1 bucket) of water.

2.4. outputs

An array of objects describing each output. Each object must include:

KeyDescription
typeOne of: "item" or "fluid".
idResourceLocation of the output item or fluid.
amountA positive integer. Defaults to 1. For fluids, this is in mB.
  • tag is not allowed in outputs, only item or fluid.

Example:

"outputs": [
{ "type": "fluid", "id": "minecraft:lava", "amount": 250 },
{ "type": "item", "id": "minecraft:gold_nugget", "amount": 3 }
]
  • Produces 250 mB lava and 3× gold nuggets.

2.5. params (optional)

An object of arbitrary key‐value pairs. Values can be:

  • Boolean: true or false.
  • Number: integer or decimal.
  • String: plain text.

These parameters become metadata for the machine’s processing logic. Typical uses:

  • Processing heat temperature (heat) as a number.
  • Flags such as unstable: true to mark a dangerous recipe.
  • Custom strings like tier: "high".

Example:

"params": {
"heat": 3000,
"unstable": true,
"note": "high_tier_recipe"
}
  • heat: 3000 → processed as a number.
  • unstable: true → boolean flag.
  • note: "high_tier_recipe" → custom string, available if your machine logic reads it.

You can create recipes for any machine or processing type as long as that name matches a registered identifier in the mod’s code. Common examples include:

Mechanism NameRecipe nameisFluidRecipe?isItemRecipe?Input Item SlotsFluid Item Slotsparams
Alloy Smelteralloysmelter❌️2❌️temperature (0-5000)
Enrichmentenrichment❌️2❌️rad_amount (integer 0-infinity)
Dyeing Machinepainter❌️2❌️❌️
Solarite Plate Manufacturersunnuriumpanel❌️2❌️❌️
Nuclear Fusion Reactorsynthesis❌️2❌️rad_amount (integer 0-infinity) and percent (integer 0-100)
Modification Stationupgradeblock❌️2❌️❌️
Module Removal Stationantiupgradeblock❌️1❌️❌️
Improved Alloy Smelteradvalloysmelter❌️3❌️temperature (0-5000)
Stone Generatorgenstone❌️2❌️❌️
Circuit Manufacturermicrochip❌️5❌️temperature (0-5000)
Solarite Transformersunnurium❌️4❌️❌️
Wither Manufacturerwither❌️7❌️❌️
Advanced Molecular Transformerdoublemolecular❌️2❌️energy (double 0-infinity)
Molecular Transformermolecular❌️1❌️energy (double 0-infinity)
Chemical Plantplastic❌️21❌️
Plastic Plate Machineplasticplate❌️11❌️
Solid Matter Transformerconverter❌️1❌️quantitysolid (array of double, 8 elements, each 0.00-infinity) — quantitysolid_0: matter quantitysolid_1: sunmatter quantitysolid_2: aquamatterquantitysolid_3: nethermatter quantitysolid_4: nightmatter quantitysolid_5: earthmatter quantitysolid_6: endmatter quantitysolid_7: aermatter
Maceratormacerator❌️1❌️❌️
Compressorcompressor❌️1❌️❌️
Extractorextractor❌️1❌️❌️
Recycler (black list)recycler❌️1❌️❌️
Electric Furnace (without Furnace from Minecraft)furnace❌️1❌️❌️
Extruderextruding❌️1❌️❌️
Cutting Machinecutting❌️1❌️❌️
Rolling machinerolling❌️1❌️❌️
Autonomous Farmfarmer❌️1❌️❌️
Scrap Assemblerscrap❌️1❌️❌️
Combined Maceratorcomb_macerator❌️1❌️❌️
Mineral Separatorhandlerho❌️1❌️temperature (0-5000), input0..inputN (int 0-100)
Rotor Assemblerrotor_assembler❌️5❌️❌️
Rod Manufacturerrod_assembler❌️6❌️❌️
Ender Transformerendcollector❌️1❌️need (double 0-infinity)
Air Transformeraercollector❌️1❌️need (double 0-infinity)
Earth Transformerearthcollector❌️1❌️need (double 0-infinity)
Nether Transformernethercollector❌️1❌️need (double 0-infinity)
Water Transformeraquacollector❌️1❌️need (double 0-infinity)
Crystallizerdefaultcollector❌️1❌️need (double 0-infinity)
Ore Washing Machineorewashing❌️1❌️❌️
Heat centrifugecentrifuge❌️1❌️minHeat ( 0-5000)
Mechanical Stampgearing❌️1❌️❌️
Water Rotor Assemblerwater_rotor_assembler❌️5❌️❌️
Welding Machinewelding❌️2❌️temperature (0-5000)
Replicatorreplicator❌️10matter (double 0-infinity, 0.5 -> 500 mb, 0.05 -> 50 mb)
Battery Factorybattery_factory❌️9❌️❌️
Socket Factorysocket_factory❌️6❌️❌️
Active Matter Factoryactive_matter_factory❌️1❌️❌️
Laser Polisherlaser❌️1❌️❌️
Graphite Crystallizergraphite_recipe❌️2❌️❌️
Crystal Growersilicon_recipe❌️2❌️❌️
Moonlight Infusersolar_glass_recipe❌️1❌️❌️
Stamping Machinestamp_vent❌️4❌️❌️
Stamping Machinestamp_plate❌️4❌️❌️
Stamping Machinestamp_exchanger❌️4❌️❌️
Stamping Machinestamp_coolant❌️4❌️❌️
Stamping Machinestamp_capacitor❌️4❌️❌️
Reactor Rod Manufacturerreactor_simple_rod❌️5❌️❌️
Reactor Rod Manufacturerreactor_dual_rod❌️3❌️❌️
Reactor Rod Manufacturerreactor_quad_rod❌️7❌️❌️
Radioactive Waste Reprocessorwaste_recycler❌️1❌️❌️
Enchanting Machineenchanter_books❌️2❌️exp (integer 0-infinity)
Anvilanvil❌️1❌️❌️
Upgrade Kit Manufacturerupgrade_machine❌️9❌️❌️
Item Divideritem_divider11❌️
Item-to-Fluid Divideritem_divider_fluid11❌️
Fluid Adapterfluid_adapter21❌️
Fluid Integratorfluid_integrator11❌️
Solid-State Electrolyzersolid_electrolyzer11❌️
Primitive Latex Extractorsqueezer11❌️
Advanced Alloy Smelterimpalloysmelter❌️4❌️temperature (0-8000)
Perfect Alloy Smelterperalloysmelter❌️5❌️temperature (0-10000)
Solid-Fluid Mixersolid_fluid_mixer11❌️
Primal Fluid Integratorprimal_fluid_integrator11❌️
Neutronium transformerneutron_separator❌️1❌️❌️
Electric Wilson Chamberpositrons❌️2❌️❌️
Primal Laser Polisherprimal_laser_polisher❌️1❌️❌️
Cyclotron Controllercyclotron❌️1❌️chance (integer 0-100), cryogen (consuming cryogen per tick, integer 1-100, default 1), positrons (consuming positrons per tick, integer 1-100, default 1)
Smeltery Furnacesmeltery11❌️
Solid Mixersolid_mixer❌️2❌️❌️
Triple Solid Mixertriple_solid_mixer❌️3❌️❌️
Single Fluid Adaptersingle_fluid_adapter11❌️
Electric Programming Tableprogramming❌️1❌️❌️
Electric Electronic Assemblerelectronics❌️5❌️❌️
Steam Sharpenersharpener❌️1❌️❌️
Radioactive Ore Handlerradioactive_handler❌️1❌️random (additional output (not required), integer 0-100)
Industrial Radioactive Element Purifierore_purifier❌️1❌️se (consuming solarium per tick, double 0-100)
Quantum Transformerquantummolecular❌️2❌️energy (integer 0-infinity)
Electric Cable Insulatorwire_insulator❌️2❌️❌️
Crystal Charger/Steam Crystal Chargercharger❌️1❌️❌️
Reinforced Anvilstrong_anvil❌️1❌️❌️
Refractory Furnacerefractory_furnace11❌️
Electric Refractory Furnaceelec_refractory_furnace❌️1❌️❌️
Electric Brewing Machinebrewing❌️2❌️❌️
Sawmillsawmill❌️1❌️❌️
Expanded Stone Generatorgenadditionstone❌️2❌️❌️
Incubatorincubator11❌️
Insulatorinsulator12❌️
RNA Collectorrna_collector11❌️
Genetic Stabilizergenetic_stabilizer11❌️
Bee Product Centrifugegenetic_centrifuge❌️1❌️❌️
Inoculatorinoculator❌️2❌️❌️
Genetic Transposergenetic_transposer❌️4❌️❌️
Genetic Polymerizergenetic_polymerizer❌️5❌️❌️
Rover Upgrade Stationroverupgradeblock❌️2❌️❌️
Rover Assemblerroverassembler❌️40❌️❌️
Probe Assemblerprobeassembler❌️36❌️❌️
Satellite Assemblersatelliteassembler❌️36❌️❌️
Rocket Assemblerrocketassembler❌️37❌️❌️
Obsidian Generatorobsidian❌️❌️2❌️
Gas Mixergas_combiner❌️❌️2❌️
Electrolyzerelectrolyzer❌️❌️1❌️
Fluid Coolerrefrigerator❌️❌️1❌️
Fluid Separatorfluid_separator❌️❌️1❌️
Polymerizerpolymerizer❌️❌️1❌️
Oil Purifieroil_purifier❌️❌️1❌️
Electric Latex Dryerdryer❌️❌️1❌️
Oil Refineryoil_refiner❌️❌️1❌️
Improved Oil Refineryadv_oil_refiner❌️❌️1❌️
Advanced Oil Refineryimp_oil_refiner❌️❌️1❌️
Fluid Mixerfluid_mixer❌️❌️2❌️
Fluid Heaterheat❌️❌️1temperature (0-1000)
Gas Chambergas_chamber❌️❌️2❌️
Smeltery Casingingot_casting❌️❌️1❌️
Smeltery Casinggear_casting❌️❌️1❌️
Solid-Fluid Integratorsolid_fluid_integrator❌️❌️2❌️
Mini Smelterymini_smeltery❌️❌️1❌️
Mutatronmutatron❌️❌️2❌️
Genetic Reverserreverse_transcriptor❌️❌️1❌️
Genetic Replicatorgenetic_replicator❌️❌️2❌️

If you add a new machine in your mod and register it under name "my_custom_machine", then set "recipe_type": "my_custom_machine" in your JSON to register there.


4. Example Recipes

4.1. Fluid Integrator (Item + Fluid → Fluid + Item)

{
"type": "industrialupgrade:universal_recipe",
"recipe_type": "fluid_integrator",
"isFluidRecipe": true,
"inputs": [
{ "type": "item", "id": "minecraft:iron_ingot", "amount": 1 },
{ "type": "fluid", "id": "minecraft:water", "amount": 5000 }
],
"outputs": [
{ "type": "fluid", "id": "minecraft:lava", "amount": 1000 },
{ "type": "item", "id": "minecraft:gold_ingot", "amount": 1 }
],
"params": { }
}
  • Inputs: 1× iron ingot + 5000 mB water.
  • Outputs: 1000 mB lava + 1× gold ingot.
  • Note: isFluidRecipe: true ensures both a standard and fluid‐driven registration.

4.2. Macerator (Tag → Item) with Parameters

{
"type": "industrialupgrade:universal_recipe",
"recipe_type": "macerator",
"inputs": [
{ "type": "tag", "id": "forge:ingots/iron", "amount": 1 }
],
"outputs": [
{ "type": "item", "id": "minecraft:gold_ingot", "amount": 1 }
],
"params": {

}
}
  • Inputs: 1× any iron ingot (from tag forge:ingots/iron).

  • Outputs: 1× gold ingot.

  • Parameters:

    • heat = 3000 (machine can read required temperature).
    • unstable = true (flag for potential failure/explosion).
  • isFluidRecipe omitted → defaults to false (standard item‐based recipe).

4.3. Fluid Purifier (Fluid → Fluid Only)

{
"type": "industrialupgrade:universal_recipe",
"recipe_type": "fluid_purifier",
"isFluidRecipe": true,
"inputs": [
{ "type": "fluid", "id": "industrialupgrade:contaminated_oil", "amount": 3000 }
],
"outputs": [
{ "type": "fluid", "id": "industrialupgrade:clean_oil", "amount": 2500 },
{ "type": "fluid", "id": "industrialupgrade:oil_waste", "amount": 500 }
],
"params": {

}
}
  • Inputs: 3000 mB of contaminated_oil.
  • Outputs: 2500 mB of clean_oil + 500 mB of oil_waste.
  • Note: Pure fluid recipe must include isFluidRecipe: true.

5. Tips & Best Practices

  1. Units for Fluids: Always specify fluid amount in millibuckets (mB). 1 bucket = 1000 mB.

  2. Forge Tags: When using type: "tag", confirm the tag exists (e.g., forge:ingots/iron). Tags allow recipes to accept any item matching that category.

  3. Parameters (params): Use numeric values for temperatures, speeds, or durations. Boolean flags (true/false) can control special behaviors. Strings are for custom markers—ensure your machine code reads them if needed.

  4. Mixed Recipes (Items + Fluids): Set isFluidRecipe: true to generate both item‐driven and fluid‐driven variants. Without this flag, a fluid‐only recipe will fail to register correctly.

  5. File Path & Naming Convention: Place each recipe under:

    data/industrialupgrade/recipes/<machine_name>/<recipe_name>.json

    For example:

    data/industrialupgrade/recipes/macerator/iron_to_gold.json
  6. Default Amount: If an amount field is omitted, it defaults to 1. However, it’s best practice to always specify amounts explicitly—especially for fluids.

  7. No tag in Outputs: type: "tag" is valid only in inputs, not in outputs.

  8. Case Sensitivity: ResourceLocations and tag names are case‐sensitive. Use all lowercase and the correct namespace (e.g., minecraft:, forge:, or your mod’s namespace).

  9. Debugging Missing Recipes: If a recipe does not appear in‐game, check:

    • The JSON path matches data/industrialupgrade/recipes/<machine_name>/....
    • No typos in keys (type, recipe_type, inputs, outputs).
    • The mod’s .log file for any JSON parsing errors or IllegalArgumentException: Unknown input type.

6. Recipe Template (English)

{
"type": "industrialupgrade:universal_recipe",
"recipe_type": "<your_machine_name>",
"isFluidRecipe": <true|false>, // remove if no fluids involved
"inputs": [
{
"type": "<item|fluid|tag>",
"id": "<mod_or_minecraft:resource_or_tag>",
"amount": <integer>
}
// ...add as many inputs as needed
],
"outputs": [
{
"type": "<item|fluid>",
"id": "<mod_or_minecraft:resource>",
"amount": <integer>
}
// ...add as many outputs as needed
],
"params": {
// optional key:value pairs for your machine logic
"customSpeed": 150,
"requireHeat": true,
"description": "tier2_recipe"
}
}

Guidance:

  • Replace <your_machine_name> with the exact identifier used in the mod’s code.
  • Omit isFluidRecipe if you only need a standard item‐to‐item recipe.
  • Include at least one type: "fluid" input if you set isFluidRecipe: true for fluid processing.
  • Always validate id strings (e.g., minecraft:iron_ingot or modid:custom_fluid).

7. Conclusion

With this guide, you now have a clear, step‐by‐step reference for creating:

  • Pure item recipes.
  • Pure fluid recipes.
  • Mixed item + fluid recipes.

Use tags for flexibility, specify fluid amounts in mB, and leverage params for custom machine behavior. Place your JSON files under the correct (to 1.20.1) data/recipes/<machine>/ path, (from 1.21.1) data/recipe/<machine>/ path, and your new recipes will work seamlessly in IndustrialUpgrade. Happy crafting!