导入器 (Importers)

基本信息

属性 值
注册表 betterquesting.client.importers.ImporterRegistry(单例 INSTANCE)
API 接口 betterquesting.api.client.importers.IImporter
消费界面 betterquesting.client.gui2.editors.GuiImporters
已注册导入器数 3(全部由 bq_standard 注册)
核心自带导入器 0
附属包接入 IMPORT_REG.registerImporter(IImporter)(仅客户端 API)

功能

导入器把其他模组的任务包转换成 BetterQuesting 的内部格式,让作者能把已有的任务设计迁入 BQ。核心 modid betterquesting 只提供注册表与 GUI,不提供任何导入器实现;3 个已注册的导入器全部来自同仓库的 bq_standard。

ImporterRegistry 的注册接口只有一个方法(ImporterRegistry.java:16-25):

void registerImporter(IImporter imp)

校验只有两条:拒绝 null(抛 NullPointerException("Tried to register null quest importer")),拒绝重复注册同一实例(抛 IllegalArgumentException("Unable to register duplicate quest importer"))。getImporters() 返回内部 List 的直接引用(ImporterRegistry.java:28-30),调用方若修改该列表会绕过注册校验 —— 这是源码现状,非本 wiki 的评价。

GuiImporters 读取 ImporterRegistry.INSTANCE.getImporters() 渲染列表(GuiImporters.java:85),即导入器只在客户端可见。

3 个导入器

# 类 modid 本地化名 key 状态
1 DummyImporter bq_standard bq_standard.importer.dummy.name ⚠️ 自述为空实现(见下)
2 HQMQuestImporter bq_standard bq_standard.importer.hqm_quest.name 生效
3 HQMBagImporter bq_standard bq_standard.importer.hqm_bag.name 生效

⚠️ DummyImporter 是自述的空壳

源码类注释原文(bq_standard/importers/DummyImporter.java):

Dummy importer that doesn’t actually do anything. Mostly just here to keep the package directory around. We should probably just remove the importer feature entirely if we don’t use it.

但它确实被注册(bq_standard/core/proxies/ClientProxy.java:29-30),因此会出现在玩家的导入器列表中,点击后不会转换任何内容。这属于「已注册但功能为空」,此处据实记录 —— 它不是被注释掉的死代码,而是作者留下的、已被自己标注为待删的占位实现。

HQM 导入器的容错

HQMQuestImporter 读取 HQM(Hardcore Quest Manager)导出的 JSON 时有两层容错(HQMQuestImporter.java:118-150):

  • 解析失败时把原文件备份为 malformed_<原文件名><i>.json(i 递增以免覆盖),随后返回空 JsonArray
  • jsonRoot == null || jsonRoot.size() <= 0 时直接返回(:155)
  • 末行注释 // Just a safety measure against NPEs 标明了 JsonArray 返回值的用意

转换时会检查任务线重名,冲突时打日志 Tried to add duplicate quest … to quest line …(HQMQuestImporter.java:356)。其转换器按类型拆分在 bq_standard/importers/hqm/converters/ 下:

类别 转换器
任务(tasks) HQMTaskAdvancement / HQMTaskBlockBreak / HQMTaskBlockPlace / HQMTaskCraft / HQMTaskDetect / HQMTaskKill / HQMTaskLocation / HQMTaskReputaion / HQMTaskTame
奖励(rewards) HQMRewardChoice / HQMRewardCommand / HQMRewardReputation / HQMRewardStandard
物品 HQMItem / HQMItemBag / HQMItemHeart
声望 HQMRep
工具 HQMUtilities

本页只记录导入器的存在与注册状态。各转换器的字段映射语义无法核实 —— 需要逐个阅读转换器实现,且这些类属 modid bq_standard,不在本分类范围内。

数值

数值名 值
已注册导入器 3
核心自带导入器 0
功能为空的导入器 1(DummyImporter,源码自述)
HQM 转换器类 17(9 任务 + 4 奖励 + 3 物品 + 1 声望)
导入器所属 modid 全部为 bq_standard
ImporterRegistry.getImporters() 返回 内部 List 的直接引用

相关条目