LogoKubeJS MNA

Recipes

This page covers the current event.recipes.mna surface plus the lower-level MNARecipesHelper builders used with event.custom().

General Notes

  • Prefer event.recipes.mna.*() for normal KubeJS recipe authoring.
  • Prefer typed ids and id strings over raw objects when possible.
  • tier(...) and faction(...) are available through the shared base where the recipe schema supports them.
  • MnaRitualReagent and MnaPatternHelper are documented in Helpers And Probe.

Schema Names And Custom Components

MnaJS registers both chain-style recipe entry points and lower-level schema/component support for event.custom(...).

Current KubeJS schema keys and backing recipe types:

KubeJS entryBacking type
ritual()mna:ritual
transmutation()mna:transmutation
crushing()mna:crushing
runeforging()mna:runeforging
runescribing()mna:runescribing
component()mna:component
modifier()mna:modifier
shape()mna:shape
progression()mna:progression-condition
manaweavingAltar()mna:manaweaving-recipe
arcaneFurnace()mna:arcane-furnace
eldrinAltar()mna:eldrin-altar
eldrinFume()mna:eldrin-fume
pattern()mna:manaweaving-pattern
cacheEffect()mna:manaweave-cache-effect

Registered low-level recipe components:

  • mnaAdvancementId
  • power_key
  • item
  • itemStack
  • itemOrTagComponent
  • itemsOrTagsComponent
  • mnaItemId
  • mnaBlockId
  • mnaItemOrTag
  • mnaLootTableId
  • mnaFactionId
  • mnaCastingResourceId
  • mnaMobEffectId
  • mnaRitualEffectId
  • mnaSpellEffectId
  • mnaShapeId
  • mnaModifierId
  • mnaRitualId
  • mnaManaweavePatternId
  • mnaCantripId
  • mnaSoundId
  • mnaStructureId

Use this layer when you are writing direct JSON or building through MNARecipesHelper instead of the fluent chain.

event.recipes.mna.ritual()

Use it for ritual recipes with chainable pattern, reagent, output, and color control.

Notable methods:

  • pattern(int[][] | rows)
  • displayPattern(int[][] | rows)
  • reagentRows(...)
  • reagent(MnaRitualReagent)
  • reagent(char, MnaItemOrTag, optional, consume)
  • dynamicReagent(...)
  • dynamicSourceReagent(...)
  • manualReturnReagent(...)
  • manaweavePatterns(...)
  • innerColor(long)
  • outerColor(long)
  • beamColor(long)
  • connectBeam(boolean)
  • displayIndexes(boolean)
  • kittable(boolean)
  • outputItem(MnaItemId)
  • command(String)

Example:

event.recipes.mna
.ritual()
.tier(1)
.patternRows("1")
.displayPatternRows("1")
.reagentRows("A")
.reagent(MnaRitualReagent.of("A", "minecraft:amethyst_shard"))
.innerColor(0xffd54f)
.outerColor(0xfff176)
.beamColor(0xfbc02d)
.connectBeam(true)
.outputItem("minecraft:lightning_rod")
.id("kubejs:lightning_ritual");

Notes:

  • outputItem(...) is the main output field and should always be present.
  • Rituals are the deepest chain surface in this repo and are intended to stay chain-first.

event.recipes.mna.crushing()

Use it for simple crushing conversions.

Notable methods:

  • input(MnaItemId)
  • output(MnaItemId)
  • outputQuantity(int)

Example:

event.recipes.mna
.crushing()
.input("minecraft:amethyst_block")
.output("minecraft:amethyst_shard")
.outputQuantity(4)
.tier(1);

event.recipes.mna.arcaneFurnace()

Use it for arcane furnace smelting-like recipes.

Notable methods:

  • input(...)
  • output(...)
  • burnTime(int)
  • outputQuantity(int)

Example:

event.recipes.mna
.arcaneFurnace()
.input("minecraft:raw_gold")
.output("minecraft:gold_ingot")
.burnTime(200)
.outputQuantity(1)
.tier(1);

event.recipes.mna.runeforging()

Use it for rune forging recipes.

