Skip to content

Extra Alternations ๐Ÿ”ง

FireI3laze edited this page May 22, 2026 · 8 revisions

Datapack driven Recipes

I am happy to provide Modpack Developers access to all newly added procedures by this mod, including:

  • Scraping
  • Brushing
  • Drying
  • Compressing
  • Mixing (New!)
  • Cleaning
  • Lye Water

If you don't know what the above mentioned procedures do, feel free to check out the other categories of this wiki

Note: The following guide assumes the installation and a basic understanding of KubeJS.

Required Parameter

All Parameter listed here are mandatory for a valid recipe and cannot be left out

Type

You always have to set it and it is always the same

type: 'extra_steps:processing'

Mode

Defines for which kind of process the recipe is for

mode: 'scraping'
Scraping Brushing Drying Compressing Mixing Cleaning Lye-Water
Mode Names scraping brushing drying compressing mixing cleaning lye-water

Ingredients

The ingredient(s) used for the recipe. If the procedure allows it, a count can be configured. The default count if not set is always 1.

ingredients: [
      {
        item: "minecraft:sugar_cane"
      },
      {
        tag: "#minecraft:logs",
        count: 2
      }
    ]
Scraping Brushing Drying Compressing Mixing
max ingredients 1 1 1 1 8
count available no no no yes yes

Result

The result used for the recipe. If the procedure allows it, a count can be configured. The default count if not set is always 1.

result: {
        item: "minecraft:paper",
        count: 3
      }
Scraping Brushing Drying Compressing Mixing
count considered yes yes yes yes yes

Optional Parameter

All Parameter listed here are optional. If not given, a default value is used

Time

The time the procedure requires. Measured in ticks; 20 ticks = 1 second

time: 300 // default is 200
Scraping Brushing Drying Compressing Mixing
available no no yes no no

Interaction Count

The required interaction count with a valid tool to trigger the process

interaction_count: 2  // default is 3
Scraping Brushing Drying Compressing Mixing
available yes yes no no yes

Water Level Consumption

The consumed water level if processed successfully

water_level_consumption: 2 // default is 1
Scraping Brushing Drying Compressing Mixing
available no no no no yes

Required Tools

The permitted processing tools. Items and Item Tags are supported. Adding tools here will replace the default tools. Default tools for the corresponding procedure can viewed in-game through the JEI interface

tools: [
      {
        item: "minecraft:stick"
      },
      {
        tag: "minecraft:shovels"
      }
    ]
Scraping Brushing Drying Compressing Mixing
available yes yes no no yes

By Products

By Products are additional results that can be additionally configured by setting a count, chance and a trigger method. Note: Not all procedures support all trigger methods

byproducts: [
      {
        item: "minecraft:sugar",
        count: 2,                      // default is 1
        chance: 0.25,                  // default is 1.0
        trigger: "per_interaction"     // default is "on_complete" (supported by every procedure)
      },
      {
        item: "minecraft:stick"       // minimum required example; drops 1 stick with a 100% chance when the procedure is completed
      }
    ]
Trigger Methods Per Interaction On Completion
Description Is triggered after every interaction during the procedure (considers interaction count) Is triggered upon procedure completion (when receiving the result item)
code enum per_interaction on_complete
Scraping Brushing Drying Compressing Mixing
available yes yes yes yes yes
trigger selection yes yes no no yes

Examples

In the following I will provide some example code. These example recipe include all possible configurations. Check the comments to see whether the parameter is required or not

Scraping

  • Put an ingredient in a Drying Rack and interact with it with a required tool in your main hand for a set amount of times to receive the result
// A new Scraping Recipe (You can set Ingredient and Result)
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'scraping',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed)
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        },

        // ๐Ÿ” [Optional] How often it must be interacted with
        interaction_count: 3,           // optional; default is 1

        // ๐Ÿ›  [Optional] tools (override mode defaults)
        tools: [
          {
            item: "minecraft:stick"  // you can set items
          },
          {
            tag: "minecraft:axes"     // and item tags
          }
        ],

        // ๐ŸŽ [Optional] Byproducts
        byproducts: [
          {
            item: "minecraft:emerald",    // adds emeralds as by products
            count: 2,                     // drops 2 items
            chance: 0.667,                // with a 66.7% chance
            trigger: "per_interaction"    // after every interaction
          },
          {
            // minimum example for a by product, drops 1 cobblestone with 100% chance upon procedure completion
            item: "minecraft:cobblestone"
          }
        ]
    });

Brushing

  • The same like Scraping, just different sound effects and default tools
