EmakiForge 总览
EmakiForge 是一套配方驱动的锻造系统。玩家在锻造界面中放入图纸和材料,系统根据材料贡献和品质随机生成最终产物。产物的属性数值、名称、Lore 都由配方和材料共同决定,结果写入物品的 PDC 数据中。
除了锻造本身,EmakiForge 还内置了配方书(让玩家浏览可用配方)和运行时编辑器(在游戏内直接修改配方、图纸、材料定义,改完自动备份和热重载)。
基本信息
| 属性 | 值 |
|---|---|
| 模块 ID | emaki-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 | 签名变化时自动刷新已锻造物品的展示层 |