movblock.mov

Ingredients and components

Counted inputs, custom ingredients and stack components.

NTM recipes use vanilla ingredients, a counted-ingredient wrapper, three NTM custom ingredient types, loader-provided component matchers, and a fluid-content component predicate.

Counted NTM ingredients

The shared machine input wrapper is:

{
  "ingredient": "#c:ingots/steel",
  "count": 2
}

count defaults to 1 and must be positive. ingredient is a vanilla ingredient. Optional components and predicates fields narrow the stack through vanilla component matchers. Component values use the registered component's value codec; predicates use the registered predicate's value codec.

{
  "ingredient": "hbm:waste_uranium",
  "components": {"hbm:decay_heat": false}
}

Custom ingredients

Use the custom-ingredient form shown for your selected loader. The payload fields below are otherwise the same. Use the shape from the installed jar when nesting one ingredient inside another.

TypeRequired payloadMeaning
hbm:fluid_contentfluid registered fluid ID; positive amount integer in mBAn item exposing at least that quantity of the specified fluid through its fluid-container handling
hbm:matchersbase vanilla ingredient; component matcher fieldsNarrows the base ingredient by exact components and/or registered component predicates
hbm:narroweditem item ID; within vanilla ingredientNames a specific item while retaining the enclosing ingredient restriction

(Fabric)

Fluid-container ingredient from the generated hbm:jetpack_tank recipe:

{
  "fabric:type": "hbm:fluid_content",
  "fluid": "hbm:kerosene",
  "amount": 1000
}

(NeoForge)

Fluid-container ingredient from the generated hbm:jetpack_tank recipe:

{
  "neoforge:ingredient_type": "hbm:fluid_content",
  "fluid": "hbm:kerosene",
  "amount": 1000
}

As an NTM counted input, put this object under ingredient; count specifies the number of containers.

Component-matching ingredients

The generated hbm:ajr_boots crafting recipe requires an undamaged hbm:titanium_boots item. Its key.B ingredient is:

(Fabric)

{
  "fabric:type": "fabric:components",
  "base": "hbm:titanium_boots",
  "components": {"minecraft:damage": 0}
}

(NeoForge)

{
  "neoforge:ingredient_type": "neoforge:components",
  "items": "hbm:titanium_boots",
  "components": {"minecraft:damage": 0}
}

NTM counted machine inputs put components beside ingredient in the wrapper shown above.

The hbm:fluid_content component predicate

The predicate checks fluid type only, ignoring quantity. Its value is a fluid-ID string:

{
  "ingredient": "hbm:canister",
  "predicates": {"hbm:fluid_content": "minecraft:water"}
}

An absent fluid-content component is treated as minecraft:empty. This predicate and the custom fluid-container ingredient above have different purposes: use the ingredient to demand a quantity through container handling, or the predicate to match the component's type without demanding a quantity.

Stack components in outputs

An output template carries components beside id and optional count:

{
  "id": "hbm:custom_machine",
  "components": {"hbm:custom_machine_type": "example:paper_press"}
}

The controller component names the custom-machine definition ID. In a fluid-content component value {type, amount, pressure?}, type is the registered fluid ID, amount is mB, and optional pressure is PU. Exact matching includes all authored fields. The type-only predicate uses a fluid-ID string.

Context using the same nameShape
Fluid-content ingredient{loader discriminator, fluid, amount}
predicates["hbm:fluid_content"]Fluid-ID string
components["hbm:fluid_content"]{type, amount, pressure?}

Items use their registered prototype defaults when no patch is supplied. New item identities have separate item IDs; stack state uses registered typed components. Copy stateful component values from a relevant installed example.

© 2026 movblock. Original site text is licensed under CC BY-SA 4.0 unless otherwise noted.

On this page