A complete reference for writing summoning_altar:summoning_ritual recipes — every field, how the ritual actually plays out, and five worked examples covering the different features.


1. Where recipes live

data/<namespace>/recipes/<recipe_name>.json

The recipe's ID becomes <namespace>:<recipe_name>. Every file starts with:

{
  "type": "summoning_altar:summoning_ritual"
}

2. Field reference

Field Type Required Default Description
type string ✅ — Must be "summoning_altar:summoning_ritual"
catalyst Ingredient ✅ — The item that triggers the ritual
item_inputs array of IngredientStack ❌ [] Items that must already be sitting in the altar
item_outputs array of ItemOutput ❌ [] Item stacks spawned on completion
entity_outputs array of EntityOutput ❌ [] Entities spawned on completion
events array of RitualEvent ❌ [] Commands run at ritual start or completion
recipe_time int (ticks) ❌ 100 How long the ritual takes once triggered (20 ticks = 1 second)
requirements.block_below string ❌ null Block resource ID required directly under the altar
requirements.in_structure string ❌ null Structure resource ID the altar must be inside
day_time enum ❌ "ANY" "ANY", "DAY", or "NIGHT"
weather enum ❌ "ANY" "ANY", "CLEAR", "RAIN", or "THUNDER"

3. catalyst

A standard Minecraft Ingredient — the item that, when right-clicked onto the altar, attempts to trigger the ritual. Exactly 1 is consumed per trigger, no matter how large the held stack is.

"catalyst": { "item": "minecraft:diamond" }

Tags work too:

"catalyst": { "tag": "forge:gems/diamond" }

An item can be the catalyst for one recipe and a plain input ingredient for a completely different recipe — the altar only treats a held item as "the catalyst" if doing so would actually complete a ritual right now (every input present, every requirement met). Otherwise, right-clicking with it inserts it as a normal ingredient instead.


4. item_inputs

Items that must already be in the altar before the catalyst can trigger anything. Each entry is an IngredientStack — an Ingredient plus an optional count (defaults to 1).

"item_inputs": [
  { "item": "minecraft:bone", "count": 3 },
  { "tag": "forge:ingots/iron", "count": 2 }
]