Enthalpy's recipes and fuel values are ordinary datapack files, so a pack can add, replace or remove any of them. Every example below is a real file from the mod. Recipes go in data/<namespace>/recipe/; to replace one of Enthalpy's, use the same path under data/enthalpy/recipe/ in your datapack. Settings that live in the server config are on Config tuning instead.

Shared building blocks#

Most fields below use one of these shapes.

ShapeWritten asNotes
Ingredient{"item": "minecraft:cod"} or {"tag": "c:ores/coal"}Standard ingredient. It must not be empty. A list of ingredients is allowed anywhere an ingredient is.
Sized ingredient{"ingredient": {"tag": "c:sands"}, "count": 1}An ingredient and how many are used. The ingredient may be a list, to accept alternatives.
Output{"id": "minecraft:coal", "count": 3} or {"tag": "c:dusts/tin", "count": 2}count defaults to 1. A tag output gives the item your preferred mods choose, and a recipe whose output tag is empty is skipped.
Fluid stack{"id": "enthalpy:ethanol", "amount": 80}Amounts are in mB.
Sized fluid ingredient{"tag": "c:plantoil", "amount": 100} or {"fluid": "enthalpy:molten_salt", "amount": 1000}A fluid or fluid tag and the amount used.

energy is the total FE the recipe costs, a whole number above zero. Leave it out for the machine's default, which is in each section below. secondary_chance and byproduct_chance run from 0 to 1 and default to 100%, so a secondary or byproduct you list always arrives unless you lower the chance. Time per recipe is energy divided by the machine's FE per tick, which Config tuning explains.

Recipe types#

Triturator: enthalpy:triturator#

One input ground into a result and an optional secondary. Default energy: 4,000 FE.

FieldRequiredDefaultMeaning
inputYesIngredient.
resultYesOutput.
secondaryNononeOutput, delivered to the byproduct slot.
secondary_chanceNo100%Chance of the secondary, 0 to 1.
energyNo4,000 FETotal FE.
{
  "type": "enthalpy:triturator",
  "input": {
    "tag": "c:ores/coal"
  },
  "result": {
    "id": "minecraft:coal",
    "count": 3
  },
  "secondary": {
    "id": "minecraft:gravel",
    "count": 1
  },
  "secondary_chance": 0.2
}

The machine's recipes are on the Triturator page.

Kerf Mill: enthalpy:kerf_mill#

The same fields as the Triturator. Default energy: 2,000 FE. The mill also builds a recipe, with no file, from every crafting recipe that turns one log into planks: half as many planks again, plus a sawdust.

{
  "type": "enthalpy:kerf_mill",
  "input": {
    "tag": "minecraft:planks"
  },
  "result": {
    "id": "minecraft:stick",
    "count": 3
  },
  "secondary": {
    "tag": "c:dusts/wood",
    "count": 1
  },
  "secondary_chance": 0.25,
  "energy": 1000
}

Eddy Smelter: enthalpy:eddy_smelter#

Two sized ingredients alloyed into a result. Default energy: 4,000 FE.

FieldRequiredDefaultMeaning
firstYesSized ingredient.
secondYesSized ingredient.
resultYesOutput.
secondaryNononeOutput.
secondary_chanceNo100%Chance of the secondary.
energyNo4,000 FETotal FE.
{
  "neoforge:conditions": [
    {
      "type": "neoforge:not",
      "value": {
        "type": "neoforge:tag_empty",
        "tag": "c:ingots/bronze"
      }
    },
    {
      "type": "neoforge:not",
      "value": {
        "type": "neoforge:tag_empty",
        "tag": "c:ingots/tin"
      }
    }
  ],
  "type": "enthalpy:eddy_smelter",
  "first": {
    "ingredient": [
      {
        "tag": "c:ingots/copper"
      },
      {
        "tag": "c:dusts/copper"
      }
    ],
    "count": 3
  },
  "second": {
    "ingredient": [
      {
        "tag": "c:ingots/tin"
      },
      {
        "tag": "c:dusts/tin"
      }
    ],
    "count": 1
  },
  "result": {
    "tag": "c:ingots/bronze",
    "count": 4
  },
  "energy": 6000
}

