Recipes

Create machine recipes using KubeJS

Custom Machine recipes can be made with KubeJS.

Create a .js file in the kubejs/server_scripts/ folder (ex: custom_machine_recipes.js).

Then inside the .js file you can use the recipes kubejs event to get the custom machine recipe builder, pass it the id of the machine you want to make the recipe for and the duration of the recipe (in ticks).

onEvent('recipes', event => {

  event.recipes.custommachinery.custom_machine("namespace:machine_id", duration)
  
  //Add requirements here

})

Requirements

You can now add various requirements by calling the methods below directly on the custom machine recipe builder.

chevron-rightItemshashtag

Use one of these methods to add an Item Requirement to the recipe.

.requireItem(item)
.requireItem(item, "slot")

.requireItemTag("tag", amount)
.requireItemTag("tag", amount, nbt)
.requireItemTag("tag", amount, "slot")
.requireItemTag("tag", amount, nbt, "slot")

.produceItem(item)
.produceItem(item, "slot")
  • The item param must be created using Item.of() KubeJS method. Example : Item.of("minecraft:diamond", 42)

  • The slot param must be a string corresponding to a slot id defined in a custom machine json Item Component slot property.

  • The tag param must be a string starting with # defining a valid tag id. Example : "#forge:stone"

  • The amount param must be a positive integer.

  • The nbt param must be a map. Example: {nbt1: 1, nbt2: "something"}.

chevron-rightDurabilityhashtag

Use one of these methods to add a Durability Requirement to the recipe.

.damageItem(item, amount)
.damageItem(item, amount, "slot")

.damageItemTag("tag", amount)
.damageItemTag("tag", amount, nbt)
.damageItemTag("tag", amount, "slot")
.damageItemTag("tag", amount, nbt, "slot")

.repairItem(item, amount)
.repairItem(item, amount, "slot")

.repairItemTag("tag", amount)
.repairItemTag("tag", amount, nbt)
.repairItemTag("tag", amount, "slot")
.repairItemTag("tag", amount, nbt, "slot")
  • The item param must be created using Item.of() KubeJS method. Example : Item.of("minecraft:diamond", 42)

  • The slot param must be a string corresponding to a slot id defined in a custom machine json Item Component slot property.

  • The tag param must be a string starting with # defining a valid tag id. Example : "#forge:stone"

  • The amount param must be a positive integer.

  • The nbt param must be a map. Example: {nbt1: 1, nbt2: "something"}.

chevron-rightFluidhashtag

Use one of these methods to add a Fluid Requirement to the recipe.

  • The fluid param must be created using Fluid.of() KubeJS method. Example : Fluid.of("minecraft:water", 1000)

  • The tank param must be a string corresponding to a tank id defined in a custom machine json Fluid Component tank property.

  • The tag param must be a string starting with # defining a valid tag id. Example : "#minecraft:water"

  • The amount param must be a positive integer.

  • The nbt param must be a map. Example: {nbt1: 1, nbt2: "something"}.

chevron-rightEnergyhashtag

Use one of these methods to add an Energy Requirement to the recipe.

  • The amount param must be a positive integer.

chevron-rightTimehashtag

Use one of these methods to add a Time Requirement to the recipe.

  • The time param must be a string or an array of strings. Look at the time requirement wiki page to know what to put here.

chevron-rightPositionhashtag

Use one of these methods to add a Position Requirement to the recipe.

  • The position param must be a string or an array of strings. Look at the Position Requirement wiki page to know what to put here.

chevron-rightBiomehashtag

Use one of these methods to add a Biome Requirement to the recipe.

  • The biome param must be a biome id. Example : minecraft:ocean

chevron-rightDimensionhashtag

Use one of these methods to add a Dimension Requirement to the recipe.

  • The dimension param must be a string defining a valid dimension id. Example : minecraft:overworld

chevron-rightFuelhashtag

Use this method to add a Fuel Requirementarrow-up-right to the recipe.

  • The amount param must be a positive integer that define the amount of fuel burned each tick of the recipe processing. Default to 1 when not specified.

chevron-rightCommandhashtag

Use one of these methods to add a Command Requirementarrow-up-right to the recipe.

  • The command param must be a string starting by / which will be run as a command.

  • The permissionLevel param must be a positive integer. Default : 2

  • The log param must be a boolean, if true the command will be logged in admin chat as a system command. Default : false

chevron-rightEffecthashtag

Use one of these methods to add an Effect Requirementarrow-up-right to the recipe.

  • The effect param must be a string defining a valid effect id. Example : minecraft:regeneration

  • The time and radius params must be a positive integer.

  • The level param must be a positive integer. Default : 1

  • The filter param must be an array of string defining a valid entity id. Example : ["minecraft:cow", "minecraft:pig"...] Default : []

chevron-rightWeatherhashtag

Use one of these methods to add a Weather Requirementarrow-up-right to the recipe.

  • The weather param must be a string defining the required weather. Valid values : clear, rain, snow, thunder

chevron-rightRedstonehashtag

Use one of these methods to add a Redstone Requirementarrow-up-right to the recipe.

  • The power param must be a positive integer between 0 and 15.

  • The comparator param must be a string defining a valid Comparator Mode. Default : >=

chevron-rightLighthashtag

Use one of these methods to add a Light Requirementarrow-up-right to the recipe.

  • The amount param must be a positive integer between 0 and 15.

  • The comparator param must be a string defining a valid Comparator Mode. Default : >=

chevron-rightEntityhashtag

