Recipe Files
Every .yml/.yaml file under plugins/AstralRecipes/recipes/ (walked recursively) is one recipe. The required type key picks the reader — see Recipe types for the id table and the loading lifecycle. This page covers the YAML shape of each type; how a loaded recipe then behaves at each station is on Crafting behavior.
Common fields
Field | Type | Required | Description |
|---|---|---|---|
| String | Yes | One of the seven recipe types. Case-sensitive. |
| Key | Yes | The recipe's identity, as a namespaced key ( |
| item-stack | Yes | The produced item. Every type uses |
result is a full AstralCore ItemStackWrapper, so material/copy-from, name, lore, amount, enchantments, item-flags, and components are all available — see Menu Items § item-stack.
Ingredients
Every ingredient slot — the values of ingredients on a shaped recipe, the entries of the ingredients list on a shapeless one, and the ingredient key on a cooking or stonecutter recipe — is parsed by the same Ingredient serializer, and accepts three forms:
Field | Type | Default | Description |
|---|---|---|---|
| String or list of String | — | Required in the section form. The accepted item ids; at least one. |
| Integer |
| How many of the item the slot requires. Must be ≥ 1. Only a stack-size gate — see Consumption for what is actually removed at each station. |
| Boolean |
|
|
Item ids
Each id is resolved once at load time through AstralPaperAPI.provideItemStack(namespace, key), splitting on the first ::
Form | Resolves to | Example |
|---|---|---|
bare name | A vanilla material ( |
|
| The same vanilla material, via the |
|
| A CraftEngine item (namespace |
|
| A HeadDatabase head |
|
| Any other registered |
|
An id that resolves to nothing (or to air) fails the whole file with Unknown recipe item: <id>.
Shaped — shaped
Field | Type | Required | Description |
|---|---|---|---|
| List of String | Yes | 1–3 rows, each at most 3 characters, all the same width. A space is an empty cell. |
| Map of Char → ingredient | Yes | Maps a pattern symbol to an ingredient. Each key must be exactly one non-space character. |
| item-stack | Yes | The crafted output. |
The pattern is trimmed of empty leading/trailing rows and columns before matching, and so is the player's grid — position within the crafting window never matters, only the shape. A 2×2 shape therefore works in the inventory grid as well as at a table.
Shapeless — shapeless
Field | Type | Required | Description |
|---|---|---|---|
| List of ingredient | Yes | 1–9 entries, each an ingredient. |
| item-stack | Yes | The crafted output. |
The grid matches when its non-empty slots correspond exactly to the listed ingredients — one distinct slot per ingredient, in any arrangement. To require two of an item, list it twice (or use count: 2 on a single entry to require a stack of two in one slot).
Stonecutter — stonecutter
Field | Type | Required | Description |
|---|---|---|---|
| ingredient | Yes | The item to cut. |
| item-stack | Yes | The item produced. |
Stonecutting is driven entirely by vanilla through the backing StonecuttingRecipe — AstralRecipes has no stonecutter listener. The backing recipe uses a component-exact RecipeChoice.ExactChoice, so count and consume have no effect there and provider-backed custom items generally will not match. See Stonecutter.
Cooking — furnace, blasting, smoking, campfire
All four cooking types share one shape and differ only in which station they belong to.
Field | Type | Required | Description |
|---|---|---|---|
| ingredient | Yes | The item to cook. |
| item-stack | Yes | The item produced. |
| Float | No | XP granted per cook. Default |
| Integer | No | Ticks to finish, before station speed modifiers. Must be ≥ 1. Defaults to the station's vanilla time: 200 furnace, 100 blasting, 100 smoking, 600 campfire. |
The station is started by the backing vanilla cooking recipe, and AstralRecipes then forces its own result when the cook completes — which is what lets a custom item whose base material already has a vanilla smelt produce your output instead. Vanilla consumes exactly one input item regardless of count; see Cooking stations.
Validation
The loader rejects individual files without blocking the rest of recipes/. Every failure below is logged as Failed to load configuration file: <path> with the cause, and only that file is skipped:
Message | Cause |
|---|---|
| No |
| No |
| An ingredient id resolved to nothing — a typo, a |
| Section form with no |
|
|
| A shaped |
| Malformed shaped pattern. |
| Malformed shapeless ingredient list. |
| A missing required node. |
|
|
A recipe that loads fine but whose backing Bukkit recipe cannot be built is a softer failure — it is logged as Skipping backing recipe for <key>: <error> and the recipe still works at the crafting table, just without a recipe-book entry or crafter support.
Reloading
/core reload AstralRecipes (see Reload) re-runs the full unload/read/register sequence, so file changes apply without a restart.