Attachement Recipe(合成配方)
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 无序自定义配方(IRecipe / RecipeSorter.Category.SHAPELESS) |
| 注册位置 | ItemTome 构造时 GameRegistry.addRecipe(new AttachementRecipe()) + RecipeSorter.register("akashictome:attachment", ...) |
| 工作台尺寸 | 10(getRecipeSize 返回 10) |
| 注册名 | akashictome:attachment |
行为
AttachementRecipe.matches 在工作台内扫描:
- 必须正好存在一个基础 tome(
stack.getItem() == ModItems.tome,不能是已变形的 Akashic Tome)。 - 必须存在一个目标物品且通过
isTarget(stack)校验。 - 不允许出现第三个有效物品;其他空槽无害。
- 当工作台中已经有"当前 tome 已附带的同一份书"且该书不在
whitelistedDuplicatesItems列表里时,匹配失败(避免重复添加),但whitelistedDuplicatesItems(默认gregtech:gt.multiitem.books:*)允许重名书被重复附加。
AttachementRecipe.getCraftingResult:
- 拷贝工具(即 tome)的 NBT;
- 若
akashictome:data标签不存在则创建; - 用
MorphingHandler.getModFromStack(target)取出目标物品 mod id,若该 mod 已存在则改为mod1、mod2… 直至唯一; - 把目标物品 NBT(去除内部
TAG_TOME_DATA防止嵌套)写入data桶; - 在目标物品 NBT 上写
TAG_ITEM_DEFINED_MOD = mod; - 返回带数据的新 tome 副本。
数值
| 数值 | 默认值 |
|---|---|
| 配方类型 | SHAPELESS(无序) |
| 配方 sort 注册键 | ""(最后参数,RecipeSorter priority) |
| 配方尺寸 | 10 |
目标物品筛选(isTarget 决策树)
stack == null或 stack 本身已是 Akashic Tome → 拒绝。- 目标物品 mod id 为
minecraft→ 拒绝。 ConfigHandler.allItems == true→ 一律接受。- 目标物品 mod id 在
ConfigHandler.blacklistedMods或等于akashictome→ 拒绝。 - 目标物品的
registryName或registryName:damage在blacklistedItems→ 拒绝。 - 目标物品的
registryName或registryName:damage在whitelistedItems→ 接受。 - 物品注册名小写子串包含
whitelistedNames任一关键字(book/tome/lexicon/nomicon/manual/knowledge/pedia/compendium/guide/codex/journal) → 接受。 - 全部不满足 → 拒绝。
限制
- 必须在工作台(inventory 3×3 范围内)中放置正好一个基础 tome和正好一个可附加物品。
- 目标物品 mod 必须非 minecraft、非 akashictome、不在黑名单。
- 重复添加同名物品会被默认拒绝(除
whitelistedDuplicatesItems)。
相关条目
- Akashic Tome - 主物品条目
- 配置文件白/黑名单 - isTarget 所引用的所有配置项
- Morphing Handler 变形核心 -
getModFromStack/containsItem/makeMorphedStack实现