Notable methods:

  • pattern(MnaItemId)
  • material(MnaItemId)
  • output(MnaItemId)
  • hits(int)
  • outputQuantity(int)

Example:

event.recipes.mna
.runeforging()
.pattern("minecraft:stick")
.material("minecraft:gold_ingot")
.output("minecraft:blaze_rod")
.hits(6)
.outputQuantity(1)
.tier(2);

event.recipes.mna.runescribing()

Use it for rune scribing recipes.

Notable methods:

  • output(MnaItemId)
  • hMutex(int)
  • vMutex(int)

Example:

event.recipes.mna
.runescribing()
.output("minecraft:paper")
.hMutex(0b00000000001)
.vMutex(0b00000010000)
.tier(1);

event.recipes.mna.component()

Use it for component crafting recipes.

Notable methods:

  • output(MnaSpellEffectId)
  • input(MnaItemOrTag)
  • addInput(MnaItemOrTag)
  • pattern(MnaManaweavePatternId)
  • addPattern(MnaManaweavePatternId)
  • outputQuantity(int)

Example:

event.recipes.mna
.component()
.output("kubejs:arcane_pulse")
.input("minecraft:lapis_lazuli")
.addInput("#forge:gems/quartz")
.pattern("mna:circle")
.addPattern("mna:square")
.outputQuantity(1)
.tier(1)
.faction("mna:council");

event.recipes.mna.modifier()

Use it for modifier crafting recipes.

Notable methods:

  • output(MnaModifierId)
  • input(...)
  • addInput(...)
  • pattern(...)
  • addPattern(...)
  • outputQuantity(int)

Example:

event.recipes.mna
.modifier()
.output("kubejs:stable_radius")
.input("minecraft:amethyst_shard")
.addInput("minecraft:redstone")
.pattern("mna:circle")
.addPattern("mna:slash")
.outputQuantity(1)
.tier(1);

event.recipes.mna.shape()

Use it for shape crafting recipes.

Notable methods:

  • output(MnaShapeId)
  • input(...)
  • addInput(...)
  • pattern(...)
  • addPattern(...)
  • outputQuantity(int)

Example:

event.recipes.mna
.shape()
.output("kubejs:anchored_burst")
.input("minecraft:echo_shard")
.addInput("#forge:gems/quartz")
.pattern("mna:circle")
.addPattern("mna:square")
.outputQuantity(1)
.tier(2);

event.recipes.mna.manaweavingAltar()

Use it for manaweaving altar output recipes.

Notable methods:

  • output(...)
  • outputStack(ItemStack)
  • inputs(...)
  • addInput(...)
  • patterns(...)
  • addPattern(...)
  • enchant(String)
  • enchantment(String)
  • magnitude(int)
  • copyNBT(boolean)
  • outputQuantity(int)

Example:

event.recipes.mna
.manaweavingAltar()
.outputStack(Item.of("minecraft:enchanted_book"))
.inputs("minecraft:book", "minecraft:lapis_lazuli")
.addInput("#forge:gems/quartz")
.patterns("mna:circle")
.addPattern("mna:square")
.enchantment("minecraft:sharpness")
.magnitude(3)
.copyNBT(false)
.outputQuantity(1)
.tier(2);

event.recipes.mna.progression()

Use it for progression-condition recipes.

Notable methods:

  • advancement(MnaAdvancementId)
  • desc(String)
  • description(String)
  • tier(int)
  • faction(MnaFactionId)

Example:

event.recipes.mna
.progression()
.advancement("minecraft:story/root")
.desc("kubejs.progression.mna_example")
.tier(1)
.faction("mna:none");

event.recipes.mna.transmutation()

Use it for block transmutation definitions.

Notable methods:

  • targetBlock(MnaBlockId)
  • replaceBlock(MnaBlockId)
  • lootTable(MnaLootTableId)
  • representationItem(MnaItemId)

Examples:

event.recipes.mna
.transmutation()
.targetBlock("minecraft:stone")
.replaceBlock("minecraft:gold_block")
.tier(2);
event.recipes.mna
.transmutation()
.targetBlock("minecraft:grass_block")
.lootTable("minecraft:chests/simple_dungeon")
.representationItem("minecraft:chest")
.tier(2);

