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.javasrc/main/java/com/arc/bloodarsenal/common/items/book/RecipeHolder.javasrc/main/resources/assets/bloodarsenal/book/lang/{zh_CN,en_US}.lang- 触发点:
src/main/java/com/arc/bloodarsenal/common/BloodArsenal.java:183-186