Skip to content

触发器

Item 触发器用于让物品在特定事件发生时执行动作。适合制作传送卷轴、药水、任务物品、右键技能道具和装备被动效果。

配置格式

触发器配置在物品定义文件的 actions 块下,格式为触发器名称对应动作列表:

yaml
id: town_scroll
item:
  source: minecraft-paper
  components:
    custom_name: "<aqua>回城卷轴</aqua>"
actions:
  right_click:
    - 'sendmessage text="<green>正在传送回城。</green>"'
    - "playsound sound=minecraft:entity.enderman.teleport volume=1 pitch=1"
  consume:
    - "playsound sound=minecraft:entity.player.burp volume=1 pitch=1"

每个触发器名称对应一个动作列表。动作语法参见 CoreLib 动作系统文档。

完整触发器列表

交互类

触发器触发时机上下文变量
right_click玩家右键空气或方块。
right_click_air玩家右键空气。
right_click_block玩家右键方块。
left_click玩家左键空气或方块,以及攻击实体时。攻击实体时为 targetdamage
left_click_air玩家左键空气。
left_click_entity玩家攻击实体。targetdamage
shift_left_clickShift + 左键(空气或方块)。
shift_right_clickShift + 右键(空气或方块)。

战斗类

触发器触发时机上下文变量
attack玩家攻击实体命中。targetdamage
damaged_by_entity被实体伤害。attackerdamage
damaged受到非实体来源的伤害(摔落、火焰等)。damage
kill_entity击杀非玩家实体。target
kill_player击杀玩家。target
death玩家死亡。

attackkill_entitykill_playerdamaged 等判定基于玩家主手物品。近战攻击、玩家发射的投射物命中,以及由玩家造成的致命伤害都会被视为玩家攻击。

投射物类

触发器触发时机上下文变量
shoot_bow射出弓箭。projectile_type
shoot_trident掷出三叉戟。projectile_type
arrow_hit箭矢命中实体。projectile_type
arrow_land箭矢未命中实体。projectile_type
trident_hit三叉戟命中实体。projectile_type
trident_land三叉戟未命中实体。projectile_type

投射物触发在命中时读取玩家当前主手物品,因此换手后可能不再匹配发射时的物品。

物品操作类

触发器触发时机上下文变量
drop丢弃物品(Q 键)。
shift_dropShift + 丢弃物品。
swap_hand交换主副手(F 键)。
shift_swap_handShift + 交换主副手。
consume物品被消耗(食物/药水)。consumed_item

dropswap_handplace_blockconsume 判定的是事件涉及的那件物品,而不是当前主手物品。

方块类

触发器触发时机上下文变量
break_block破坏方块。block
place_block放置方块。block

其他

触发器触发时机上下文变量
sneak玩家开始潜行(松开时不触发)。
teleport传送。
login玩家登录。
give通过 /ei give 发放物品时。amount

上下文变量

触发器触发时会向动作上下文注入变量,可在动作中通过 %变量名% 引用:

yaml
actions:
  attack:
    - 'sendmessage text="对 %target% 造成了 %damage% 点伤害"'
  kill_entity:
    - 'sendmessage text="击杀了 %target%"'

所有触发器都会注入以下基础变量:

变量说明
player玩家名称。
item_id物品 ID。
item_trigger触发器名称。
item_name物品显示名。

条件与禁用状态

物品定义的 condition 会在每个触发器执行前求值:不满足时该触发器不执行,并发送 on_fail.message、执行 on_fail.actions;满足时执行 on_pass.actions

当物品启用了 repair 且主手物品处于禁用状态(耐久归零)时,触发器不会执行。详见物品修复系统

配置示例

攻击吸血武器

yaml
id: vampire_blade
item:
  source: minecraft-netherite_sword
  components:
    custom_name: "<dark_red>吸血之刃</dark_red>"
actions:
  attack:
    - 'sendmessage text="<red>对 %target% 造成 %damage% 点伤害。</red>"'
  kill_entity:
    - 'sendmessage text="<red>灵魂汲取:%target%</red>"'

消耗品

yaml
id: health_potion_large
item:
  source: minecraft-potion
  components:
    custom_name: "<red>大型生命药水</red>"
actions:
  consume:
    - "playsound sound=minecraft:entity.generic.drink volume=1 pitch=1"
    - 'sendmessage text="<green>你饮下了 %item_name%。</green>"'