> For the complete documentation index, see [llms.txt](https://frinn.gitbook.io/custom-machinery-1.21/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://frinn.gitbook.io/custom-machinery-1.21/mod-integrations/kubejs/upgrades.md).

# Upgrades

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](/custom-machinery-1.21/recipes/upgrades.md).

### Creating custom machine upgrade with KubeJS

```java
//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_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 recipe modifier to this upgrade.
    .requirement(CMRecipeModifierBuilder modifier)
    
    //Add a component modifier to this upgrade.
    .component(CMRecipeModifierBuilder modifier)
    
    //Add a core modifier to this upgrade.
    .core(CMCoreModifierBuilder modifier)
})
```

{% content-ref url="/pages/nlqoqqK0IPvB4GAFB3vg" %}
[Recipe modifier](/custom-machinery-1.21/mod-integrations/kubejs/upgrades/recipe-modifier.md)
{% endcontent-ref %}

{% content-ref url="/pages/tYz9EhL9vWU1jAslTKjk" %}
[Component modifier](/custom-machinery-1.21/mod-integrations/kubejs/upgrades/component-modifier.md)
{% endcontent-ref %}

{% content-ref url="/pages/PUadHMGElSK5xA8dNuSI" %}
[Core modifier](/custom-machinery-1.21/mod-integrations/kubejs/upgrades/core-modifier.md)
{% endcontent-ref %}

### 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.

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