> For the complete documentation index, see [llms.txt](https://codexadrian.gitbook.io/spirit/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codexadrian.gitbook.io/spirit/developer/soul-engulfing-recipe.md).

# Soul Engulfing Recipe

A key component of Spirit is recipes that require you throw an item into soul fire. You can specify a multiblock that can either be consumed or not consumed that is also required for the recipe to complete, although this is not required, and by default will be a "multiblock" of just soul fire and soul sand/soul soil.

## Recipe input

For a soul engulfing recipe, you must specify an `input` object, that contains either an item ingredient or an item ingredient **and** a multiblock pattern. Again, an ingredient is **required** but a multiblock pattern is not.

### Input with no multiblock

An item ingredient is quite dynamic, it can either be a single item, a single tag, a list of items, a list of items and tags, or a list of tags. No matter how many items are listed inside the ingredient, it represents only 1 input, a list of items just represents what items are valid for the recipe.

#### Single item

```
"input": {
    "ingredient": {
        "item": "minecraft:diamond"
    }
}
```

#### Single tag

```
"input": {
    "ingredient": {
        "tag": "forge:lapis"
    }
}
```

#### List of Items and Tags

```
"input": {
    "ingredient": [
        {
            "item": "minecraft:diamond"
        },
        {
            "tag": "forge:lapis"
        }
    ]
}
```

### Input with multiblock

A Soul engulfing recipe can have a multiblock pattern specified with the **required** ingredient field. The multiblock field contains an object with 2 required fields, pattern and keys. The pattern is a list of lists. The outer list, the representation of the **height** of the multiblock, can be of any size, but the inner list **must the same size as the strings contained in the list.** To reiterate, the outermost list can be of any length, but the lists found within the outermost list and the string found within those lists **must** **be of the same size.**

#### Reserved Keys

* `"@"` Location of the soul fire
* `"&"` Location of the soul fire permitting block (Soul sand or Soul soil)
* `" "` Any block. Use this when you have a blank space in your recipe

{% hint style="info" %}
All non reserved keys **must** be specified within the keys object, failiure to include a key will result in a crash when the recipe is attempted to be made.

**Do not include the reserved keys. Don't do it. >:(**
{% endhint %}

#### Format

```
"input": {
    "ingredient": {
        "item": "minecraft:amethyst_crystal"
    },
    "multiblock": {
        "pattern": [
            [
                "   ",
                " @ ",
                "   "
            ],
            [
                " S ",
                "A&A",
                " S "
            ]
        ],
        "keys": {
            "S": {
                "block": "minecraft:obsidian"
            },
            "A": {
                "block": "#minecraft:stone"
            }
        }
    }
}
```

You can&#x20;


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://codexadrian.gitbook.io/spirit/developer/soul-engulfing-recipe.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
