Attachement Recipe(合成配方)

基本信息

属性 值
类型 无序自定义配方(IRecipe / RecipeSorter.Category.SHAPELESS)
注册位置 ItemTome 构造时 GameRegistry.addRecipe(new AttachementRecipe()) + RecipeSorter.register("akashictome:attachment", ...)
工作台尺寸 10(getRecipeSize 返回 10)
注册名 akashictome:attachment

行为

AttachementRecipe.matches 在工作台内扫描:

  1. 必须正好存在一个基础 tome(stack.getItem() == ModItems.tome,不能是已变形的 Akashic Tome)。
  2. 必须存在一个目标物品且通过 isTarget(stack) 校验。
  3. 不允许出现第三个有效物品;其他空槽无害。
  4. 当工作台中已经有"当前 tome 已附带的同一份书"且该书不在 whitelistedDuplicatesItems 列表里时,匹配失败(避免重复添加),但 whitelistedDuplicatesItems(默认 gregtech:gt.multiitem.books:*)允许重名书被重复附加。

AttachementRecipe.getCraftingResult:

  1. 拷贝工具(即 tome)的 NBT;
  2. 若 akashictome:data 标签不存在则创建;
  3. 用 MorphingHandler.getModFromStack(target) 取出目标物品 mod id,若该 mod 已存在则改为 mod1、mod2… 直至唯一;
  4. 把目标物品 NBT(去除内部 TAG_TOME_DATA 防止嵌套)写入 data 桶;
  5. 在目标物品 NBT 上写 TAG_ITEM_DEFINED_MOD = mod;
  6. 返回带数据的新 tome 副本。

数值

数值 默认值
配方类型 SHAPELESS(无序)
配方 sort 注册键 ""(最后参数,RecipeSorter priority)
配方尺寸 10

目标物品筛选(isTarget 决策树)

  1. stack == null 或 stack 本身已是 Akashic Tome → 拒绝。
  2. 目标物品 mod id 为 minecraft → 拒绝。
  3. ConfigHandler.allItems == true → 一律接受。
  4. 目标物品 mod id 在 ConfigHandler.blacklistedMods 或等于 akashictome → 拒绝。
  5. 目标物品的 registryName 或 registryName:damage 在 blacklistedItems → 拒绝。
  6. 目标物品的 registryName 或 registryName:damage 在 whitelistedItems → 接受。
  7. 物品注册名小写子串包含 whitelistedNames 任一关键字(book/tome/lexicon/nomicon/manual/knowledge/pedia/compendium/guide/codex/journal) → 接受。
  8. 全部不满足 → 拒绝。

限制

  • 必须在工作台(inventory 3×3 范围内)中放置正好一个基础 tome和正好一个可附加物品。
  • 目标物品 mod 必须非 minecraft、非 akashictome、不在黑名单。
  • 重复添加同名物品会被默认拒绝(除 whitelistedDuplicatesItems)。

相关条目