event.recipes.mna.eldrinFume()

Use it for eldrin fume power recipes.

Notable methods:

  • item(MnaItemOrTag)
  • input(MnaItemOrTag)
  • powerProvided(String | Affinity, Number)
  • affinity(...)
  • powerAmount(Number)

Example:

event.recipes.mna
.eldrinFume()
.item("#forge:sand")
.powerProvided("FIRE", 100)
.tier(1);

event.recipes.mna.eldrinAltar()

Use it for eldrin altar crafting with power requirements.

Notable methods:

  • output(...)
  • outputStack(ItemStack)
  • inputs(...)
  • addInput(...)
  • powerRequirement(Affinity, Number)
  • addPowerRequirement(Affinity, Number)
  • colors(primary, secondary)
  • count(int)

Example:

event.recipes.mna
.eldrinAltar()
.outputStack(Item.of("minecraft:diamond"))
.inputs("minecraft:emerald", "minecraft:lapis_lazuli")
.addInput("#forge:gems/quartz")
.powerRequirement(Affinity.ARCANE, 250)
.addPowerRequirement(Affinity.WIND, 100)
.colors(0x4fc3f7, 0x81d4fa)
.count(1)
.tier(3);

event.recipes.mna.cacheEffect()

Use it for manaweave cache effect recipes.

Notable methods:

  • effect(MnaMobEffectId)
  • durationMin(int)
  • durationMax(int)
  • duration(int, int)
  • magnitude(int)

Example:

event.recipes.mna
.cacheEffect()
.effect("minecraft:speed")
.duration(200, 400)
.magnitude(2)
.tier(2)
.faction("mna:fey");

event.recipes.mna.pattern()

Use it for manaweaving pattern recipes.

Notable methods:

  • pattern(int[][])
  • cell(row, column, value)

Example:

event.recipes.mna
.pattern(MnaPatternHelper.manaweaveGrid())
.cell(5, 5, 1)
.cell(5, 4, 1)
.cell(5, 6, 1)
.cell(4, 5, 1)
.cell(6, 5, 1)
.tier(1);

MNARecipesHelper

Server-side bindings expose lower-level builders for event.custom() workflows through MNARecipesHelper.

Available helpers:

  • ritual
  • progression
  • crushing
  • eldrinAltarBuilder
  • fumeFilterBuilder
  • manaweavingAltarBuilder
  • runeForgingBuilder
  • runeScribingBuilder
  • arcaneFurnaceBuilder
  • transmutationBuilder
  • componentBuilder
  • modifierBuilder
  • shapeBuilder
  • manaweavingPatternBuilder
  • multiblockDefinitionBuilder

Use them when:

  • you want raw JSON for event.custom()
  • you want to build outside the event.recipes.mna chain
  • you need multiblock definitions

Example:

const json = MNARecipesHelper.progression
.advancement("minecraft:story/root")
.desc("kubejs.progression.mna_example")
.tier(1)
.faction("mna:none")
.build();
event.custom(json);

MNARecipesHelper.multiblockDefinitionBuilder

Use it for mna:multiblock definitions.

Notable methods:

  • structure(MnaStructureId)
  • symmetrical(boolean)
  • addTag(block, tag)
  • addRawBlockCheck(block)
  • addBlockMatcher(matcherType, offsetOrBlock)
  • createVariation(id)
  • addStairsMatcher(Block)
  • addStatelessMatcher(Block)
  • addChalkMatcher(Block)
  • addRefractionLensMatcher(Block)
  • addPedestalMatcher(Block)
  • build()

Example:

const builder = MNARecipesHelper.multiblockDefinitionBuilder
.structure("kubejs:verdant_shrine")
.symmetrical(true)
.addRawBlockCheck("minecraft:gold_block")
.addBlockMatcher("mna:stairs", "minecraft:stone_brick_stairs");
builder
.createVariation("lit")
.addReplacement(0, 0, 0, "minecraft:sea_lantern");
event.custom(builder.build());

Notes:

  • This is the current documented path for multiblock JSON generation inside MnaJS.
  • structure(...) uses a structure id, not an ad-hoc filesystem path.