Warp 配方

[!INFO] 实现类:shukaro.warptheory.recipe.WarpRecipes 全部为 Thaumcraft API 配方,无任何原版 GameRegistry.addRecipe

默认分支实际生成 10 个配方(7 处 put)

recipes.put 在全文件出现 14 次,但均分在两个互斥分支 (各 7 处):

分支 put 语句数 实际配方数
if (!ConfigHandler.wussMode) 7 10(WarpChunk 在 4 次循环内 put)
else(wussMode = true) 7 10(同构)

默认分支的 7 处 put 展开后:

配方键 类型 循环 生成数
PureTearMinor 注魔 否 1
PureTear 注魔 否 1
PureAmulet 注魔 否 1
WarpWardAmulet 注魔 否 1
WarpChunk<meat> 坩埚 是(4 种肉) 4
Litmus 无序奥术 否 1
Potion 有序奥术 否 1
10

即按 put 语句计数会得 7,按实际生成数计数才是 10。

⚠️ 缺陷:曲曲护符配方的研究键与产物都写错

WarpWardAmulet 配方块:

WarpResearch.recipes.put(
        "WarpWardAmulet",
        ThaumcraftApi.addInfusionCraftingRecipe(
                Constants.ITEM_PURE_TALISMAN,          // <-- 研究键写错
                new ItemStack(WarpItems.itemAmulet),   // <-- 产物写错
                10, …));
位置 应为 实际 后果
传给 Thaumcraft API 的研究键(第 1 参) Constants.ITEM_PORTABLE_SHOWER Constants.ITEM_PURE_TALISMAN 与 PureAmulet 完全相同,同一研究键被注册两次
产物(第 2 参) WarpItems.itemWarpWardAmulet WarpItems.itemAmulet 产出另一个物品

⚠️ 需区分两个「键」:

  • WarpResearch.recipes 是 HashMap<String, Object>, 两次 put 用的键 "PureAmulet" 与 "WarpWardAmulet" 互不相同, HashMap 层面不冲突(WarpResearch:73 / :85 也分别 recipes.get("PureAmulet") / recipes.get("WarpWardAmulet"),能正常取到)。
  • 真正的冲突发生在 ThaumcraftApi.addInfusionCraftingRecipe 的第一个参数 (研究键):两处都传 Constants.ITEM_PURE_TALISMAN, 同一研究键 warptheory.amulet 被注魔注册两次, 后者(WarpWardAmulet)覆盖前者(PureAmulet)的注魔配方。

净后果:

  1. itemAmulet 的研究页上挂着的是 WarpWardAmulet 那条注魔配方 (4 格材料版),而 PureAmulet 的 8 格材料版被顶掉。
  2. 曲曲护符 itemWarpWardAmulet 没有任何配方指向 —— 全仓 grep 'itemWarpWardAmulet' 仅 5 处命中 (字段、实例化、注册、图标、研究页产物), 即 曲曲护符 在生存模式无法获得, 只能通过创造标签取得。

wussMode 的廉价分支

WarpRecipes.init() 的结构:

public static void init() {
    initMeats();
    if (!ConfigHandler.wussMode) {
        /* 完整配方,14 处 recipes.put */
    } else {
        /* 另一套低成本配方 */
    }
}

即 wussMode = true 时整段默认配方被跳过。 配置注释为 enables less expensive recipes。

⚠️ initMeats() 在 if 之外,故 meats 列表(4 种肉) 在两种模式下都会填充 —— 但 wussMode 分支是否使用它需另看。

4 种肉类

private static void initMeats() {
    meats.add(new ItemStack(Items.chicken));
    meats.add(new ItemStack(Items.beef));
    meats.add(new ItemStack(Items.porkchop));
    meats.add(new ItemStack(Items.fish));
}

固定 4 种原版 meats,无配置项可扩展。 循环生成的配方键为 "WarpChunk" + meat (ItemStack.toString() 拼接,不是 干净的物品名)。

对应研究页也按同一循环生成 somethingPages[i](i 从 1 开始, 跳过索引 0),见 Warp 研究。

⚠️ 配方键冲突:PureAmulet 与 WarpWardAmulet

WarpWardAmulet 配方块存在两处缺陷:

WarpResearch.recipes.put(
        "WarpWardAmulet",
        ThaumcraftApi.addInfusionCraftingRecipe(
                Constants.ITEM_PURE_TALISMAN,      // <-- 键写错,应为 ITEM_PORTABLE_SHOWER
                new ItemStack(WarpItems.itemAmulet),  // <-- 产物写错,应为 itemWarpWardAmulet
                10, …));
位置 应为 实际 后果
配方键(第一个参数) Constants.ITEM_PORTABLE_SHOWER Constants.ITEM_PURE_TALISMAN 与 PureAmulet 键相同,后者覆盖前者
产物 WarpItems.itemWarpWardAmulet WarpItems.itemAmulet 产出错误的物品

后果:

  1. ThaumcraftApi.addInfusionCraftingRecipe 的第一个参数是 研究键,两个配方共用 "warptheory.amulet", 后注册的 WarpWardAmulet 会覆盖前者的注册。
  2. 产出是 itemAmulet(纯净护符)而非曲曲护符, 玩家按「曲曲护符」配方合成会拿到另一个物品。
  3. 全仓 grep 'itemWarpWardAmulet' 仅 5 处命中 (字段、实例化、注册、图标、研究页), 无任何配方指向它 → 曲曲护符 在生存模式无法获得。

WarpResearch.recipes 是 HashMap,同键后写覆盖先写, 因此 PureAmulet 的配方记录会丢失(保留的是 WarpWardAmulet 的记录,产物为 itemAmulet)。

Potion 配方的动态要素

遗忘药水配方的要素不是写死的,而是遍历全部原始要素:

AspectList potionVis = new AspectList();
for (Aspect a : Aspect.getPrimalAspects()) {
    potionVis.add(a, 25);
}

Aspect.getPrimalAspects() 返回 7 个原始要素 (AER、IGNIS、TERRA、ORDO、PERDITIO、AQUA、METUS), 故每个各 25 点,合计 175 —— 全模组要素消耗最高的配方。 若未来 Thaumcraft 增加原始要素,该配方成本会自动上涨。

形状为 "QZQ" / "SBS" / "GSG",材料取自 thaumcraft.common.config.ConfigItems(itemResource meta 3 水银、 itemZombieBrain、itemShard meta 5 熵碎片), 即直接引用 Thaumcraft 内部配置类而非 ItemApi。

曲曲注入

两处 ThaumcraftApi.addWarpTo* 调用:

调用 目标 曲曲值
addWarpToItem(new ItemStack(WarpItems.itemSomething), 1) 物品 1
addWarpToResearch(Constants.ITEM_SOMETHING, 2) 研究 2

⚠️ 同一个 something 物品,物品加 1 点、研究加 2 点 —— 刻意的不对称(研究路径给双倍)。

全部配方均为 Thaumcraft API

源码 import 的 Thaumcraft API 方法:

方法 数量
ThaumcraftApi.addInfusionCraftingRecipe 4
ThaumcraftApi.addCrucibleRecipe 4(循环内)
ThaumcraftApi.addShapelessArcaneCraftingRecipe 1
ThaumcraftApi.addArcaneCraftingRecipe 1
ThaumcraftApi.addWarpToItem / addWarpToResearch 2

零个 GameRegistry.addRecipe —— 本模组不添加任何原版合成配方。

相关条目