Skip to content

Craft Triggers ​

Craft triggers listen for recipe crafting events and are the most commonly used trigger type.

Three Craft Trigger Types ​

Types ​

  1. crafting - Crafting table event
  2. smithing - Smithing table event
  3. anvil - Anvil event

Dual-Phase Mechanism ​

Craft triggers support a prepare + execute two-phase mechanism:

  • Prepare phase: Evaluates conditions during PrepareItemCraftEvent. If conditions fail, the result slot is cleared and the player cannot craft.
  • Execute phase: Runs actions during CraftItemEvent (e.g., deduct levels, send messages).

This means craft triggers can actually block crafting, not just respond after the fact.

Context ​

Craft triggers add information about the crafting ingredients and the batch crafting quantity to the trigger context.

The batch crafting quantity key is craft_num, which can only be accessed in actions. For normal click crafting, it returns 1.

crafting ​

In crafting type triggers, you can use ingredient_<row-1>_<col-1> to get the ingredient ID at the corresponding position, and ingredient_<row-1>_<col-1>_amount to get the quantity.

The row and column numbers are not affected by placement position. For example, in a 2x2 recipe, regardless of where you place it, ingredient_0_0 always gets the item in the first row, first column.

Example:

yaml
craft_example:
  type: crafting
  recipes:
    - 'craftorithm:shaped_01'
  conditions:
    - 'ingredient_0_0_amount >= 2'
    - 'ingredient_0_0 != "items:example_item:1"'

In this example, it gets the quantity and item ID of the first row, first column ingredient, and only allows crafting when the quantity is >= 2 and the item is not items:example_item:1.

smithing ​

In smithing type triggers, you can use template, base, addition to get the ingredients in the three slots, and template_amount, base_amount, addition_amount to get the corresponding quantities.

anvil ​

Similar to smithing type triggers, anvil type triggers can use base, addition to get the ingredients in the two slots, and the same way to get quantities.

YAML Examples ​

Basic Usage ​

yaml
on_craft_diamond_sword:
  type: 'crafting'
  recipes:
    - 'minecraft:diamond_sword'
  actions:
    - 'tell("&aYou crafted a diamond sword!")'

With Conditions ​

yaml
vip_recipe:
  type: 'crafting'
  recipes:
    - 'craftorithm:vip_sword'
  conditions:
    - 'perm("craftorithm.vip")'
    - 'level() >= 10'
  actions:
    - 'tell("&aVIP recipe crafted!")'
  priority: 0

Level Cost ​

yaml
costly_recipe:
  type: 'crafting'
  recipes:
    - 'craftorithm:legendary_sword'
  conditions:
    - 'level() >= 30'
  actions:
    - 'take_level(30)'
    - 'tell("&6Cost 30 levels!")'

Match All Recipes ​

When recipes is empty, the trigger matches all recipes of that type:

yaml
on_any_craft:
  type: 'crafting'
  recipes: []
  actions:
    - 'tell("&7You crafted an item")'

Cooldown ​

yaml
cooldown_trigger:
  type: 'crafting'
  recipes:
    - 'craftorithm:my_recipe'
  cooldown: 10           # 10-second cooldown
  per-player: true       # Per-player cooldown
  actions:
    - 'tell("&cPlease wait for cooldown")'
  • per-player: true — each player has an independent cooldown timer
  • per-player: false — global cooldown shared by all players

基于 GPL-3.0 许可证发布