Guide-API 集成(焚血宝典)

基本信息

向 guideapi(Guide-API)注册一本游戏内指南书 BloodBurnedTome(书名「焚血宝典」),入口 BloodBurnedTome.registerTome()。

触发条件在 postInit(): Loader.isModLoaded("guideapi") && BloodArsenalConfig.guideAPIIntegration (BloodArsenal.java:183-186)。guideapi 是软依赖。

书与分类

项 值 来源
书名(zh_CN / en_US 均为同一串) 焚血宝典 guide.bloodarsenal.book.title / .name
作者 -An Arc Mage setAuthor
欢迎语 ASCII art 的 “BLOOD ARSENAL” setUnlocWelcomeMessage
物品贴图 BloodArsenal:burned_tome setItemTexture
贴图前缀常量 R_LOC = "BloodArsenal:book/images/" BloodBurnedTome.java:33
静态字段 public static Book burnedTome、public static List<CategoryAbstract> categories :31-32

分类与条目(共 1 分类 / 2 条目)

类型 本地化键 中文 图标
分类 guide.bloodarsenal.category.lifeBringer 带来生命的人 ModItems.bound_bow
条目 guide.bloodarsenal.entryTitles.backstory 一个不同的背景故事 —
条目 guide.bloodarsenal.entryTitles.glass 玻璃是危险的 —

registerLifebringer() 逐个 makePage(entries, pages, name) 构造, 分类图标是绑定弓(bound_bow)而不是书或血橙。

合成配方

registerTome() 用 AWWayofTime 的 ShapelessBloodOrbRecipe(血宝珠配方,消耗血而非经验):

槽 物品
1 ModItems.glass_shard(玻璃碎片)
2 Items.writable_book(可写书)
3 AWWayofTime…ModItems.apprenticeBloodOrb,OreDictionary.WILDCARD_VALUE

产物是 GuideRegistry.getItemStackForBook(burnedTome)。 即:玻璃碎片 + 可写书 + 学徒血宝珠 → 焚血宝典。

RecipeHolder

registerTome() 末尾调 RecipeHolder.init(),后者 recipeList = CraftingManager.getInstance().getRecipeList() 把当前合成配方列表快照到 public static IRecipe recipeList, 供指南按物品查配方用。两个查法:

  • getRecipeForItemStack(ItemStack) —— 遍历 recipeList 比对 getRecipeOutput().isItemEqual(stack);
  • getAltarRecipeForItemStack(ItemStack) —— 遍历 AltarRecipeRegistry.altarRecipes(AWWayofTime 祭坛配方), 并把结果缓存进 public static IRecipe glassSacrificialDagger / glassDaggerOfSacrifice 两个硬编码字段。

RecipeHolder 是 guideapi 集成的一部分,无条件依赖 AWWayofTime 的 AltarRecipeRegistry。而 AWWayofTime 在本 mod 是 硬依赖,所以这两条查法总是可用。

4 个页面构造辅助(私有的静态方法)

方法 产出的页面类型
makePage(entries, pages, name, others...) 先加长文本页,再把 others 里的 IPage / Object[] 追加
s(String pageName) 长文本页数组
r(IRecipe... recipes) PageIRecipe 数组
i(String... names) PageUnlocImage 数组(贴图来自 R_LOC)

others 的判别用 if 而非 else if,所以一个对象若同时是 IPage 且是 Object[](数组不是 IPage,实际不会)会被判两次 —— Object[] 分支在 Object[] 上永远为真,IPage 分支为假。

贴图与语言文件

  • 贴图目录:src/main/resources/assets/bloodarsenal/book/
  • 语言文件:assets/bloodarsenal/book/lang/zh_CN.lang 与 en_US.lang

注意这是独立的 book/lang 子树,与本 mod 常规的 assets/bloodarsenal/lang/ 分开。 zh_CN.lang 里 book.title 与 book.name 值完全相同(都是「焚血宝典」), 英文版同理 —— 书名与物品名共用一个串。

相关条目

源码

  • src/main/java/com/arc/bloodarsenal/common/items/book/BloodBurnedTome.java
  • src/main/java/com/arc/bloodarsenal/common/items/book/RecipeHolder.java
  • src/main/resources/assets/bloodarsenal/book/lang/{zh_CN,en_US}.lang
  • 触发点:src/main/java/com/arc/bloodarsenal/common/BloodArsenal.java:183-186