Skip to content

Chapter 8: Machine Recipes & Data Generation

IC2 Rebranded uses standard data-driven JSON recipes. You can add recipes for IC2 machines (Macerator, Compressor, Extractor, Centrifuge, Blast Furnace, etc.) using: 1. Standard JSON recipe files in resources/data/<your_mod_id>/recipe/. 2. Programmatic code generation using AddonRecipeBuilder.


1. Using AddonRecipeBuilder in Data Generators

In your NeoForge data generator provider, AddonRecipeBuilder gives you a type-safe fluent API:

import ic2.api.recipe.AddonRecipeBuilder;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;

public void buildRecipes(RecipeOutput output) {

    // 1. Macerator Recipe: 1 Granite -> 2 Sand
    AddonRecipeBuilder.macerator()
        .input(Ingredient.of(Items.GRANITE))
        .output(new ItemStack(Items.SAND, 2))
        .save(output, "myaddon:macerator/granite_to_sand");

    // 2. Compressor Recipe: 9 Copper Ingots -> 1 Copper Block
    AddonRecipeBuilder.compressor()
        .input(Ingredient.of(Items.COPPER_INGOT), 9)
        .output(new ItemStack(Items.COPPER_BLOCK))
        .save(output, "myaddon:compressor/copper_ingot_to_block");

    // 3. Extractor Recipe: 1 Slime Block -> 9 Slime Balls
    AddonRecipeBuilder.extractor()
        .input(Ingredient.of(Items.SLIME_BLOCK))
        .output(new ItemStack(Items.SLIME_BALL, 9))
        .save(output, "myaddon:extractor/slime_block_to_balls");

    // 4. Centrifuge Recipe: 1 Magma Cream -> 1 Slimeball + 1 Blaze Powder
    AddonRecipeBuilder.centrifuge()
        .input(Ingredient.of(Items.MAGMA_CREAM))
        .outputs(new ItemStack(Items.SLIME_BALL), new ItemStack(Items.BLAZE_POWDER))
        .save(output, "myaddon:centrifuge/magma_cream");
}

2. Supported IC2 Machine Types in AddonRecipeBuilder

Method Target Machine Inputs / Outputs
AddonRecipeBuilder.macerator() Macerator (Grinder) 1 Input $\rightarrow$ 1 Output
AddonRecipeBuilder.compressor() Compressor 1 Input $\rightarrow$ 1 Output
AddonRecipeBuilder.extractor() Extractor 1 Input $\rightarrow$ 1 Output
AddonRecipeBuilder.electricFurnace() Electric Furnace 1 Input $\rightarrow$ 1 Output
AddonRecipeBuilder.centrifuge() Thermal Centrifuge 1 Input $\rightarrow$ Up to 3 Outputs
AddonRecipeBuilder.blastFurnace() Blast Furnace 1 Input $\rightarrow$ 1 Output + Slag
AddonRecipeBuilder.blockCutter() Block Cutter 1 Input $\rightarrow$ Sliced items
AddonRecipeBuilder.metalFormer() Metal Former Rolling, Extruding, Cutting

3. Writing Plain JSON Recipe Files

If you prefer writing recipes directly as JSON files, place them in src/main/resources/data/<your_mod_id>/recipe/<name>.json:

{
  "type": "ic2:macerator",
  "input": {
    "item": "minecraft:granite"
  },
  "output": {
    "id": "minecraft:sand",
    "count": 2
  }
}

Tag-Based Crafting Recipes (Circuit Best Practices)

When creating crafting recipes that require circuits, always use specific tags rather than broad ones: - For Advanced Circuit: Use #c:circuits/advanced, #c:circuit/advanced, or "ic2:advanced_circuit". - For Basic Circuit: Use #c:circuits/basic, #c:circuit/basic, or "ic2:circuit". - Avoid #c:circuits on recipes that require an advanced circuit, as other mods (like Mekanism) place basic circuits into that category.