Skip to content

EmakiForge 总览

EmakiForge 是一套配方驱动的锻造系统。玩家在锻造界面中放入图纸和材料,系统根据材料贡献和品质随机生成最终产物。产物的属性数值、名称、Lore 都由配方和材料共同决定,结果写入物品的 PDC 数据中。

除了锻造本身,EmakiForge 还内置了配方书(让玩家浏览可用配方)和运行时编辑器(在游戏内直接修改配方、图纸、材料定义,改完自动备份和热重载)。

基本信息

属性
模块 IDemaki-forge
版本3.3.0
主类emaki.jiuwu.craft.forge.EmakiForgePlugin
根命令/emakiforge
别名/eforge, /ef
强依赖EmakiCoreLib
软依赖EmakiAttribute, PlaceholderAPI

它做了什么

  • 配方锻造 — 图纸 + 材料 → 品质随机 → 属性计算 → 产出装备,完整的锻造链路
  • 材料贡献 — 每种材料可以贡献属性值、修正品质、增加容量,也可以改名或追加 Lore
  • 品质系统 — 加权随机决定品质等级,品质倍率直接影响最终属性。还有保底计数器兜底,防止玩家连续几十次都出低品质
  • 锻造层快照ForgeLayerSnapshotBuilder 把锻造结果打包成 layer snapshot 写入 PDC,后续由 StructuredPresentationRenderer 渲染到物品上
  • GUI — 锻造界面、配方书、运行时编辑器,三套界面各司其职
  • 热重载编辑blueprints/materials/recipes/ 都支持运行时编辑,改完自动备份到 backups/
  • 物品刷新 — 配方改了之后,已锻造的物品签名会对不上,ForgeItemRefreshService 会自动刷新展示层

配置文件

config.yml

yaml
# 配置文件版本,请勿手动修改
config_version: 3

# 语言设置
language: zh_CN

# 首次启动时释放默认数据(配方、图纸、材料示例)
# 释放完成后建议改为 false,避免重载时覆盖你的修改
release_default_data: true

# ===== 品质系统 =====
quality:
  # 品质等级定义,格式:"名称-权重-倍率"
  # 权重越高越容易抽中,倍率影响材料贡献的最终数值
  tiers:
    - "粗糙-40-0.6"
    - "普通-30-1.0"
    - "精良-20-1.3"
    - "史诗-8-1.6"
    - "传说-2-2.0"

  # 当品质无法确定时的回退值
  default_tier: "普通"

  # 保底系统 — 防止玩家连续太多次出低品质
  guarantee:
    enabled: true
    # 连续多少次没出目标品质后触发保底
    count: 50
    # 保底触发时强制给予的品质
    tier: "史诗"

  # 品质在物品上的展示方式
  item_meta:
    structured_presentation:
      name_contributions:
        quality_prefix:
          order: 0
          format: "{quality} "

# 数字格式化(影响属性值的显示精度)
number_format: "#.##"

# 权限配置
permission:
  enabled: true

# 条件系统
condition:
  # 全局条件,所有配方都会检查
  global: []

# 锻造历史记录
history:
  enabled: true
  # 每个玩家最多保留多少条记录
  max_records: 100

注意

config_version 由插件自动管理,用于配置版本迁移。手动改这个值可能导致配置被覆盖或迁移出错。

品质等级格式

品质等级用 "名称-权重-倍率" 的紧凑格式定义,三段用短横线分隔:

字段说明示例
名称品质的显示名称传说
权重加权随机的权重值,越大越容易抽中2
倍率材料贡献的乘数,直接乘到最终属性上2.0

文件目录结构

plugins/EmakiForge/
├── config.yml              ← 主配置
├── lang/                   ← 语言文件
│   └── zh_CN.yml
├── gui/                    ← GUI 配置
│   ├── forge_gui.yml       ← 锻造界面
│   ├── recipe_book.yml     ← 配方书界面
│   └── editor_gui.yml      ← 编辑器界面
├── recipes/                ← 锻造配方(可热重载)
│   └── example_sword.yml
├── blueprints/             ← 图纸定义(可热重载)
│   └── iron_sword.yml
├── materials/              ← 材料定义(可热重载)
│   └── common_materials.yml
├── playerdata/             ← 玩家数据(保底计数器、锻造历史等)
│   └── <uuid>.yml
└── backups/                ← 编辑器自动备份
    └── recipes/
        └── <timestamp>/

提示

recipes/blueprints/materials/ 三个目录都支持运行时热重载。通过编辑器修改时,系统会先在 backups/ 下创建带时间戳的备份,再写入新文件并触发重载。手动改文件的话,需要执行 /ef reload 才能生效。

关键服务

服务做什么
ForgeService锻造核心,协调整个锻造流程
ForgeExecutionService实际执行锻造逻辑(材料消耗、品质计算、产物生成)
RecipeBookGuiService配方书界面的渲染和交互
ForgeGuiService锻造界面的渲染和交互
EditorGuiService编辑器界面的渲染和交互
EditorGuiRenderer编辑器的渲染层,负责把编辑状态映射到 GUI 槽位
EditorPersistenceService编辑器的持久化层:验证 → 备份 → 写入 → 重载
ForgeLayerSnapshotBuilder把锻造结果构建成 layer snapshot 写入 PDC
ForgeItemRefreshService签名变化时自动刷新已锻造物品的展示层

Released under the GPL-3.0 License