Skip to content

名称与 Lore 操作 ​

CoreLib 的 name_actions 和 lore_actions 两个配置段用于逐条精确改动物品的名称和 Lore 展示

CoreLib 给你一套统一的物品名称和 Lore 操作方式. 所有 Emaki 插件都用 name_actions 和 lore_actions 来精确控制物品的名称和描述展示

这套操作是无状态的 -- 每次渲染都从头把整条操作链走一遍. 状态一变 (比如强化回退), 系统就用新的变量值把操作链重跑一次, 展示结果自然就对了


名称操作 (name_actions) ​

按你的配置逐条精确修改物品名称. 各操作按你在配置里写的顺序依次执行

replace ​

直接整个替换物品名称, 之前加的前缀和后缀会一并清掉

yaml
name_actions:
  - action: "replace"
    value: "<gold>%quality_name% 烈焰剑</gold>"

prepend_prefix ​

在名称前面加前缀

yaml
name_actions:
  - action: "prepend_prefix"
    value: "<red>[+%star%] </red>"

append_suffix ​

在名称后面加后缀

yaml
name_actions:
  - action: "append_suffix"
    value: " <gray>[%quality_name%]</gray>"

regex_replace ​

用正则替换名称内容. 注意: 只有名称已经用 replace 设成显式模板后才生效

yaml
name_actions:
  - action: "regex_replace"
    regex_pattern: "\\[\\+\\d+\\]"
    replacement: "[+%star%]"

Lore 操作 (lore_actions) ​

按你的配置逐条精确修改物品 Lore. 各操作按你在配置里写的顺序依次执行

append ​

在 Lore 最后一行后面加内容

yaml
lore_actions:
  - action: "append"
    content:
      - ""
      - "<gray>强化等级: <gold>+%star%</gold></gray>"

prepend ​

在 Lore 第一行前面加内容

yaml
lore_actions:
  - action: "prepend"
    content:
      - "<gradient:#F2C46D:#C9703D>强化等级 +%star%</gradient>"
      - ""

insert_below ​

在匹配到的行下面插入内容. 别名: search_insert_below, search_insert

yaml
lore_actions:
  - action: "insert_below"
    anchor: "物理伤害"
    content:
      - "<gray>强化加成: <gold>+%physical_attack%</gold></gray>"

insert_above ​

在匹配到的行上面插入内容. 别名: search_insert_above

yaml
lore_actions:
  - action: "insert_above"
    anchor: "品质"
    content:
      - ""
      - "<yellow>强化效果:</yellow>"

replace_line ​

替换第一个匹配到的行

yaml
lore_actions:
  - action: "replace_line"
    anchor: "强化等级"
    content:
      - "<gradient:#F2C46D:#C9703D>强化等级 +%star%</gradient>"

replace_text ​

只替换匹配行里的某段文本, 不动整行. 默认只处理一行; index 指定第几个匹配行, 超出范围时取最后一个匹配到的行

yaml
lore_actions:
  - action: "replace_text"
    anchor: "旧文本"
    replacement: "新文本"

replace_text_all ​

和 replace_text 一样, 但所有匹配行里的每一处都会被替换

yaml
lore_actions:
  - action: "replace_text_all"
    anchor: "旧文本"
    replacement: "新文本"

delete_line ​

删掉所有匹配到的行

yaml
lore_actions:
  - action: "delete_line"
    anchor: "旧的强化信息"

regex_replace ​

对所有 Lore 行做正则替换

yaml
lore_actions:
  - action: "regex_replace"
    regex_pattern: "\\+\\d+"
    replacement: "+%star%"

匹配字段 ​

insert_below, insert_above, replace_line, delete_line 里的匹配文本可以写多个字段名, 按优先级取:

字段优先级说明
target_pattern最高要匹配的目标文本
pattern中要匹配的目标文本
anchor最低要匹配的目标文本

匹配用的是包含匹配 (contains), 不是精确匹配: 只要某行含有这段文字就算命中


变量替换 ​

所有操作里的 value, content, anchor, replacement 都支持 %变量名% 格式的变量替换, 变量名匹配时不区分大小写. 服务器装了 PlaceholderAPI 的话, 渲染完还会再解析一次 PAPI 占位符

你能用哪些变量, 取决于用这套操作的插件:

插件可用变量
EmakiStrengthen%star%, %temper%, %max_temper%, %temper_color%, 以及所有 variables 中的值
EmakiForge%quality%, %quality_name%, %multiplier%, %player_name%, %player_uuid%, 以及所有锻造属性值
EmakiGem%slot_index%, %slot_type%, %gem_name%, %gem_level%, %display_name%, 以及所有 variables 中的值

回退机制 ​

这套系统靠 ItemOperationLedger 做到精确回退. 每次执行 name_actions 或 lore_actions, 系统都会把操作详情记进物品的 PDC (物品自带的附加数据存储)

想撤销某个操作时 (比如宝石提取, 强化降级), 只需三步:

  1. 系统用 operationId 找到那一条操作记录
  2. ItemOperationReverter 按记录精确撤销对应的名称/Lore 修改
  3. 其他模块的操作不受影响
text
镶嵌宝石 → Ledger.apply (operationId="gem_ruby_slot0", ...)
强化成功 → Ledger.apply (operationId="strengthen_star3", ...)
提取宝石 → Ledger.revert (operationId="gem_ruby_slot0")  ← 只撤销宝石的修改

强化系统的 Lore 更新用的是 replace_line 策略, 每次强化成功都会走这三步:

  1. 先把上一次强化的 lore_action 操作 revert 掉
  2. 再 apply 新星级的 lore_action 操作
  3. 这样属性行始终只有一行, 数值也一直是最新的

完整配置示例 ​

EmakiStrengthen 配方 ​

全局 Lore 操作 (每次强化都执行):

yaml
name_actions:
  - action: "append_suffix"
    value: " <yellow>[+%star%]</yellow>"

lore_actions:
  - action: "prepend"
    content:
      - "<gradient:#F2C46D:#C9703D>强化等级 +%star%</gradient>"
      - "<gray>锻印: %temper_color%%temper%/%max_temper%</gray>"

星级 Lore 操作 (★1 使用 append, ★2+ 使用 replace_line):

yaml
# ★1: 首次添加属性行
stars:
  1:
    effects:
      - type: "lore_action"
        lore_actions:
          - action: "append"
            content:
              - "<gray>物理伤害: <gold>+4</gold></gray>"
  # ★2+: 通过 anchor 匹配并替换已有行
  2:
    effects:
      - type: "lore_action"
        lore_actions:
          - action: "replace_line"
            anchor: "物理伤害:"
            content:
              - "<gray>物理伤害: <gold>+8</gold></gray>"

EmakiForge 配方 ​

yaml
name_actions:
  - action: "prepend_prefix"
    value: "<light_purple>[%quality_name%]</light_purple> "

lore_actions:
  - action: "append"
    content:
      - ""
      - "<gray>锻造品质: <white>%quality_name%</white></gray>"
      - "<gray>品质倍率: <white>x%multiplier%</white></gray>"
      - "<gray>锻造者: <white>%player_name%</white></gray>"