Use one of these methods to add an Entity Requirementarrow-up-right to the recipe.

  • The amount and radius params must be a positive integer.

  • The filter param must be an array of string defining a valid entity id. Example : ["minecraft:cow", "minecraft:pig"...]

  • The whitelist param must be a boolean, if true the filter will be a whitelist, if false it will be a blacklist.

chevron-rightBlockhashtag

Use one of these methods to add a Block Requirementarrow-up-right to the recipe.

  • The block param must be a string defining a valid blockstate. Using the format namespace:block_id[property1=value1,property2=value2...]{tag1: value1, tag2: value2...} (The [] and {} are optional) This is the block that will be placed.

  • The filter param must be an array of string defining a valid blockstate. This is the blocks that can/can't be break by the machine depending of the whitelist property.

  • The whitelist param is a boolean, if true the filter list will be a whitelist, if false a blacklist. Default to false when not specified.

  • The startX, startY, startZ, endX, endY, endZ must be integer values defining the box where the machine will search for blocks. You can use the in-game Box Creator to select a box and put the values here.

  • The amount param must be a positive integer. This is the minimal amount of blocks that must be destroyed/placed. Default to 1 when not specified.

  • The comparator param must be a string defining a valid Comparator Mode. Default : ==

chevron-rightStructurehashtag

Use this method to add a Structure Requirementarrow-up-right to the recipe.

  • The pattern param must be an array of array of strings. See pattern property of structure requirement. Example: [["aaa", "aaa", "aaa"], ["aaa", "ama", "aaa"], ["aaa", "aaa", "aaa"]] Define a 3x3x3 box around the machine m

  • The keys param must be a map of string -> string. See keys property of structure requirement. The keys of the map must be single characters (except m which is reserved for the machine) and the values must be a block ID with the format: namespace:block_id[state1=value,state2=value] (states are optional). Example: {"a": "minecraft:stone", "b": "minecraft:diamond_block"}

Example

A 3x1x3 hollow ring of stone behind the machine.

chevron-rightLoot Tablehashtag

Use one of these methods to add a Loot Table Requirementarrow-up-right to the recipe.

  • The loot_table param must be a string path that point to a loot table. The loot table file must be loaded with a datapack or a loader mod. Example: custommachinery:my_test_loottable point to a file in data/custommachinery/loot_tables/my_test_loottable.json

  • The luck param must be a float. Default is 0.0 and it can be used in the loot table to alter the quantity of generated items.

chevron-rightDrophashtag

Use one of these methods to add a Drop Requirementarrow-up-right to the recipe.

  • The item param must be an item created using Item.of(). Example : Item.of("minecraft:dirt")

  • The amount param must be a positive integer, it represents the amount of items checked/consumed.

  • The radius param must be a positive integer, it represents the maximum distance to the machine the items will be searched.

  • The filter param must be an array of items. Example : [Item.of("minecraft:diamond"), Item.of("minecraft:cobblestone")]. It represents a whitelist of items to search.

  • The whitelist param must be a boolean, if set to false the filter will be a blacklist instead of a whitelist.

chevron-rightFunctionhashtag

Use one of these methods to add a function that must be processed by the machine to continue the recipe.

Note: This has nothing to do with MC functions (or commands), this requirement allow you to make your own code in JavaScript and pass it to be executed by the machine.

  • The passed function MUST return a Result.

  • Valid results are : Result.success() and Result.error("Error message")

  • Context has various methods for interacting with the machine, see it's wiki pagearrow-up-right

  • The function can be delayed, put .delay(delay) directly after any .requireFunctionXXX() call to make the function be executed at the specified delay.

Example :

Requirements special properties

Some requirements (almost all) have various properties that can change its behavior.

To set these properties you must call one or several of the methods below immediately after the desired requirement. The properties will only be applied on the latest added requirement when the method is called.

If the latest added requirement doesn't support the property an error will be logged and nothing will happen (the property will be ignored).

chevron-rightChancehashtag

Use this method to add a chance property to the latest added requirement.

  • The chance param must be a double between 0.0 and 1.0 included.

Supported requirements :

  • Command

  • Drop

  • Durability

  • Energy

  • Energy Per Tick

  • Fluid

  • Fluid Per Tick

  • Item

chevron-rightDelayhashtag

Use this method to set a delay for the requirement action.

The requirement will only execute its action after the specified delay.

  • The delay param must be a double between 0.0 and 1.0 excluded. 0 represent the start of the recipe and 1 represent its end.

Supported requirements :

  • Block

  • Command

  • Drop

  • Function

Priority

Use the method below to set the priority of the recipe.

If this method is called several times only the latest will be used.

If this is called AFTER .jei() (no need to be immediatly after) this will act as the "jeiPriority" instead, defining the priority of the recipe to show in jei instead of the priority to be checked in the machine.

If no priority is set, the default value : 0 will be used.

  • The priority param must be an integer value.

Jei

If the method below is called, all requirements added after that will be added to the jei property requirement list.

This action cannot be inverted, you must add all your recipe requirements before calling it.

Requirements added after this method will only be displayed in jei but executed by the machine. Learn more herearrow-up-right.

Examples :

chevron-rightExample 1hashtag

A 100 tick recipe that use 5mB of water, 5mB of any fluid with tag lava and 20FE per tick to create a stone.

example_recipe_1

chevron-rightExample 2hashtag

A 200 tick recipe that use 1 item with tag stone and 20FE per tick to create 1 cobblestone, 1 gravel with 50% chance and 1 sand with 10% chance.

example_recipe_2

Last updated