This one also shows load conditions; see below.

Vortex Separator: enthalpy:vortex_separator#

One input split into items and a fluid. The result, secondary and fluid are each optional, so one recipe can make only an item, only a fluid, or both. Default energy: 3,000 FE.

FieldRequiredDefaultMeaning
inputYesIngredient.
resultNononeOutput.
secondaryNononeOutput.
secondary_chanceNo100%Chance of the secondary.
fluidNononeFluid stack, sent to the output tank.
lavaNo0 mBmB of lava drawn from the lava tank as each item finishes. Zero or more.
energyNo3,000 FETotal FE.

An item and a fluid (this is the salt-block recipe, which also uses lava):

{
  "type": "enthalpy:vortex_separator",
  "input": {
    "tag": "c:storage_blocks/salt"
  },
  "fluid": {
    "id": "enthalpy:molten_salt",
    "amount": 1000
  },
  "lava": 100,
  "energy": 6000
}

An item and a secondary, with no fluid:

{
  "type": "enthalpy:vortex_separator",
  "input": {
    "item": "minecraft:magma_cream"
  },
  "result": {
    "id": "minecraft:slime_ball",
    "count": 1
  },
  "secondary": {
    "id": "minecraft:blaze_powder",
    "count": 1
  },
  "secondary_chance": 1.0
}

The input can also be a combined ingredient. The recipe for any raw fish that is not oily subtracts enthalpy:oily_fish from c:foods/raw_fish with neoforge:difference; open data/enthalpy/recipe/vortex_separator/fish/lean.json in the jar to see it.

Distiller: enthalpy:distiller#

One input distilled into a fluid. Default energy: 3,200 FE.

FieldRequiredDefaultMeaning
inputYesIngredient.
resultYesFluid stack.
energyNo3,200 FETotal FE.
{
  "type": "enthalpy:distiller",
  "input": {
    "item": "minecraft:apple"
  },
  "result": {
    "id": "enthalpy:ethanol",
    "amount": 80
  },
  "energy": 3200
}

Reaction Vat: enthalpy:reaction_vat#

Two fluids, and an optional catalyst item, combined into a fluid and an optional item. Default energy: 4,000 FE.

FieldRequiredDefaultMeaning
firstYesSized fluid ingredient, for the first tank.
secondYesSized fluid ingredient, for the second tank.
catalystNononeIngredient in the catalyst slot. One is used up each time the recipe runs. With none listed, the recipe needs no catalyst.
resultYesFluid stack.
byproductNononeOutput.
byproduct_chanceNo100%Chance of the byproduct.
energyNo4,000 FETotal FE.
{
  "type": "enthalpy:reaction_vat",
  "first": {
    "tag": "c:plantoil",
    "amount": 100
  },
  "second": {
    "tag": "c:ethanol",
    "amount": 50
  },
  "catalyst": {
    "item": "enthalpy:fish_meal"
  },
  "result": {
    "id": "enthalpy:biodiesel",
    "amount": 150
  },
  "byproduct": {
    "id": "enthalpy:glycerin"
  },
  "byproduct_chance": 0.25,
  "energy": 4000
}

Brine Accretor: enthalpy:brine_accretor#

A stack of items grown into a crystal in molten salt. Default energy: 40,000 FE. The machine takes no tier kits, so its speed is set by its own config rate.

FieldRequiredDefaultMeaning
inputYesSized ingredient.
saltYesSized fluid ingredient: the salt, and how much of it the crystal drinks.
resultYesOutput.
energyNo40,000 FETotal FE.
{
  "type": "enthalpy:brine_accretor",
  "input": {
    "ingredient": {
      "item": "minecraft:magma_block"
    },
    "count": 1
  },
  "salt": {
    "tag": "c:molten_salt",
    "amount": 1000
  },
  "result": {
    "id": "enthalpy:pyric_crystal",
    "count": 1
  },
  "energy": 40000
}

