Skip to content

InWorld Recipe ​

The InWorld recipe system is the core system in AnvilCraft for handling in-world recipes, allowing various effects to be triggered under specific conditions.

Basic Structure ​

js
ServerEvents.recipes(event => {
  event.custom({
    type: "anvillib_recipe:in_world_recipe",
    icon: {
      item: "minecraft:anvil"
    },
    trigger: "anvilcraft:on_anvil_fall_on",
    conflicting: [],
    non_conflicting: [],
    outcomes: [],
    priority: 0,
    compatible: true
  })
})

Field Description ​

type ​

Fixed value anvillib_recipe:in_world_recipe, identifies this as an InWorld recipe.

icon ​

Recipe icon, displayed in the recipe interface:

  • item: Item ID, e.g., "minecraft:anvil"

trigger ​

Trigger type, determines when the recipe is activated:

  • Currently supports anvilcraft:on_anvil_fall_on (triggers when anvil falls)

conflicting ​

List of conflicting predicates, these predicates conflict with each other.

non_conflicting ​

List of non-conflicting predicates, these predicates don't conflict.

outcomes ​

List of recipe outcomes, executed when the recipe matches.

priority ​

Recipe priority, higher values mean higher priority.

compatible ​

Compatibility mode, determines predicate matching behavior.

max_efficiency ​

Maximum efficiency value (optional), used to limit the maximum execution efficiency of the recipe.

Utility Methods ​

js
ServerEvents.recipes(event => {
  // InWorld recipe - different constructor parameter combinations
  event.recipes.anvilcraft.in_world("anvilcraft:iron_ingot_to_nugget") // ID only
  
  event.recipes.anvilcraft.in_world(
    { item: "minecraft:iron_nugget" },    // Icon
    "anvilcraft:on_anvil_fall_on",        // Trigger
    [],                                   // Conflicting predicates
    [{                                   // Non-conflicting predicates
      type: "anvillib_recipe:has_item_ingredient",
      offset: [0, -1, 0],
      item: {
        items: "minecraft:iron_ingot"
      }
    }],
    [{                                   // Outcomes
      type: "anvillib_recipe:spawn_item",
      offset: [0, -1, 0],
      item: "minecraft:iron_nugget"
    }],
    0,                                   // Priority
    true                                 // Compatible mode
  )
})

KubeJS Style Builder ​

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .icon("minecraft:iron_nugget")                    // Set icon
    .trigger("anvilcraft:on_anvil_fall_on")           // Set trigger
    .hasItemIngredient("minecraft:iron_ingot")        // Add item predicate
    .below()                                          // Set offset position below
    .spawnItem("minecraft:iron_nugget")               // Add spawn item outcome
    .priority(0)                                      // Set priority
    .compatible(true)                                 // Set compatible mode
})

Offset Setting Methods ​

offset(Vec3 offset) ​

Set offset to specified vector.

offset(double x, double y, double z) ​

Set offset to specified coordinates.

below(double below) ​

Set offset below current position by specified distance.

below() ​

Set offset 1 block below current position.

above(double above) ​

Set offset above current position by specified distance.

above() ​

Set offset 1 block above current position.

Predicate Methods ​

hasItem(...) ​

Check if specified item exists at the specified position:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .hasItem("minecraft:iron_ingot")                 // Check for iron ingot
    .hasItem(0, -1, 0, "minecraft:iron_ingot")       // Check for iron ingot at specified coordinates
})

hasItemIngredient(...) ​

Check if specified item exists at the specified position, consumes the item if recipe matches:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .hasItemIngredient("minecraft:iron_ingot")       // Check and consume iron ingot
})

hasBlock(...) ​

Check if specified block exists at the specified position:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .hasBlock("minecraft:iron_block")                // Check for iron block
})

hasBlockIngredient(...) ​

Check if specified block exists at the specified position, clears the block if recipe matches:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .hasBlockIngredient("minecraft:iron_block")      // Check and clear iron block
})

hasCauldron(...) ​

Check if a cauldron with specified fluid exists at the specified position:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .hasCauldron("minecraft:water")                  // Check for water-filled cauldron
    .hasCauldron("minecraft:water", 1)               // Check and consume 1 unit of water
})

Outcome Methods ​

spawnItem(...) ​

Spawn items at the specified position:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .spawnItem("minecraft:iron_nugget")              // Spawn iron nugget at offset position
    .spawnItem(0, -1, 0, "minecraft:iron_nugget")    // Spawn iron nugget at specified coordinates
    .spawnItem(0, -1, 0, 0.5, "minecraft:iron_nugget") // Spawn iron nugget with 50% probability
})

setBlock(...) ​

Set block at the specified position:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .setBlock("minecraft:diamond_block")             // Set diamond block at offset position
})

damageAnvil() ​

Damage the anvil:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .damageAnvil()                                   // Damage anvil
})

Usage Examples ​

Basic Example ​

When anvil falls on iron ingot, spawn iron nuggets and consume the ingot:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .icon("minecraft:iron_nugget")
    .trigger("anvilcraft:on_anvil_fall_on")
    .hasItemIngredient("minecraft:iron_ingot")
    .below()
    .spawnItem("minecraft:iron_nugget")
    .below()
})

Complex Example ​

Create diamond block using multiblock structure:

js
ServerEvents.recipes(event => {
  event.recipes.anvilcraft.in_world()
    .icon("minecraft:diamond_block")
    .trigger("anvilcraft:on_anvil_fall_on")
    .hasBlock("minecraft:diamond_block")
    .hasBlockIngredient("minecraft:iron_block")
    .above()
    .setBlock("minecraft:diamond_block")
    .damageAnvil()
    .priority(10)
})

Released under the CC-BY-NC-SA 4.0 License.