Skip to content

EmakiStation

EmakiStation 是 Emaki 系列的通用合成工作站模块。它把「按配方投入材料、排入队列、到点领取产物」这条流程做成可配置的 GUI 工作站,并额外提供一套完全独立的分解站。

合成侧是三页式界面(配方目录 → 材料预览 → 合成队列),队列串行推进。材料从「背包 + 仓库」合并池扣除,安装 EmakiStorage 后仓库参与供料;产物按配置路由到仓库或背包,两边都放不下时进入待领取状态,不会掉落也不会销毁。

基本信息

项目
模块版本1.1.0
API 坐标emaki.jiuwu.craft:emaki-station-api:1.1.0
主类emaki.jiuwu.craft.station.EmakiStationPlugin
主命令/emakistation
别名/estation/est
硬依赖EmakiCoreLib
软依赖EmakiStorage、PlaceholderAPI
描述符基线api-version: "1.21.8"folia-supported: true
JavaJava 25
主要权限emakistation.use(默认 true)、emakistation.purchase(默认 true)、emakistation.dismantle(默认 true)、emakistation.reload(op)、emakistation.debug(op)、emakistation.admin(op)

POM/runtime/API 与默认 config.yml 的版本值是 1.1.0;源码内部的 AppConfig.CURRENT_VERSION = "1.0.2" 是配置迁移结构常量,两者用途不同,不要混用。

功能页面

页面内容
命令与权限/emakistation 的 9 个子命令、6 个权限节点与两个访问权限前缀。
配置详解config.ymlqueuelimitsstoragepersistencegui 五段。
工作站定义stations/<id>.yml 的布局、权限、队列参数、材料通道与产物路由。
配方定义recipes/<配方>.yml 的归属、材料、产物、耗时、货币成本与两种条件门。
合成队列队列长度的三个来源、串行推进、取消退还与待领取状态。
付费队列位queue_costs.yml 的档位、逐格计价与三道开关。
物品分解独立分解站与分解配方的 input_sourcerollspool 权重抽取。
界面模板四份 GUI 模板的槽位类型与「必须显式写 type:」约束。
API 与集成emaki-station-api 的门面、查询与操作接口及线程约束。
事件 APIStationCraftSubmitEventStationCraftCancelEventStationCraftCompletedEvent

核心能力

  • 无序集合匹配:配方只看材料种类与总数,不看摆放位置,没有 shaped 概念。item_sources 是「任意其一」集合,数量按集合内总数计算——需要 64 个时,30 个 coal 加 34 个 charcoal 也算满足。
  • 背包与仓库合并供料:两个通道都开启时,材料来自合并池并优先扣背包。玩家看不到通道切换按钮,界面里显示的「拥有」就是两边合计。
  • 串行单线队列:一个玩家在一个工作站只有一条队列,只有队首在推进。waitingrunning 占用队列长度,pending_claim 不占用。
  • 队列长度三来源:基础长度、emakistation.queue.<n> 权限档、付费购买。权限档取代基础长度,付费额度叠加在其上,最终统一被 max_length 截断。
  • 产物永不丢失:所有配置目标都放不下时,条目转为待领取,等玩家用 /emakistation claim 或界面按钮领取。
  • 分解站完全独立:分解站与合成站 ID 互不关联,各自在 stations_dismantle/recipes_dismantle/ 目录加载,不是工作站的第四页。

文件结构

服务器运行后,EmakiStation 主要使用以下文件:

text
plugins/EmakiStation/
├─ config.yml
├─ queue_costs.yml
├─ stations/
│  └─ blacksmith.yml
├─ recipes/
│  └─ example_recipe.yml
├─ stations_dismantle/
│  └─ example_dismantle_station.yml
├─ recipes_dismantle/
│  └─ example_dismantle_recipe.yml
├─ gui/
│  ├─ station_catalog.yml
│  ├─ station_preview.yml
│  ├─ station_queue.yml
│  └─ station_dismantle.yml
└─ lang/
   ├─ zh_CN.yml
   └─ en_US.yml
路径说明
config.yml主配置:队列默认值、容量上限、仓库通道、持久化、界面节流。
queue_costs.yml付费队列位档位。业务数据文件,只在缺失时释放一次,版本升级不覆盖管理员内容。
stations/<id>.yml合成工作站定义。文件名与 id 一致。
recipes/<配方>.yml合成配方定义。一个文件一条配方,归属由配方侧的 station_ids 声明。
stations_dismantle/<id>.yml分解站定义,与合成站互不关联。
recipes_dismantle/<配方>.yml分解配方定义,含输入物品与产物概率池。
gui/*.yml四份界面模板:配方目录、材料预览、合成队列、分解界面。
lang/*.yml命令、界面、预检与控制台文案。

快速开始

  1. EmakiCoreLib-*.jarEmakiStation-*.jar 放入服务器 plugins/
  2. 不要把 emaki-station-api-*.jar 放进 plugins/;API Jar 只作为开发者的编译依赖。
  3. 首次启动后检查 plugins/EmakiStation/config.yml 与示例工作站 stations/blacksmith.yml
  4. 打开示例工作站:
text
/emakistation open blacksmith
  1. 查看自己的队列与领取产物:
text
/emakistation queue
/emakistation claim
  1. 修改配置后重载:
text
/emakistation reload

使用提示

  • 工作站的 channels.backpackchannels.storage 不能同时为 false,否则该工作站会被拒绝加载——能打开但永远用不了,不如启动时就报错。
  • channels.default 是保留键,当前不再生效。合并通道之后没有「停在哪个通道」这回事,留着只为让旧配置不报未知键。
  • 仓库通道除了 storage.enabled: true,还需要 EmakiStorage 提供 emakistorage:atomic_batch 能力才会启用。缺少该能力时不会退化为逐个取出,因为那会让材料在背包里闪现一次。
  • progress_mode: offline 只表示「计时继续」,不表示「离线发货」。离线期间到点的条目只是已到期,真正结算发生在玩家下次上线时。
  • 三份布局文件(layoutpreview_layoutqueue_layout)都必须存在,缺任何一个都会在启动预检里报 missing_layout
  • 材料分配是贪心的,没有回溯。同一个物品能满足多条需求时会分配给先声明的那条,极少数情况下会让理论可行的配方匹配失败,拆分配方即可规避。