Recipes
The following recipes are supported by KubeJS TFC:
- Alloy
- Anvil Welding
- Anvil Working
- Barrel Instant Fluid
- Barrel Instant
- Barrel Sealed
- Blast Furnace
- Bloomery
- Casting
- Chisel
- Collapse/Landslide
- Glassworking
- Heating
- Knapping
- Loom
- Jam Pot
- Simple Pot
- Soup Pot
- Quern
- Scraping
- Sewing
- Advanced Shaped Crafting
- Advanced Shapeless Crafting
- Damage Inputs Crafting
- Extra Products Crafting
- No Remainder Crafting
If FirmaLife is installed, the following recipes are supported:
If ArborFirmaCraft is installed, the following recipes are supported:
Alloy
See the main page!
Method Signature
event.recipes.tfc.alloy(result: string, contents: AlloyPart[])
- 1st argument: A string representing the name of a metal
- 2nd argument: An array of AlloyParts defining the components and their percentage ranges for the recipe
Example
ServerEvents.recipes(event => {
event.recipes.tfc.alloy('tfc:metal', [
TFC.alloyPart('tfc:copper', 0.2, 0.3),
TFC.alloyPart('tfc:rose_gold', 0.4, 0.8),
TFC.alloyPart('tfc:black_steel', 0.2, 0.5)
])
})
Welding
See the main page!
Method signature
event.recipes.tfc.welding(result: ItemStackProviderJS, firstInput: Ingredient, secondInput: Ingredient, tier?: number)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: An item ingredient
- 3rd argument: An item ingredient
- Optional 4th argument: A number, the minimum tier of anvil the recipe may be completed on, defaults to
-1
Example
ServerEvents.recipes(event => {
event.recipes.tfc.welding('minecraft:brick', 'tfc:rock/cobble/dacite', 'minecraft:clay')
})
Working
See the main page!
Method Signature
event.recipes.tfc.anvil(result: ItemStackProviderJS, input: Ingredient, rules: ForgeRule[])
// Additional methods
.tier(tier: number)
.bonus(applyBonus: boolean)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: An item ingredient
- 3rd argument: An array of up to 3
ForgeRule
s, see the main page for a full list
- Tier: Accepts a number and sets the minimum anvil tier the recipe can be performed on, defaults to
-1
- Bonus: Accepts a boolean and sets if the recipe will apply a forging bonus, defaults to
false
Example
ServerEvents.recipes(event => {
event.recipes.tfc.anvil('kubejs:my_cool_shears', 'kubejs:unworked_shears', ['hit_not_last', 'upset_any']).bonus(true)
})
Barrel Instant Fluid
See the main page!
Method Signature
event.recipes.tfc.barrel_instant_fluid(outputFluid: FluidStack, primaryFluid: FluidStackIngredient, addedFluid: FluidStackIngredient, sound?: string)
- 1st argument: A
FluidStack
, the result of the recipe - 2nd argument: A FluidStackIngredient, the input fluid in the barrel
- 3rd argument: A FluidStackIngredient, the input fluid added via a fluid container
- Optional 4th argument: A string, the registry name of a sound event, defaults to
minecraft:block.brewing_stand.brew
1
Barrels will not accept fluids that are not tagged tfc:usable_in_barrel
, make sure that both the output fluid and the input fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.tfc.barrel_instant_fluid(Fluid.of('minecraft:water', 50), TFC.fluidStackIngredient('#forge:milk', 30), TFC.fluidStackIngredient('minecraft:lava', 20))
})
Barrel Instant
See the main page!
Method Signature
event.recipes.tfc.barrel_instant()
// Additional methods
.outputItem(outputItem: ItemStackProviderJS)
.outputFluid(outputFluid: FluidStack)
.outputs(outputItem: ItemStackProvider, outputFluid: FluidStack)
.inputItem(inputItem: Ingredient)
.inputFluid(inputFluid: FluidStackIngredient)
.inputs(inputItem: Ingredient, inputFluid: FluidStackIngredient)
.sound(sound: string)
- OutputItem: Accepts an ItemStackProviderJS and sets the recipe’s output item, defaults to empty
- OutputFluid: Accepts a
FluidStack
and sets the recipe’s output fluid, defaults to empty - Outputs: A convenience method for setting both outputs, identical to
.outputItem().outputFluid()
- InputItem: Accepts an item ingredient and sets the recipe’s input item, will accept counts greater than 1, defaults to empty
- InputFluid: Accepts a FluidStackIngredient and sets the recipe’s input fluid, defaults to empty
- Inputs: A convenience method for setting both inputs, identical to
.inputItem().inputFluid()
- Sound: Accepts a string, representing the registry name of a sound event which is played when a recipe finishes, defaults to
minecraft:block.brewing_stand.brew
1
An instant barrel recipe must have an input item, input fluid, or both
Barrels will not accept fluids that are not tagged
tfc:usable_in_barrel
, make sure that the input/output fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.tfc.barrel_instant()
.outputs(TFC.itemStackProvider.of('minecraft:cooked_porkchop').copyFood(), TFC.fluidStackIngredient('kubejs:grease', 50))
.inputItem('4x minecraft:cooked_beef')
})
Barrel Sealed
See the main page!
Method Signature
event.recipes.tfc.barrel_sealed(duration: number)
// Additional methods
.outputItem(outputItem: ItemStackProviderJS)
.outputFluid(outputFluid: FluidStack)
.outputs(outputItem: ItemStackProviderJS, outputFluid: FluidStack)
.inputItem(inputItem: Ingredient)
.inputFluid(inputFluid: FluidStackIngredient)
.inputs(inputItem: Ingredient, inputFluid: FluidStackIngredient)
.sound(sound: string)
.onSeal(onSeal: ItemStackProviderJS)
.onUnseal(onUnseal: ItemStackProviderJS)
.seal(onSeal: ItemStackProviderJS, onUnseal: ItemStackProviderJS)
-
1st argument: A number, sets the duration in ticks the barrel must be sealed for, a duration of
-1
will make the recipe infinite, one or both of the seal types should be defined - OutputItem: Accepts an ItemStackProviderJS and sets the recipe’s output item, defaults to empty
- OutputFluid: Accepts a
FluidStack
and sets the recipe’s output fluid, defaults to empty - Outputs: A convenience method for setting both outputs, identical to
.outputItem().outputFluid()
- InputItem: Accepts an item ingredient and sets the recipe’s input item, will accept counts greater than 1, defaults to empty
- InputFluid: Accepts a FluidStackIngredient amd sets the recipe’s input fluid, defaults to empty
- Inputs: A convenience method for setting both inputs, identical to
.inputItem().inputFluid()
- Sound: Accepts a string, representing the registry name of a sound event which is played when a recipe finishes, defaults to
minecraft:block.brewing_stand.brew
1 - OnSeal: Accepts an ItemStackProviderJS which will be applied when the barrel is sealed
- OnUnseal: Accepts an ItemStackProviderJS which will be applied when the barrel is unsealed
- Seal: A convenience method for setting both seals, identical to
.onSeal().onUnseal()
A sealed barrel recipe must have an input item, input fluid, or both
Barrels will not accept fluids that are not tagged
tfc:usable_in_barrel
, make sure that the input/output fluid(s) are tagged as such
Example
SeverEvents.recipes(event => {
event.recipes.tfc.barrel_sealed(5000)
.outputItem('8x minecraft:mud')
.inputs('8x #tfc:dirt', TFC.fluidStackIngredient('#minecraft:water', 1000))
})
Blast Furnace
See the main page!
Method Signature
event.recipes.tfc.blast_furnace(result: FluidStack, catalyst: Ingredient, fluid: FluidStackIngredient)
- 1st argument: A
FluidStack
, the output fluid of the recipe - 2nd argument: An item ingredient specifying the catalyst item
- 3rd argument: A FluidStackIngredient
Example
ServerEvents.recipes(event => {
event.recipes.tfc.blast_furnace(Fluid.of('tfc:metal/zinc', 5), 'kubejs:magic_catalyst', TFC.fluidStackIngredient(['tfc:metal/copper', 'tfc:metal/nickel'], 90))
})
Bloomery
See the main page!
Method Signature
event.recipes.tfc.bloomery(result: ItemStackProviderJS, catalyst: Ingredient, fluid: FluidStackIngredient, duration: number)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: An item ingredient, the ingredient which catalysts match, will accept amounts greater than 1
- 3rd argument: A FluidStackIngredient
- 4th argument: A number, the number of ticks until the recipe is complete
Example
ServerEvents.recipes(event => {
event.recipes.tfc.bloomery('3x minecraft:dirt', '#kubejs:dirt_makers', Fluid.of('kubejs:dirt_fluid', 50), 5000)
})
Casting
See the main page!
Method Signature
event.recipes.tfc.casting(result: ItemStackProviderJS, mold: Ingredient, fluid: FluidStackIngredient, breakChance: number)
- 1st argument: An ItemStackProviderJS, the output of the recipe
- 2nd argument: An item ingredient, used to match the mold item
- 3rd argument: A FluidStackIngredient
- 4th argument: A number in the range [0, 1], the probability that the mold will break upon completion of the recipe, a higher number means a higher chance
All input fluids for the recipe must have the appropriate fluid tag in order for the mold item to accept them, typically this is either
tfc:usable_in_ingot_mold
ortfc:usable_in_tool_head_mold
Example
ServerEvents.recipes(event => {
event.recipes.tfc.casting('8x ae2:skystone', 'kubejs:block_mold', TFC.fluidStackIngredient('minecraft:lava', 4000), 1)
})
Chisel
See the main page!
Method Signature
event.recipes.tfc.chisel(result: BlockState, ingredient: BlockIngredient, mode: ChiselMode)
// Additional methods
.itemIngredient(itemIngredient: Ingredient)
.extraDrop(extraDrop: ItemStackProviderJS)
- 1st argument: A
BlockState
, the result of the recipe - 2nd argument: A BlockIngredient, the block to be chiseled for the recipe
- 3rd argument: A
ChiselMode
, the chisel mode for the recipe, eithersmooth
,stair
, orslab
- ItemIngredient: An ingredient specifying the chisel, must be in the
tfc:chisels
tag, defaults to#tfc:chisels
- ExtraDrop: An ItemStackProviderJS specifying an extra item to be dropped after chiseling, defaults to empty
Example
ServerEvents.recipes(event => {
event.recipes.tfc.chisel('minecraft:grass_block[snowy=true]', '#minecraft:flowers', 'smooth')
.extraDrop('4x minecraft:blue_dye')
})
Collapse/Landslide
See the collapse and landslide main pages! Note: The syntax is exactly the same for both of these recipes, thus they shown together
Method Signature
event.recipes.tfc.collapse(result?: BlockState, ingredient: BlockIngredient)
event.recipes.tfc.landslide(result?: BlockState, ingredient: BlockIngredient)
- Optional 1st argument: A
BlockState
, the result of the recipe, if not provided, thecopy_input
property of the recipe will be implicitly set totrue
- 2nd argument: A BlockIngredient, the ingredient of the recipe
Example
ServerEvents.recipes(event => {
event.recipes.tfc.collapse('minecraft:grass[snowy=true]', TFC.blockIngredient(['minecraft:dirt', '#forge:unstable_dirts']))
event.recipes.tfc.landslide(TFC.blockIngredient('#kubejs:landslides_to_self'))
})
Glassworking
See the main page!
Method Signature
event.recipes.tfc.glassworking(result: ItemStack, batch: Ingredient, operations: GlassOperation[])
- 1st argument: An item stack, the result of the recipe
- 2nd argument: An item ingredient, the required item that must be attached to the blowpipe, needs the
tfc:glass_batches
tag in order to be attached to the blowpipe - 3rd argument: An array of
GlassOperation
s, see the main page for a list of all possible operations
Example
ServerEvents.recipes(event => {
event.recipes.tfc.glassworking('3x minecraft:red_stained_glass_pane', 'minecraft:red_stained_glass', ['blow', 'stretch', 'stretch'])
})
Heating
See the main page!
Method Signature
event.recipes.tfc.heating(ingredient: Ingredient, temperature: number)
// Additional methods
.resultItem(resultItem: ItemStackProviderJS)
.resultFluid(resultFluid: FluidStack)
.results(resultItem: ItemStackProviderJS, resultFluid: FluidStack)
.useDurability(useDurability: boolean)
.chance(chance: number)
- 1st argument: An item ingredient, the input of the recipe
- 2nd argument: A number, the temperature °C at which the inputs will convert to the outputs (if any)
- ResultItem: Accepts an ItemStackProviderJS and sets the result item of the recipe, defaults to empty
- ResultFluid: Accepts a
FluidStack
and sets the result fluid of the recipe, defaults to empty - Results: A convenience method for setting both results, identical to
.resultItem().resultFluid()
- useDurability: Accepts a boolean, determines if the recipe should consider the durability of the item when melting into a fluid
- Chance: Accepts a number, in the range [0, 1], sets the chance of the item output
The ingredient needs to have an item heat added to it
The recipe may define an item result, a fluid result, both, or neither
If the recipe has a fluid result, the fluid must have a matching metal definition to work with crucibles
Example
ServerEvents.recipes(event => {
event.recipes.tfc.heating('minecraft:cobblestone', 1500)
.results('minecraft:stone', Fluid.of('minecraft:lava', 1))
})
Knapping
See the main page!
Method Signature
event.recipes.tfc.knapping(result: ItemStack, knappingType: string, pattern: string[])
//Additional methods
.ingredient(ingredient: Ingredient)
.outsideSlotRequired(required: boolean)
- 1st argument: An item stack, the result of the recipe
- 2nd argument: A string, the id of the knapping type of the recipe
- 3rd argument: An array of strings representing the knapping grid, may be up to 5 x 5. Spaces are empty spots while any other character are a filled spot
- Ingredient: Accepts an item ingredient, used to restrict the recipe input even further from the knapping type’s ingredient, defaults to empty
- OutsideSlotRequired: For recipes with grids less than 5 x 5, defines if the slots outside the grid are required to be filled or not, defaults to
true
Example
ServerEvents.recipes(event => {
event.recipes.tfc.knapping('minecraft:clay', 'tfc:clay', ['XXX', 'X X', 'XXX'])
.outsideSlotRequired(false)
})
Loom
See the main page!
Method Signature
event.recipes.tfc.loom(result: ItemStackProviderJS, ingredient: Ingredient, requiredSteps: number, inProgressTexture: string)
- 1st argument: An ItemStackProviderJS, the result produced by this recipe
- 2nd argument: An item ingredient, will accepts counts greater than 1
- 3rd argument: A number, the number of times the loom must be interacted with to complete the recipe
- 4th argument: A string, the texture the loom uses to render the recipe while in progress
Example
ServerEvent.recipes(event => {
event.recipes.tfc.loom('4x minecraft:red_wool', '4x minecraft:blue_wool', 4, 'minecraft:block/purple_wool')
})
Jam Pot
See the main page!
Method Signature
event.recipes.tfc.pot_jam(result: ItemStack, ingredients: Ingredient[], fluidIngredient: FluidStackIngredient, duration: number, temperature: number, texture: string)
- 1st argument: The item given to the the player when the pot is clicked with an empty jar
- 2nd argument: An array of item ingredients that the recipe consumes
- 3rd argument: A FluidStackIngredient, the fluid needed in the pot
- 4th argument: A number, the number of ticks the pot must boil for
- 5th argument: A number, the temperature °C that the pot must be above to start boiling
- 6th argument: A string, the texture location that is rendered in the pot when it is complete and still has output
Pots will not accept any fluids not tagged tfc:usable_in_pot
, make sure the input fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.tfc.pot_jam('3x tfc:jar/banana', ['minecraft:stick', TFC.ingredient.notRotten('minecraft:cooked_porkchop')], Fluid.of('kubejs:sweet_water', 500), 50, 400, 'tfc:block/jar/banana')
})
Simple Pot
See the main page!
Method Signature
event.recipes.tfc.pot(ingredients: Ingredient[], fluidIngredient: FluidStackIngredient, duration: number, temperature: number)
// Additional methods
.itemOutput(itemOutput: ItemStackProviderJS[])
.fluidOutput(fluidOutput: FluidStack)
.outputs(itemOutput: ItemStackProviderJS[], fluidOutput: FluidStack)
- 1st argument: An array of item ingredients that the recipe consumes
- 2nd argument: A FluidStackIngredient
- 3rd argument: A number, the number of ticks the pot must boil for
- 4th argument: A number, the temperature °C that the pot must be above to start boiling
- ItemOutput: An array of ItemStackProviderJSs indicating what items should be left in the pot
- FluidOutput: A
FluidStack
that the pot produces at the completion of the recipe - Outputs: A convenience method for setting both outputs, identical to
.itemOutput().fluidOutput()
Pots will not accept any fluids not tagged tfc:usable_in_pot
, make sure the input/output fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.tfc.pot(['minecraft:grass', 'minecraft:stone'], Fluid.of('minecraft:lava', 750), 100, 750)
.outputs(['minecraft:dirt', 'minecraft:red_stained_glass'], Fluid.of('minecraft:water', 50))
})
Soup Pot
See the main page!
Method Signature
event.recipes.tfc.pot_soup(ingredients: Ingredient[], fluidIngredient: FluidStackIngredient, duration: number, temperature: number)
- 1st argument: An array of item ingredients that the recipe consumes
- 2nd argument: A FluidStackIngredient that the recipe requires
- 3rd argument: A number, the number of ticks that the pot must boil for
- 4th argument: A number, the temperature °C that the pot must be above to start boiling
Pots will not accept any fluids not tagged tfc:usable_in_pot
, make sure the input fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.tfc.pot_soup(['minecraft:red_stained_glass', '#minecraft:flowers'], TFC.fluidStackIngredient('#kubejs:soupy', 750), 845, 300)
})
Quern
See the main page!
Method Signature
event.recipes.tfc.quern(result: ItemStackProviderJS, ingredient: Ingredient)
- 1st argument: An ItemStackProviderJS, the output of the recipe
- 2nd argument: An item ingredient, the input for the recipe
Example
ServerEvents.recipes(event => {
event.recipes.tfc.quern('minecraft:gravel', 'minecraft:cobblestone')
})
Scraping
See the main page!
Method Signature
event.recipes.tfc.scraping(result: ItemStackProviderJS, ingredient: Ingredient, outputTexture: string, inputTexture: string, extraDrop?: ItemStackProviderJS)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: an item ingredient, the input of the recipe
- 3rd argument: A string, the texture of the scraped item
- 4th argument: A string, the texture of the unscraped item
- Optional 5th argument: An ItemStackProviderJS, an optional extra drop, only applicable to TFC 3.1.3-beta and above
Example
ServerEvents.recipes(event => {
event.recipes.tfc.scraping('4x minecraft:paper', '#minecraft:flowers', 'minecraft:block/dirt', 'minecraft:block/red_stained_glass')
})
Sewing
See the main page! (may not yet exist)
Method Signature
event.recipes.tfc.sewing(result: ItemStack, stitches: number[45], squares: number[32])
- 1st argument: An
ItemStack
, the result of the recipe - 2nd argument: An array of 45 numbers, a value of
0
indicates the position does not have a stitch, a value of1
indicates the position does have a stitch - 3rd argument: An array of 32 numbers, a value of
-1
indicates the position does not have a cloth, a value of0
indicates the position has a dark cloth, a value of1
indicates the position has a light cloth
Example
ServerEvents.recipes(event => {
event.recipes.tfc.sewing('6x minecraft:dirt', [
0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 1, 0, 0, 0, 1,
0, 1, 1, 1, 0, 1, 1, 1, 0,
1, 0, 0, 0, 1, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0
], [
-1, -1, 0, -1, -1, 0, -1, -1,
0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0,
-1, -1, 0, -1, -1, 0, -1, -1
])
})
Advanced Shaped Crafting
See the main page!
Method Signature
event.recipes.tfc.advanced_shaped_crafting(result: ItemStackProviderJS, pattern: string[], key: Map<Character, Ingredient>, row: number, column: number)
- 1st argument: An ItemStackProviderJS, the output of the recipe
- 2nd argument: The pattern for the crafting grid, spaces can be used to indicate an empty slot
- 3rd argument: A
Character
to ingredient map, associates the pattern to ingredients - 4th argument: A number, the row of the input ingredient the output uses if it is dependent on its inputs
- 5th argument: A number, the column of the input ingredient the output uses if it is dependent on its inputs
Example
ServerEvents.recipes(event => {
event.recipes.tfc.advanced_shaped_crafting(TFC.itemStackProvider.of('tfc:food/red_apple').addTrait('kubejs:fruity'), [
'FLK',
'KLF'
], {
F: '#minecraft:flowers',
L: 'minecraft:dirt',
K: 'tfc:food/red_apple'
}, 0, 0)
})
Advanced Shapeless Crafting
See the main page!
Method Signature
event.recipes.tfc.advanced_shapeless_crafting(result: ItemStackProviderJS, ingredients: Ingredient[], primaryIngredient?: Ingredient)
- 1st argument: An ItemStackProviderJS, the output of the recipe
- 2nd argument: An array of item ingredients, the inputs of the recipe
- Optional 3rd argument: An item ingredient, which identifies the which slot of the recipe is used as the ‘input’ if the output is input-dependent
Examples
ServerEvents.recipes(event => {
event.recipes.tfc.advanced_shapeless_crafting('minecraft:dirt', ['minecraft:stone', 'minecraft:cobblestone'])
event.recipes.tfc.advanced_shapeless_crafting(TFC.itemStackProvider.copyInput().addTrait('kubejs:with_added_stones'), ['tfc:food/red_apple', 'tfc:rock/loose/dacite'], 'tfc:food/red_apple')
})
Damage Inputs Crafting
See the main page!
Method Signatures
event.recipes.tfc.damage_inputs_shaped_crafting(recipe: ShapedCraftingRecipe)
event.recipes.tfc.damage_inputs_shapeless_crafting(recipe: ShapelessCraftingRecipe)
- 1st argument: A crafting recipe, must be the same shaped/shapeless type as the type of the damage inputs recipe
Examples
ServerEvents.recipes(event => {
event.recipes.tfc.damage_inputs_shaped_crafting(event.recipes.minecraft.crafting_shaped('minecraft:dirt', [
'MMN'
], {
M: 'minecraft:stone',
N: '#tfc:knives'
}))
event.recipes.tfc.damage_inputs_shapeless_crafting(event.recipes.minecraft.crafting_shapeless('minecraft:stone', ['#minecraft:flowers', '#minecraft:axes']))
})
Extra products Crafting
See the main page!
Method Signatures
event.recipes.tfc.extra_products_shaped_crafting(extraProducts: ItemStack[], recipe: ShapedCraftingRecipe)
event.recipes.tfc.extra_products_shapeless_crafting(extraProducts: ItemStack[], recipe: ShapelessCraftingRecipe)
- 1st argument: An array of
ItemStack
s, the extra products of the recipe - 2nd argument: A crafting recipe, must be the same shaped/shapeless type as the type of the extra products recipe
Example
ServerEvents.recipes(event => {
event.recipes.tfc.extra_products_shaped_crafting('3x minecraft:red_stained_glass', event.recipes.minecraft.crafting_shaped('minecraft:dirt', [
'GHJ'
], {
G: '#minecraft:flowers',
H: 'minecraft:stone',
J: 'tfc:rock/raw/diorite'
}))
event.recipes.tfc.extra_products_shapeless_crafting('4x minecraft:green_stained_glass_pane', event.recipes.minecraft.crafting_shapeless('minecraft:red_stained_glass', ['minecraft:dirt', '#minecraft:flowers']))
})
No Remainder Crafting
This is a crafting recipe type that prevents any remainders from being left after crafting
Method Signatures
event.recipes.tfc.no_remainder_shaped_crafting(recipe: ShapedCraftingRecipe)
event.recipes.tfc.no_remainder_shapeless_crafting(recipe: ShapelessCraftingRecipe)
- 1st argument: A crafting recipe, must be the same shaped/shapeless type as the type of the no remainder recipe
Example
ServerEvents.recipes(event => {
event.recipes.tfc.no_remainder_shaped_crafting(event.recipes.minecraft.crafting_shaped('minecraft:ice', [
'SAS'
], {
S: 'kubejs:super_cooler',
A: 'minecraft:water_bucket'
}))
event.recipes.tfc.no_remainder_shapeless_crafting(event.recipes.minecraft.crafting_shapeless('minecraft:obsidian', ['minecraft:water_bucket', 'minecraft:lava_bucket']))
})
FirmaLife Drying
See the main page!
Method Signature
event.recipes.firmalife.drying(result: ItemStackProviderJS, ingredient: Ingredient)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: An item ingredient
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.drying('kubejs:jerky', TFC.ingredient.notRotten('#tfc:meat'))
})
FirmaLife Smoking
See the main page!
Method Signature
event.recipes.firmalife.smoking(result: ItemStackIngredientJS, ingredient: Ingredient)
- 1st argument: An ItemStackProviderJS, the result of the recipe
- 2nd argument: An item ingredient
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.smoking(TFC.itemStackProvider.copyInput().addTrait('kubejs:smoked'), TFC.ingredient.notRotten('#tfc:meats'))
})
FirmaLife Mixing Bowl
See the main page!
Method Signature
event.recipes.firmalife.mixing_bowl()
// Additional Methods
.outputItem(outputItem: ItemStack)
.outputFluid(outputFluid: FluidStackJS)
.outputs(outputItem: ItemStack, outputFluid: FluidStackJS)
.itemIngredients(ingredients: Ingredient[])
.fluidIngredient(fluidIngredient: FluidStackIngredient)
.ingredients(ingredients: Ingredient[], fluidIngredient: FLuidStackIngredient)
- OutputItem: An
ItemStack
, the item output - OutputFluid: A
FluidStackJS
, the fluid output - Outputs: A convenience method for setting both outputs, the same as calling
.outputItem().outputFluid()
- ItemIngredients: An array of item ingredients, the item inputs
- FluidIngredient: A FluidStackIngredient
- Ingredients: A convenience method for setting both inputs, the same as calling
.itemIngredients().fluidIngredient()
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.mixing_bowl()
.outputs('minecraft:dirt', Fluid.of('minecraft:milk', 50))
.itemIngredients(['minecraft:stone', 'minecraft:deepslate'])
})
FirmaLife Oven
See the main page!
Method Signature
event.recipes.firmalife.oven(ingredient: Ingredient, temperature: number, duration: number, resultItem?: ItemStackProviderJS)
- 1st argument: An item ingredient, the input of the recipe
- 2nd argument: A number, the minimum temperature °C of the top oven for the recipe to operate
- 3rd argument: A number, the number of ticks required for the recipe to finish
- Optional 4th argument: An ItemStackProviderJS, the output of the recipe, defaults to
TFC.itemStackProvider.empty()
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.oven('minecraft:spruce_log', 500, 100, 'minecraft:oak_log')
})
FirmaLife Stinky Soup
See the main page!
Method Signature
event.recipes.firmalife.stinky_soup(ingredients: Ingredient[], fluidIngredient: FluidStackIngredient, duration: number, temperature: number)
- 1st argument: An array of item ingredients, the item inputs of the recipe
- 2nd argument: A FluidStackIngredient, the fluid input of the recipe
- 3rd argument: A number, the number of ticks required for the recipe to finish
- 4th argument: A number, the minimum temperature °C required for the recipe to operate
Pots will not accept any fluids not tagged tfc:usable_in_pot
, make sure the input fluid(s) are tagged as such
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.stinky_soup(['minecraft:dirt', TFC.ingredient.not(TFC.ingredient.notRotten())], TFC.fluidStackIngredient('#minecraft:water', 1000), 500, 460)
})
FirmaLife Vat
See the main page!
Method Signature
event.recipes.firmalife.vat()
// Additional methods
.outputItem(outputProvider: ItemStackProviderJS)
.outputFluid(outputFluid: FluidStackJS)
.outputs(itemOutput: ItemStackProviderJS, outputFluid: FluidStackJS)
.inputItem(inputItem: Ingredient)
.inputFluid(inputFluid: FluidStackIngredient)
.inputs(inputItem: Ingredient, inputFluid: FluidStackIngredient)
.length(length: number)
.temperature(temp: number)
.jar(jar: ItemStack)
- OutputItem: An ItemStackProviderJS, the item output
- OutputFluid: A
FluidStackJS
, the fluid output - Outputs: A convenience method for setting both outputs, the same as calling
.outputItem().outputFluid()
- InputItem: An item ingredient, the item input
- InputFluid: A FluidStackIngredient, the fluid input
- Inputs: A convenience method for setting both inputs, the same as calling
.inputItem().inputFluid()
- Length: A number, the number of ticks the vat must process for, defaults to
600
- Temperature: A number, the minimum temperature °C of the vat in order to process, defaults to
300
- Jar: An
ItemStack
to be attached, only used for recipes that producefirmalife:fruity_fluid
in conjunction with the jarring station
FirmaLife Stomping
See the main page!
Method Signature
event.recipes.firmalife.stomping(result: ItemStackProviderJS, ingredient, Ingredient, inputTexture: string, outputTexture: string, sound: string)
- 1st argument: An ItemStackProviderJS, the result
- 2nd argument: An item ingredient, the input
- 3rd argument: A string, the texture to use in the stomping barrel with the input item
- 4th argument: A string, the texture to use in the stomping barrel once the recipe has completed
- 5th argument: A string, the registry name of a sound event1, the sound to play when the barrel is stomped
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.stomping('minecraft:dirt', 'minecraft:stone', 'tfc:block/charcoal_pile', 'tfc:block/powder/charcoal', 'tfc:block.charcoal.fall')
})
FirmaLife Bowl Pot
See the main page!
Method Signature
event.recipes.firmalife.bowl_pot(itemOutput: ItemStack, ingredients: Ingredient[], fluidIngredient: FluidStackIngredient, duration: number, temperature: number, food: (Consumer<FoodData> | {water?: number, hunger?: number, saturation?: number, grain?: number, fruit?: number, vegetables?: number, protein?: number, dairy?: number, decay_modifier?: number}))
- 1st argument: An item stack, the output of the recipe
- 2nd argument: An array of item ingredients, the item inputs of the recipe
- 3rd argument: A FluidStackIngredient, the fluid ingredient of the recipe
- 4th argument: A number, the number of ticks the pot will process for
- 5th argument: A number, the temperature °C that the pot needs to get to for the recipe to begin
- 6th argument: Either a FoodData consumer or a string to number map containing any of
water
,saturation
,grain
,fruit
,vegetables
,protein
,dairy
,hunger
, anddecay_modifier
values
Pots will not accept any fluids not tagged tfc:usable_in_pot
, make sure the input fluid(s) are tagged as such
Examples
ServerEvents.recipes(event => {
event.recipes.firmalife.bowl_pot('minecraft:cooked_beef', [
'minecraft:dirt',
'minecraft:stone'
], 'minecraft:water', 20, 100, food => {
food.hunger(50)
food.protein(10.6)
food.saturation(2)
})
event.recipes.firmalife.bowl_pot('tfc:food/red_apple', [
'minecraft:poppy',
'minecraft:oak_log'
], 'minecraft:lava', 20, 100, {
hunger: 3,
fruit: 12,
decay_modifier: 0.9
})
})
FirmaLife Press
See the main page!
This recipe type is currently unused by FirmaLife and actually adds itself to the stomping recipe type in JEI
Method Signature
event.recipes.firmalife.press(result: ItemStackProviderJS, ingredient, Ingredient, inputTexture: string, outputTexture: string, sound: string)
- 1st argument: An ItemStackProviderJS, the result
- 2nd argument: An item ingredient, the input
- 3rd argument: A string, the texture to use in the stomping barrel with the input item
- 4th argument: A string, the texture to use in the stomping barrel once the recipe has completed
- 5th argument: A string, the registry name of a sound event1, the sound to play when the barrel is stomped
Example
ServerEvents.recipes(event => {
event.recipes.firmalife.press('minecraft:smooth_stone', 'minecraft:cobblestone', 'minecraft:block/cobblestone', 'minecraft:block/smooth_stone', 'tfc:block.charcoal.fall')
})
AFC Tree Tap
AFC’s tree tapping recipe type
Method Signature
event.recipes.afc.tree_tapping(inputBlock: BlockIngredient)
.resultFluid(fluid: FluidStackJS)
.minTemp(f: number)
.maxTemp(f: number)
.temps(min: number, max: number)
.requiresNaturalLog(required: boolean)
.springOnly(springOnly: boolean)
- 1st argument: A block ingredient
- ResultFluid: Sets the fluid result of the recipe
- MinTemp: Sets the minimum temperature °C at which the recipe will be valid, defaults to
-50
- MaxTemp: Sets the maximum temperature °C at which the recipe will be valid, defaults to
50
- temps: Sets the maximum and minimum temperatures °C at which will the recipe will be valid
- RequiresNaturalLog: Determines if the recipe needs the log block to have the
natural=true
property to work, defaults totrue
- SpringOnly: Determines if the recipe only works during the spring time, defaults to
false