// A new Brushing Recipe
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'brushing',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed)
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        },

        // ๐Ÿ” [Optional] How often it must be interacted with
        interaction_count: 3,           // optional; default is 1

        // ๐Ÿ›  [Optional] tools (override mode defaults)
        tools: [
          {
            item: "minecraft:brush"  // you can set items
          },
          {
            tag: "minecraft:swords"     // and item tags
          }
        ],

        // ๐ŸŽ [Optional] Byproducts
        byproducts: [
          {
            item: "minecraft:emerald",    // adds emeralds as by products
            count: 2,                     // drops 2 items
            chance: 0.667,                // with a 66.7% chance
            trigger: "per_interaction"    // after every interaction
          },
          {
            // minimum example for a by product, drops 1 cobblestone with 100% chance upon procedure completion
            item: "minecraft:cobblestone"
          }
        ]
    });

Drying

  • When placing the ingredient in a Drying Rack, it will start drying over time and become the result
  • While the custom procedures are working, there is no visual transition in the Drying Rack support yet. Stay tuned for updates
// A new Drying Recipe
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'drying',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed)
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        },

        // โฑ [Optional] Processing time
        time: 300, // optional; default is 200,

        // ๐ŸŽ [Optional] Byproducts (no trigger available here!)
        byproducts: [
          {
            item: "minecraft:emerald",    // adds emeralds as by products
            count: 2,                     // drops 2 items
            chance: 0.667                 // with a 66.7% chance
          },
          {
            // minimum example for a by product, drops 1 cobblestone with 100% chance upon procedure completion
            item: "minecraft:cobblestone"
          }
        ]
    });

Compressing

  • (working since v1.1.0)
  • Put the ingredient in the basket and jump on it to receive the result
// A new Compressing Recipe
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'compressing',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed),
            count: 3                    // optional; default is 1
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        },

        // ๐ŸŽ [Optional] Byproducts (no trigger available here!)
        byproducts: [
          {
            item: "minecraft:emerald",    // adds emeralds as by products
            count: 2,                     // drops 2 items
            chance: 0.667,                // with a 66.7% chance
          },
          {
            // minimum example for a by product, drops 1 cobblestone with 100% chance upon procedure completion
            item: "minecraft:cobblestone"
          }
        ]
    });

Mixing

  • Put ingredients in the cauldron and interact with it with a required tool in your main hand for a set amount of times to receive the result
// A new Mixing Recipe
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'mixing',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // allows up to 8 ingredients, requires at least 1 ingredient
          {
            item: "minecraft:dirt",     // this is 1/8 ingredients
          },
          {
            tag: "minecraft:logs",     // this is 2/8 ingredients
            count: 2                   // optional; default is 1
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        },

        // ๐Ÿ” [Optional] How often it must be interacted with
        interaction_count: 2,           // optional; default is 3

        // ๐Ÿ’ง [Optional] water usage
        water_level_consumption: 2,     // optional; default is 1

        // ๐Ÿ›  [Optional] tools (override mode defaults)
        tools: [
          {
            item: "minecraft:stick"     // you can set items
          },
          {
            tag: "minecraft:shovels"    // and item tags
          }
        ],

        // ๐ŸŽ [Optional] Byproducts
        byproducts: [
          {
            item: "minecraft:emerald",    // adds emeralds as by products
            count: 2,                     // drops 2 items
            chance: 0.667,                // with a 66.7% chance
            trigger: "per_interaction"    // after every interaction
          },
          {
            // minimum example for a by product, drops 1 cobblestone with 100% chance upon procedure completion
            item: "minecraft:cobblestone"
          }
        ]
    });

Cleaning

  • Interact with the ingredient on a Lye Water Cauldron to receive the result
// A new Cleaning Recipe
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'cleaning',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed)
          }
        ],

        // ๐Ÿ“ฆ [Required] Output
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
          count: 2                      // optional; default is 1
        }
    });

Lye Water

  • This recipe allows you to add an ingredient that turns the Water in the cauldron to Lye Water
  • Result is in fact irrelevant, but has to be set
  • A game restart is required
// Add Lye Water Ingredient
    event.custom({
        // โš™๏ธ [Required] Default Settings
        type: 'extra_steps:processing',
        mode: 'lye_water',

        // ๐Ÿงฉ [Required] Inputs
        ingredients: [                  // exactly 1 ingredient is required
          {
            item: "minecraft:dirt",     // this is the 1 ingredient (tags are also allowed)
          }
        ],

        // ๐Ÿ“ฆ [Required] Output (doesn't change anything but is required to be considered a valid recipe)
        result: {                       // exactly 1 result is required
          item: "minecraft:diamond",    // this is the 1 result
        }
    });

Deleting Recipes

This is handled like you'd expect in KubeJS. I'll still provide an example since it may not be clear how to remove the default Lye Water Recipe:

// Delete Recipe
    event.remove({output: 'extra_steps:lye_water_bucket'});

example.js