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)的注魔配方。
净后果:
itemAmulet的研究页上挂着的是WarpWardAmulet那条注魔配方 (4 格材料版),而PureAmulet的 8 格材料版被顶掉。- 曲曲护符
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 |
产出错误的物品 |
后果:
ThaumcraftApi.addInfusionCraftingRecipe的第一个参数是 研究键,两个配方共用"warptheory.amulet", 后注册的WarpWardAmulet会覆盖前者的注册。- 产出是
itemAmulet(纯净护符)而非曲曲护符, 玩家按「曲曲护符」配方合成会拿到另一个物品。 - 全仓
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 —— 本模组不添加任何原版合成配方。
相关条目
- Warp 研究 - 配方的研究挂载
- 曲曲净化器 -
PureTear/PureTearMinor - 护符类物品 -
PureAmulet/ 曲曲护符配方缺陷 - 曲曲消耗品 -
Litmus/Potion/ 坩埚产物 - Warptheory 配置 -
wussMode分支