Fish mutation: enthalpy:fish_mutation#

What a Spawning Basin makes from a pair of fish and a catalyst. This type has no energy: the Basin's config sets its speed and cost.

FieldRequiredDefaultMeaning
parentYesIngredient for one fish of the pair.
partnerYesIngredient for the other. The pair may be in either order.
catalystYesIngredient in the catalyst slot. One is used up when the mutation comes up.
resultYesThe new fish, as an item stack: {"id": "...", "count": 1}.
chanceYesChance each breeding mutates, 0 to 1.
tierNobaseThe lowest Spawning Basin tier the mutation rolls in: base, tempered, fortified, luminous or harmonic.
{
  "neoforge:conditions": [
    {
      "type": "neoforge:not",
      "value": {
        "type": "neoforge:tag_empty",
        "tag": "c:nuggets/iron"
      }
    }
  ],
  "type": "enthalpy:fish_mutation",
  "parent": {
    "item": "minecraft:cod"
  },
  "partner": {
    "item": "minecraft:cod"
  },
  "catalyst": {
    "tag": "c:nuggets/iron"
  },
  "result": {
    "id": "enthalpy:ferric_cod",
    "count": 1
  },
  "chance": 0.05
}

The tier field goes after chance, for example "tier": "fortified". None of Enthalpy's own mutations set it, so every one of them works in a base Basin. The custom fish page shows a tiered mutation in full.

Fish soaking: enthalpy:fish_soaking#

A thrown item left in a source block of a fluid absorbs it and becomes something else. This type has no energy.

FieldRequiredDefaultMeaning
inputYesIngredient.
fluidYesA fluid tag, written without a #: "c:creosote".
resultYesItem stack: {"id": "...", "count": 1}.
ticksNo5 sHow long it must sit in the fluid, in ticks.
{
  "neoforge:conditions": [
    {
      "type": "neoforge:mod_loaded",
      "modid": "immersiveengineering"
    }
  ],
  "type": "enthalpy:fish_soaking",
  "input": {
    "item": "minecraft:cod"
  },
  "fluid": "c:creosote",
  "result": {
    "id": "enthalpy:creosote_cod",
    "count": 1
  },
  "ticks": 100
}

Data maps#

A data map attaches a value to an item or a fluid. The file is data/enthalpy/data_maps/item/<name>.json for items and data/enthalpy/data_maps/fluid/<name>.json for fluids. It has one object, values, keyed by ID, or by a tag with a leading #. Entries from different datapacks merge, so your file adds to Enthalpy's rather than replacing it. To replace an entry, write it with {"replace": true, "value": {...}}; to remove one, list its key under remove. All of this is NeoForge's standard data map behaviour.

Caloric fuels: enthalpy:caloric_fuels#

Items with a fixed energy value for the Caloric Engine. Any other item that burns in a furnace is worth its burn time in ticks, times the config's FE per burn tick, times its efficiency; the standard furnace-fuel data map sets the burn time, and Enthalpy uses it for Sawdust.

FieldRequiredMeaning
energyYesTotal FE the item gives, a whole number above zero.
{
  "values": {
    "minecraft:coal_block": {
      "energy": 540000
    },
    "minecraft:blaze_rod": {
      "energy": 80000
    },
    "minecraft:dried_kelp_block": {
      "energy": 100000
    },
    "minecraft:lava_bucket": {
      "energy": 200000
    }
  }
}

Igneous, ignition and kettle fuels#

Three maps for the three fluid engines: enthalpy:igneous_fuels, enthalpy:ignition_fuels and enthalpy:kettle_fuels. All three have one field, and all three are keyed by fluid or fluid tag.

