Skip to content

CoreLib 动作 ​

EmakiItem 注册到 CoreLib 动作系统里的段与门控如下, 按段 ID, 目标要求, 参数逐条给出, 可直接照抄进动作脚本

前置条件: EmakiItem 已启用. 启用后它向 CoreLib 动作注册表追加主手物品更新, 重绘, 修复, 耐久操作, 以及原版 Data Component 新增, 修改和删除段

NOTE

这里只记录 EmakiItem 注册的段; CoreLib 自带通用段见 CoreLib 动作系统. 当前段 ID 只使用下表中的规范名, 不再提供历史别名入口. 旧的 emakiitem_update 现在写作 item_update, 其余同理; 旧的冒号写法 emakiitem:component_add 现在写作 item_component_add

段 ID ​

段 ID用途目标要求参数
item_update强制按 EmakiItem 更新服务刷新主手物品REQUIRED_ENTITY无
item_rerender通过 CoreLib 物品装配服务重建主手物品展示REQUIRED_ENTITY无
item_repair_amount修复主手物品指定耐久损伤值REQUIRED_ENTITYamount
item_damage增加主手物品指定损伤值REQUIRED_ENTITYamount
item_set_damage设置主手物品当前损伤值REQUIRED_ENTITYvalue
item_set_durability设置主手物品剩余耐久值REQUIRED_ENTITYvalue
item_component_add新增一个 Data Component; 目标已存在该组件时失败OPTIONALcomponent, value, 可选 slot
item_component_modify修改一个已存在的 Data Component; 目标缺少该组件时失败OPTIONALcomponent, value, 可选 slot
item_component_remove删除一个 Data Component; 目标缺少该组件时按跳过处理 (重复执行结果一样)OPTIONALcomponent, 可选 slot
item_state_set设置一个类型化持久 item stateOPTIONALkey, type, value, 可选 slot
item_state_add对数值型持久 item state 增量OPTIONALkey, type, amount, 可选 slot
item_state_remove删除一个持久 item stateOPTIONALkey, type, 可选 slot
item_state_refresh刷新目标物品并保留其持久 stateOPTIONAL可选 slot

门控 ID ​

门控 ID用途参数提供变量
item_state_read读取一个持久 item state 并写入管道变量key, type, 可选 slotitem_state.value, item_state.exists, item_state.key, item_state.type

参数 ​

耐久与更新段 ​

参数类型必填默认值说明
amountINTEGER是 (item_repair_amount, item_damage)—修复或增加损伤的数量; 负数按 0 处理
valueINTEGER是 (item_set_damage, item_set_durability)—目标损伤值或目标剩余耐久值

item_update 与 item_rerender 不读取参数

Component 段 ​

参数类型必填默认值说明
componentSTRING是—Data Component ID; 省略命名空间时按 minecraft: 解析
valueSTRING是 (add / modify)—JSON-ish 的 component 值, 支持 JSON 对象/数组, 引号字符串, 布尔值, 数字, null 和普通字符串. 结构化值格式写错时该段失败
slotSTRING否""指定玩家背包槽位; 留空时按下面的顺序解析目标

item_component_remove 只有 component 与 slot, 没有 value

item state 段与门控 ​

参数类型必填默认值说明
keySTRING是 (除 item_state_refresh)—item state 字段名
typeSTRING是 (除 item_state_refresh)—item state 类型
valueSTRING是 (item_state_set)—要写入的字段值
amountDOUBLE是 (item_state_add)—数值增量
slotSTRING否""指定玩家背包槽位; 槽位名与 Component 段一致

item_state_refresh 只有可选 slot. item_state_read 是门控而不是段, 参数为 key, type 与可选 slot; 执行后在管道变量里取 item_state.* 系列值

Component 目标解析 ​

Component 段按以下顺序解析要改的物品:

  1. 参数中显式给出的 slot
  2. 管道物品 (由 create_item 等段发布的 CoreActionKeys.ITEM)
  3. 目标玩家的主手

解析规则: 参数里的 slot 优先于管道物品, 写了槽位就按槽位执行, 不写才走后面的默认顺序. 管道物品在原地修改, 后续段读的是同一个引用, 因此不会读到未修改的副本

三个 Component 段的目标要求是 OPTIONAL 而不是 REQUIRED_ENTITY: 管道里有物品即可执行, 不需要玩家目标

支持的槽位 ​

槽位名沿用 CoreLib 的统一槽位表:

  • 主手: mainhand, main_hand, hand
  • 副手: offhand, off_hand
  • 护甲: helmet, chestplate / chest, leggings / legs, boots
  • 背包索引: 0 到 35, 也可写成 slot_12, hotbar_0

示例 ​

yaml
actions:
  - 'self | item_update'
  - 'self | item_repair_amount amount=25'
  - 'self | item_damage amount=10'
  - 'self | item_set_durability value=100'
  - 'self | item_component_add component=max_stack_size value=16'
  - 'self | item_component_modify component=enchantment_glint_override value=true slot=mainhand'
  - 'self | item_component_remove component=custom_name slot=offhand'
  # 改管道物品而不是背包里的物品
  - 'self | create_item item_source=minecraft-diamond_sword | item_component_add component=max_stack_size value=1 | send_item'

带空格或结构化内容的 value 必须加引号, 否则参数解析会出错:

text
self | item_component_modify component=custom_name value='<gold>锻造之刃</gold>'
self | item_component_add component=custom_data value='{"emaki":{"source":"forge"}}'

使用提示 ​

  • 更新与耐久段作用于目标玩家的主手物品, 主手为空时跳过; 执行成功时输出 changed, damage, max_damage, 用这三个输出确认是否生效
  • item_set_durability 在物品没有最大耐久时不做修改; 损伤值会被钳制到 [0, max_damage], 降到上限以下时自动清除修复禁用标记
  • item_component_add 遇到已存在的组件, 以及 item_component_modify 遇到缺失的组件, 都会以 REJECTED 失败, 而不是自己悄悄纠正, 这两种情况都属于配置写错了. item_component_remove 遇到缺失组件则按跳过处理
  • 组件修改通过 CoreLib ConfiguredItemDefinition patch 应用, 会保留第三方物品来源身份, PDC 和未涉及的组件
  • Component 段成功时输出 component, target, changed, existed_before; target 是槽位名或 pipeline:item, 据此确认改动落在哪个槽
  • 目标物品为空气时跳过; 三种解析路径都没找到物品时该段失败, 需回查 slot 参数与管道里是否有物品