Upgrades

Create machine upgrades using KubeJS

Custom Machine upgrades can be made with KubeJS script.

Create a .js file in the kubejs\server_scripts folder (ex: custom_machine_upgrades.js) and look at the example below to see all the available methods to create a Custom Machine upgrade with KubeJS.

If you're not familiar about custom machine upgrades see the wiki page.

Creating custom machine upgrade with KubeJS

Find all requirement types and targets that can be modified here.

//Use the 'cm_upgrades' event to register custom machine upgrades.
CustomMachineryEvents.upgrades(event => {

//Create the upgrade builder and give it the item that will act as upgrade.
//Use Item.of("item_id") to create the item.
event.create(Item item)
//If maxAmount is not specified the default is 64.
event.create(Item item, int maxAmount)

//Add a machine or a list of machines that will accept this upgrade, 
//the machine ID must be "namespace:id" like "custommachinery:my_machine",
//if the json is located in (my_datapack)/data/custommachinery/machines/my_machine.json
.machine(String... machineID)

//You can add a custom tooltip to the machine upgrade item.
.tooltip(String... tooltips)
//Use Text.of("text here") for more formatting options,
//See https://kubejs.com/wiki/kubejs/Text/
.tooltip(Text... tooltips)

//Add a modifier to this upgrade.
//See below for modifier syntax.
.modifier(CMRecipeModifierBuilder modifier)
})

Making a modifier

//Create a modifier that add/multiply a value to any input/output requirement of the specified type.
//requirement must be specified using its id: "namespace:requirement"
//Value can be any numerical value.
//Pick one of the 6 methods below :
CMRecipeModifierBuilder.addInput(requirement, value)
CMRecipeModifierBuilder.mulInput(requirement, value)
CMRecipeModifierBuilder.expInput(requirement, value)
CMRecipeModifierBuilder.addOutput(requirement, value)
CMRecipeModifierBuilder.mulOutput(requirement, value)
CMRecipeModifierBuilder.expOutput(requirement, value)

//All methods below are optional

//Specify a target, in case the requirement have several values that can be modified.
//Only 1 target can be defined for a modifier, default is none.
.target(String target)

//Specify a chance for this modifier to be applied.
//Must be a value between 0 and 1, 0 is never applied and 1 is 100% chance to be applied.
//Default is 1.
.chance(double chance)

//Specify the maximum value that can be obtained after applying this modifier.
//It can be any numerical value.
//Default is POSITIVE_INFINITY.
.max(double max)

//Specify the minimum value that can be obtained after applying this modifier.
//It can be any numerical value.
//Default is NEGATIVE_INFINITY.
.min(double max)

//Change the tooltip displayed when holding shift while hovering the upgrade item.
//Default : a short string that describe the effect of this modifier.
.tooltip(String tooltip)
//Use Text.of("text here") for more formating options.
//See https://kubejs.com/wiki/kubejs/Text/
.tooltip(Text tooltip)

Examples

A gold ingot put inside the Power Crusher will double it's energy consumption with a maximum of 1000FE but also half it's duration time with a minimum of 100 ticks.

CustomMachineryEvents.upgrades(event => {
    event.create(Item.of('minecraft:gold_ingot'))
        .machine("custommachinery:power_crusher")
        .modifier(CMRecipeModifierBuilder.mulInput('custommachinery:energy', 2).max(1000))
        .modifier(CMRecipeModifierBuilder.mulInput('custommachinery:speed', 1.5).min(100))
})

Last updated