Skip to content

配方系统

Forge 配方定义一次锻造需要什么、如何判定、消耗什么、产出什么、成功或失败后执行哪些动作。配方文件通常位于 recipes/*.yml

主要字段

字段说明
id配方唯一 ID。
display_name配方显示名。
blueprint_requirements图纸要求列表,每项包含 item_sourcesamount
materials材料列表或材料规则。
forge_capacity锻造容量,限制投入材料规模。
optional_material_limit可选材料数量上限。
condition_type条件组合方式。
condition_required_count需要满足的条件数量。
conditions条件列表。
quality品质配置。详见品质系统文档。
result.item_sources输出物品来源。为空时表示目标输入模式。
result.actions结果生成后执行的动作列表。
result.meta_actions结果元数据动作,包含 name_actionslore_actions
actions.pre锻造前动作。失败时中止锻造并触发 failure。
actions.success成功动作。
actions.failure失败动作。
permission使用该配方需要的权限。

目标输入模式

result.item_sources 为空时,表示配方不会创建全新物品,而是对玩家放入的目标装备执行锻造重建。

适合:

  • 给已有武器添加锻造品质。
  • 让材料改变装备属性。
  • 给装备写入 forge layer。
  • 保留原装备的强化、宝石、套装等其他模块状态。

固定输出模式

如果 result.item_sources 指向某个物品,则锻造成功后生成该物品。

适合:

  • 用材料合成一把新武器。
  • 用图纸制造固定装备。
  • 产出 EmakiItem 或外部插件物品。

品质配置

品质系统的完整说明请参见品质系统文档。配方中的典型结构:

yaml
quality:
  enabled: true
  tiers:
    - "普通-70-1.0"
    - "精良-25-1.05"
    - "史诗-5-1.15"
  guarantee:
    enabled: true
    threshold: 10
    minimum: 精良

tiers 格式为 "品质名-权重-倍率" 的字符串列表。权重越大越常见,倍率影响材料效果数值。

建议:

  • 普通品质权重大,稀有品质权重小。
  • 高价值配方提供保底,避免玩家长期没有正反馈。
  • 品质 ID 要和展示、属性、动作配置保持一致。

条件和权限

配方可以通过 permissionconditions 限制使用者。例如:

  • 只有铁匠职业能使用。
  • 玩家等级达到 30。
  • 目标装备属于某个类型。
  • 必须在特定世界或区域。
  • 必须拥有某个 PDC 标记。

动作节点

节点触发时机
actions.pre配方开始执行前。如果 pre 阶段动作失败,锻造中止并触发 failure。
actions.success锻造成功后。
actions.failure锻造失败后。
result.actions结果物品生成或应用时(在 success 之前触发)。

actions.pre 失败时,错误消息中可用变量:%reason%%action%%line%

示例:

yaml
actions:
  pre:
    - 'sendmessage text="<gray>锻造开始……"'
  success:
    - 'sendtitle title="<green>锻造成功" subtitle="<gray>你的装备已被重铸"'
    - 'playsound sound=BLOCK_ANVIL_USE volume=1 pitch=1'
  failure:
    - 'sendmessage text="<red>锻造失败,材料已损毁。"'
    - 'playsound sound=ENTITY_VILLAGER_NO volume=1 pitch=1'

结果元数据动作(meta_actions)

result.meta_actions 用于在锻造成功后对结果物品执行名称和 Lore 操作。

yaml
result:
  item_sources: null
  meta_actions:
    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>%player_name%</white></gray>"

name_actionslore_actions 的操作类型与 CoreLib 名称/Lore 操作系统一致。

可用模板变量

变量说明
%quality%品质 ID。
%quality_name%品质显示名。
%multiplier%品质倍率。
%player_name%执行锻造的玩家名称。
%player_uuid%执行锻造的玩家 UUID。
{变量名}材料效果注入的变量值。

最小示例

yaml
id: flame_sword
display_name: '<red>烈焰剑锻造'
permission: emakiforge.recipe.flame_sword
blueprint_requirements:
  - item_sources:
      - "minecraft-PAPER"
    amount: 1
materials:
  - item_sources:
      - "minecraft-BLAZE_ROD"
    amount: 3
forge_capacity: 10
optional_material_limit: 2
conditions: []
quality:
  enabled: true
  tiers:
    - "普通-80-1.0"
    - "精良-20-1.05"
result:
  item_sources: null
  meta_actions:
    name_actions:
      - action: "append_suffix"
        value: " <gray>[%quality_name%]</gray>"
    lore_actions:
      - action: "append"
        content:
          - ""
          - "<gray>锻造品质: <white>%quality_name%</white></gray>"
          - "<gray>锻造者: <white>%player_name%</white></gray>"
actions:
  success:
    - 'sendmessage text="<green>烈焰力量被注入武器。"'