KubeJS Create
This page is still WIP!
Download: CurseForge
Example Recipes
NoThe infoexample yet!scripts are only there to show how to create the recipes. They are not meant to be used with the items shown.
Compacting
Syntax: compacting(output[], input[])
Features:
.heated() and .superheated()
can have a fluid output as long as it has another item output
supports chance-based output
uses the Mechanical Press, Basin, and optionally a Blaze Burner
ServerEvents.recipes(e => {
e.recipes.create.compacting('diamond', 'coal_block')
e.recipes.create.compacting('diamond', 'coal_block').heated()
e.recipes.create.compacting('diamond', 'coal_block').superheated()
e.recipes.create.compacting([Fluid.of('water', 10), 'dead_bush'], ['#minecraft:saplings', '#minecraft:saplings'])
e.recipes.create.compacting(['diamond', Item.of('diamond').withChance(0.3)], 'coal_block')
})
Crushing
Syntax: crushing(output[], input)
Features:
.processingTime()
uses the Crushing Wheels
ServerEvents.recipes(e => {
e.recipes.create.crushing('diamond', 'coal_block')
e.recipes.create.crushing('diamond', 'coal_block').processingTime(500)
e.recipes.create.crushing(['diamond', Item.of('diamond').withChance(0.5)], 'coal_block')
})
Cutting
Syntax: cutting(output[], input)
Features:
.processingTime()
uses the Mechanical Saw
ServerEvents.recipes(e => {
e.recipes.create.cutting('diamond', 'coal_block')
e.recipes.create.cutting('diamond', 'coal_block').processingTime(500)
e.recipes.create.cutting(['diamond', Item.of('diamond').withChance(0.5)], 'coal_block')
})
Deploying
Syntax: deploying(output[], input[])
Features:
.keepHeldItem()
uses the Deployer
ServerEvents.recipes(e => {
e.recipes.create.deploying('diamond', ['coal_block', 'sand'])
e.recipes.create.deploying(['diamond', 'emerald'], ['coal_block', 'sand']).keepHeldItem()
e.recipes.create.deploying(['diamond', Item.of('diamond').withChance(0.5)], ['coal_block', 'sand'])
})
Emptying
Syntax: emptying(output[], input)
Features:
ServerEvents.recipes(e => {
e.recipes.create.emptying([Fluid.of('water', 1000), 'bucket'], 'water_bucket')
})
Filling
Syntax: filling(output, input[])
Features:
ServerEvents.recipes(e => {
e.recipes.create.filling('water_bucket', [Fluid.of('water', 1000), 'bucket'])
})
Haunting
Syntax: haunting(output[], input)
Features:
ServerEvents.recipes(e => {
e.recipes.create.haunting('soul_campfire', 'campfire')
e.recipes.create.haunting(['wheat', 'oak_sapling'], 'potato')
e.recipes.create.haunting(['wheat', Item.of('oak_sapling').withChance(0.2)], 'potato')
})
Mechanical Crafting
Syntax: mechanicalCrafting(output, pattern[], keys{})
Features:
ServerEvents.recipes(e => {
e.recipes.create.mechanicalCrafting('emerald', [
' DDD ',
'D D',
'D D',
'D D',
' DDD '
], {
D: 'dirt'
})
})
Milling
Syntax: milling(output[], input)
Features:
uses the Millstone
ServerEvents.recipes(e => {
e.recipes.create.milling('diamond', 'coal_block')
e.recipes.create.milling(['diamond', 'emerald'], 'coal_block')
e.recipes.create.milling(['diamond', Item.of('diamond').withChance(0.5)], 'coal_block')
})
Mixing
Syntax: mixing(output[], input)
Features:
.heated() and .superheated()
uses the Mechanical Mixer, Basin, and optionally a Blaze Burner
ServerEvents.recipes(e => {
e.recipes.create.mixing('diamond', 'coal_block')
e.recipes.create.mixing('diamond', 'coal_block').heated()
e.recipes.create.mixing('diamond', 'coal_block').superheated()
e.recipes.create.mixing([Fluid.of('water', 10), 'dead_bush'], ['#minecraft:saplings', '#minecraft:saplings'])
e.recipes.create.mixing(['diamond', Item.of('diamond').withChance(0.3)], 'coal_block')
})
Pressing
Syntax: pressing(output[], input)
Features:
ServerEvents.recipes(e => {
e.recipes.create.pressing('diamond', 'coal_block')
e.recipes.create.pressing(['diamond', 'emerald'], 'coal_block')
e.recipes.create.pressing(['diamond', Item.of('diamond').withChance(0.5)], 'coal_block')
})
Sandpaper Polishing
Syntax: sandpaperPolishing(output, input)
Features:
create:sandpaper
ServerEvents.recipes(e => {
e.recipes.create.sandpaperPolishing('diamond', 'coal_block')
e.recipes.create.sandpaperPolishing(Item.of('diamond').withChance(0.5), 'coal_block')
})
Sequenced Assembly
Syntax: sequencedAssembly(output[], input)
WIP Section
Splashing/Washing
Syntax: splashing(output[], input)
Features:
ServerEvents.recipes(e => {
e.recipes.create.splashing('soul_campfire', 'campfire')
e.recipes.create.splashing(['wheat', 'oak_sapling'], 'potato')
e.recipes.create.splashing(['wheat', Item.of('oak_sapling').withChance(0.2)], 'potato')
})
This section is copied from the old wiki. It is still WIP!
Sequenced Assembly
Syntax
event.recipes.create.sequencedAssembly(output[], input, sequence[]).transitionalItem(transitionalItem).loops(loops)
or
event.recipes.createSequencedAssembly(output[], input, sequence[]).transitionalItem(transitionalItem).loops(loops)
Output is an item or an array of items.
If it is an array:
Item.of('create:shaft').withChance(2) to double the chance of that specific item to being chosen.
Input is an ingredient.
Transitional Item is any item* and is used during the intermediate stages of the assembly.
Sequence is an array of recipes.
Loops is the number of time that the recipes repeats. Calling .loops() is optional, and defaults to one.
Examples
onEvent('recipes', event => {
event.recipes.createSequencedAssembly([ // start the recipe
Item.of('create:precision_mechanism').withChance(130.0), // this is the item that will appear in JEI as the result
Item.of('create:golden_sheet').withChance(8.0), // the rest of these items will part of the scrap
Item.of('create:andesite_alloy').withChance(8.0),
Item.of('create:cogwheel').withChance(5.0),
Item.of('create:shaft').withChance(2.0),
Item.of('create:crushed_gold_ore').withChance(2.0),
Item.of('2x gold_nugget').withChance(2.0),
'iron_ingot',
'clock'
],'create:golden_sheet',[ // 'create:golden_sheet' is the input
// the transitional item set by "transitionalItem('create:incomplete_large_cogwheel')" is the item used during the intermediate stages of the assembly
event.recipes.createDeploying('create:incomplete_precision_mechanism',['create:incomplete_precision_mechanism','create:cogwheel']),
// like a normal recipe function, is used as a sequence step in this array. Input and output have the transitional item
event.recipes.createDeploying('create:incomplete_precision_mechanism',['create:incomplete_precision_mechanism','create:large_cogwheel']),
event.recipes.createDeploying('create:incomplete_precision_mechanism',['create:incomplete_precision_mechanism','create:iron_nugget'])
]).transitionalItem('create:incomplete_precision_mechanism').loops(5) // set the transitional item and the loops (amount of repetitions)
// for this code to work, kubejs:incomplete_spore_blossom need to be added to the game
let inter = 'kubejs:incomplete_spore_blossom' // making a varrible to store the transition item makes the code more readable
event.recipes.createSequencedAssembly([
Item.of('spore_blossom').withChance(16.0), // this is the item that will appear in JEI as the result
Item.of('flowering_azalea_leaves').withChance(16.0), // the rest of these items will part of the scrap
Item.of('azalea_leaves').withChance(2.0),
'oak_leaves',
'spruce_leaves',
'birch_leaves',
'jungle_leaves',
'acacia_leaves',
'dark_oak_leaves'
],'flowering_azalea_leaves', [ // 'flowering_azalea_leaves' is the input
// the transitional item is a varrible, that is "kubejs:incomplete_spore_blossom", and is used during the intermediate stages of the assembly
event.recipes.createPressing(inter, inter),
// like a normal recipe function, is used as a sequence step in this array. Input and output have the transitional item
event.recipes.createDeploying(inter, [inter, 'minecraft:hanging_roots']),
event.recipes.createFilling(inter, [inter, Fluid.of('minecraft:water',420)]),
event.recipes.createDeploying(inter, [inter, 'minecraft:moss_carpet']),
event.recipes.createCutting(inter, inter)
]).transitionalItem(inter).loops(2) // set the transitional item and the loops (amount of repetitions)
})
Transitional Items
As mentioned earlier, any item can be a transition item. However, this is not completely recommended.
If you wish to make your own transitional item, it's best if you make the type create:sequenced_assembly.
1.16 syntax
onEvent('item.registry', event => {
event.create('incomplete_spore_blossom').displayName('Incomplete Spore Blossom').type('create:sequenced_assembly')
})
1.18 syntax
onEvent('item.registry', event => {
event.create('incomplete_spore_blossom','create:sequenced_assembly')
})
Mysterious Conversion
Mysterious Conversion recipes are client-side only, so the only way to add them currently is using reflection.
Example
Goes inside client scripts and not in an event.
//makes the varribles used
let MysteriousItemConversionCategory = java('com.simibubi.create.compat.jei.category.MysteriousItemConversionCategory')
let ConversionRecipe = java('com.simibubi.create.compat.jei.ConversionRecipe')
//adds in the recipes
MysteriousItemConversionCategory.RECIPES.add(ConversionRecipe.create('minecraft:apple', 'minecraft:carrot'))
MysteriousItemConversionCategory.RECIPES.add(ConversionRecipe.create('minecraft:golden_apple', 'minecraft:golden_carrot'))
Preventing Recipe Auto-Generation
If you don't want a smelting, blasting, smoking, crafting, or stone-cutting to get an auto-generated counterpart, then include manual_only at the end of the recipe id.
Example
onEvent('recipes', event => {
event.shapeless('wet_sponge',['water_bucket','sponge']).id('kubejs:moisting_the_sponge_manual_only')
})
Other types of prevention, can be done in the create config (the goggles button leads you there).
If it is not in the config, then you can not change it.