Skip to content

Triggers

Item triggers let an item run actions when configured events occur, such as interaction, combat, projectile, item operation, block, login, or command-give events. They are useful for scrolls, potions, quest items, right-click skill items, and passive equipment effects.

Configuration format

Triggers live under the actions block of an item definition. Each trigger name maps to an action list:

yaml
id: town_scroll
item:
  source: minecraft-paper
  components:
    custom_name: "<aqua>Town Scroll</aqua>"
actions:
  right_click:
    - 'sendmessage text="<green>Teleporting to town.</green>"'
    - "playsound sound=minecraft:entity.enderman.teleport volume=1 pitch=1"
  consume:
    - "playsound sound=minecraft:entity.player.burp volume=1 pitch=1"

Action syntax is documented in the CoreLib action system.

Trigger reference

Interaction

TriggerWhen it firesContext variables
right_clickPlayer right-clicks air or a block.
right_click_airPlayer right-clicks air.
right_click_blockPlayer right-clicks a block.
left_clickPlayer left-clicks air or a block, and when attacking an entity.target, damage when attacking an entity
left_click_airPlayer left-clicks air.
left_click_entityPlayer attacks an entity.target, damage
shift_left_clickShift + left-click on air or a block.
shift_right_clickShift + right-click on air or a block.

Combat

TriggerWhen it firesContext variables
attackPlayer hits an entity.target, damage
damaged_by_entityPlayer is damaged by an entity.attacker, damage
damagedPlayer takes damage from a non-entity source (fall, fire, and so on).damage
kill_entityPlayer kills a non-player entity.target
kill_playerPlayer kills a player.target
deathPlayer dies.

attack, kill_entity, kill_player, and damaged resolve against the player's main-hand item. Melee attacks, projectiles fired by the player, and lethal damage attributed to the player all count as player attacks.

Projectiles

TriggerWhen it firesContext variables
shoot_bowPlayer shoots a bow.projectile_type
shoot_tridentPlayer throws a trident.projectile_type
arrow_hitArrow hits an entity.projectile_type
arrow_landArrow does not hit an entity.projectile_type
trident_hitTrident hits an entity.projectile_type
trident_landTrident does not hit an entity.projectile_type

Projectile triggers read the player's current main-hand item on impact, so switching items after firing may no longer match the launching item.

Item operations

TriggerWhen it firesContext variables
dropPlayer drops the item.
shift_dropShift + drop.
swap_handPlayer swaps main/off hand.
shift_swap_handShift + swap hands.
consumeItem is consumed (food/potion).consumed_item

drop, swap_hand, place_block, and consume resolve against the item involved in the event rather than the current main-hand item.

Blocks

TriggerWhen it firesContext variables
break_blockPlayer breaks a block.block
place_blockPlayer places a block.block

Other

TriggerWhen it firesContext variables
sneakPlayer starts sneaking (does not fire on release).
teleportPlayer teleports.
loginPlayer joins.
giveItem is given via /ei give.amount

Context variables

Trigger context variables are referenced as %variable% in action text and parameters:

yaml
actions:
  attack:
    - 'sendmessage text="Hit %target% for %damage% damage"'
  kill_entity:
    - 'sendmessage text="Killed %target%"'

Every trigger injects these base variables:

VariableDescription
playerPlayer name.
item_idItem definition ID.
item_triggerTrigger name.
item_nameItem display name.

Conditions and disabled state

An item definition's condition is evaluated before each trigger. When it fails, the trigger does not run, on_fail.message is sent, and on_fail.actions execute; when it passes, on_pass.actions execute.

When an item has repair enabled and the held item is in the disabled state (durability depleted), its triggers do not run. See Item Repair.

Examples

Life-steal weapon

yaml
id: vampire_blade
item:
  source: minecraft-netherite_sword
  components:
    custom_name: "<dark_red>Vampire Blade</dark_red>"
actions:
  attack:
    - 'sendmessage text="<red>Dealt %damage% damage to %target%.</red>"'
  kill_entity:
    - 'sendmessage text="<red>Soul drained: %target%</red>"'

Consumable

yaml
id: health_potion_large
item:
  source: minecraft-potion
  components:
    custom_name: "<red>Large Health Potion</red>"
actions:
  consume:
    - "playsound sound=minecraft:entity.generic.drink volume=1 pitch=1"
    - 'sendmessage text="<green>You drank %item_name%.</green>"'