FieldRequiredMeaning
energy_per_bucketYesTotal FE one bucket (1,000 mB) gives, a whole number above zero.

The Igneous Engine's map, in full:

{
  "values": {
    "#minecraft:lava": {
      "energy_per_bucket": 200000
    }
  }
}

The Ignition Engine's map is keyed by tags such as c:crude_oil, c:ethanol and c:biodiesel, so another mod's fuel works as soon as it carries the right tag. The Kettle Engine's map holds c:steam. The values are on the fuels reference.

Fish yields: enthalpy:fish_yields#

Makes a fish a resource fish: an Ecotone breeding it gives a resource instead of a young fish, some of the time.

FieldRequiredDefaultMeaning
itemYesOutput: the resource, as an item or a tag.
chanceYesChance a breeding that does not copy the fish gives the resource, 0 to 1.
fish_chanceNo0Chance a breeding makes another of the fish instead, 0 to 1. At 0 the fish never copies itself.

A fish with no entry breeds copies of itself every time. A Spawning Basin also uses fish_chance for a resource fish, and breeds a copy only that often. An excerpt:

{
  "values": {
    "enthalpy:ferric_cod": {
      "item": {
        "id": "minecraft:iron_nugget",
        "count": 1
      },
      "chance": 0.66,
      "fish_chance": 0.0991
    },
    "enthalpy:pewter_perch": {
      "item": {
        "tag": "c:nuggets/tin",
        "count": 1
      },
      "chance": 0.75,
      "fish_chance": 0.1111
    }
  }
}

Fish ammo: enthalpy:fish_ammo#

What a fish does when fired from the Haddock Howitzer. Everything is optional; a fish with no entry fires plain.

FieldRequiredDefaultMeaning
damageNo0Added to the shot's damage. Can be negative.
fire_secondsNo0Seconds the target is set alight, 0 to 60.
effectsNononeA list of standard mob effect objects (id, duration in ticks, and optionally amplifier).
{
  "values": {
    "#c:foods/cooked_fish": {
      "damage": -3
    },
    "minecraft:pufferfish": {
      "effects": [
        {
          "id": "minecraft:poison",
          "duration": 120
        }
      ]
    },
    "enthalpy:volt_puffer": {
      "effects": [
        {
          "id": "minecraft:poison",
          "duration": 120
        }
      ]
    },
    "enthalpy:candlefish": {
      "fire_seconds": 4
    }
  }
}

Load conditions#

Enthalpy ships recipes for metals and materials from other mods, so most of those files carry neoforge:conditions and only load when the mod or tag exists. Put a neoforge:conditions list at the top of a recipe file to do the same. Enthalpy uses two conditions:

  • neoforge:mod_loaded with a modid: used for content that belongs to one mod, such as a crystal that needs Allthemodium, or a soaking recipe that needs Immersive Engineering.
  • neoforge:not wrapping neoforge:tag_empty with a tag: the recipe loads only when the tag has something in it. A recipe lists one for each tag it reads or writes, as the bronze recipe above does for its ingot and for tin.

The conditions are separate from the empty-tag check at use time. A recipe whose output tag turns out to be empty is skipped even without a condition; the conditions stop a recipe loading at all, so it never shows in JEI. A mod condition example, from the Allthemodium crystal recipe:

{
  "neoforge:conditions": [
    {
      "type": "neoforge:mod_loaded",
      "modid": "allthemodium"
    }
  ],
  "type": "enthalpy:brine_accretor",
  "input": {
    "ingredient": {
      "tag": "c:storage_blocks/allthemodium"
    },
    "count": 1
  },
  "salt": {
    "tag": "c:molten_salt",
    "amount": 64000
  },
  "result": {
    "id": "enthalpy:allthemodium_crystal",
    "count": 1
  },
  "energy": 400000
}

Conditions go on data map entries only in NeoForge's wrapped form, {"value": {...}, "neoforge:conditions": [...]}. Enthalpy's own data maps do not use them.