神秘学附魔配方(TINKERSAUGMENTATION)
基本信息
| 属性 | 值 |
|---|---|
| 研究 ID | TINKERSAUGMENTATION |
| 注册入口 | TCCompat.thaumic(),postInit 且 Loader.isModLoaded("Thaumcraft") && Config.TC(SuperTic.java:55) |
| 配方类 | com.Zoko061602.SuperTic.compat.InfusionModifierRecipe extends InfusionRecipe |
研究项注册
TCCompat.java:15-18:
AspectList al = new AspectList().add(Aspect.TOOL, 20).add(Aspect.MAGIC, 20);
new ResearchItem("TINKERSAUGMENTATION", "ARTIFICE", al, 7, 6, 7, new ItemStack(TinkerTools.titleIcon, 1, 4099))
.setPages(new ResearchPage("STiC"), new ResearchPage(Thaumcraft.infusion)).setAutoUnlock()
.registerResearchItem();
| 字段 | 值 |
|---|---|
| 分类 | ARTIFICE |
| 要素 | TOOL 20 + MAGIC 20 |
| 复杂度三元组 | 7, 6, 7 |
| 图标 | new ItemStack(TinkerTools.titleIcon, 1, 4099)(meta 4099) |
| 页面 | ResearchPage("STiC") + ResearchPage(Thaumcraft.infusion) |
| 解锁方式 | setAutoUnlock()——无需前置研究,完成即可自动解锁 |
页面前一个是本地化键 STiC,对应 lang 文件里的 STiC=... 行
(assets/supertic/lang/en_US.lang / zh_CN.lang)。中文为
“你可以通过注魔祭坛,为匠魂工具增加额外的升级槽.很遗憾,符文矩阵能力有限,每柄工具只能这样获得一次额外升级槽.”
配方覆盖的工具清单
Thaumcraft.tools 数组(Thaumcraft.java:23-29)共 26 个 Item,
registerRecipes 为每一个注册一个 InfusionModifierRecipe(Thaumcraft.java:74-78):
| 来源类 | 工具 |
|---|---|
TinkerTools(18 个) |
pickaxe、shovel、hatchet、broadsword、longsword、rapier、dagger、cutlass、frypan、battlesign、chisel、mattock、scythe、lumberaxe、cleaver、hammer、battleaxe、excavator |
TinkerWeaponry(8 个) |
shuriken、throwingknife、javelin、shortbow、longbow、crossbow、arrowAmmo、boltAmmo |
infusion = new InfusionModifierRecipe(new ItemStack(tools[0])); // 第 0 个被单独存进静态字段
recipes.add(infusion);
for (int i = 1; !(i == tools.length); i++) {
recipes.add(new InfusionModifierRecipe(new ItemStack(tools[i])));
}
(Thaumcraft.java:74-78)recipes 取自 ThaumcraftApi.getCraftingRecipes()(Thaumcraft.java:73)。
注意
input1/input2/input3三个数组的索引 0 对应metalBlock的 meta7, 1 / 2 是金苹果。数组本身是static字段(Thaumcraft.java:34-37)。
配方的三档难度
Config.TC_lvl(默认 2,范围 1~3)决定配方强度与材料
(Thaumcraft.java:43-65、InfusionModifierRecipe.java:18-26):
TC_lvl |
InfusionRecipe 难度 | 要素 | 附加材料 |
|---|---|---|---|
1 |
TC_lvl * 2 = 2 |
list1 = TOOL 16 |
input1 = TinkerWorld.metalBlock meta 7 + 2 个 Items.golden_apple |
2(默认) |
4 | list2 = TOOL 32 |
input2 = TinkerWorld.metalBlock meta 2 + 2 个 TinkerArmor.diamondApple |
3 |
6 | list3 = TOOL 64 |
input3 = Items.nether_star + 2 个 Items.golden_apple meta 1 |
难度是 Config.TC_lvl * 2 的乘算(InfusionModifierRecipe.java:22)。
getListfromLevel(int lvl) / getInputfromLevel(int lvl) 两个方法的形参 lvl
完全未被使用——方法体直接读 Config.TC_lvl(Thaumcraft.java:43-65)。
效果:升级槽 +1
InfusionModifierRecipe.getOutput(InfusionModifierRecipe.java:28-39):
NBTTagCompound nbt = out.getTagCompound();
nbt.setBoolean("STicTC", true);
int mod = nbt.getCompoundTag("InfiTool").getInteger("Modifiers") + 1;
nbt.getCompoundTag("InfiTool").setInteger("Modifiers", mod);
即:给匠魂工具的 InfiTool.Modifiers 加 1(多加一个升级槽),
并在 NBT 打上 STicTC = true 标记。lang 文本 “additional modifier” 说的就是这个。
匹配限制 matches
InfusionModifierRecipe.matches(InfusionModifierRecipe.java:41-66)在原版
InfusionRecipe.matches 之外加了 4 条限制:
| 顺序 | 检查 | 源码 |
|---|---|---|
| 1 | in == null → false |
InfusionModifierRecipe.java:43 |
| 2 | in.getItem() instanceof ToolCore 不成立 → false |
InfusionModifierRecipe.java:44 |
| 3 | in.getTagCompound().getBoolean("STicTC") 为真 → false(每件工具只能附魔一次) |
InfusionModifierRecipe.java:45 |
| 4 | !ThaumcraftApiHelper.isResearchComplete(player, "TINKERSAUGMENTATION") → false |
InfusionModifierRecipe.java:46 |
| 5 | 逐个比对 getComponents(),全部命中且输入列表被清空 → true |
InfusionModifierRecipe.java:52-65 |
比对时若组件的 getItemDamage() == 32767(即忽略 metadata),
会先把待比对项的 damage 也设成 32767(InfusionModifierRecipe.java:56)。
所有组件比对时传 areItemStacksEqual(i2, comp, true),第三参 true 表示比较 NBT。
getRecipeOutput 被 override 为直接调 getOutput(input)
(InfusionModifierRecipe.java:68-71),即每次查询输出都基于传入的 input
现场计算,而不是用构造时传入的那个 getOutput(input) 结果。
Dreamcraft 影响
Thaumcraft.registerRecipes 开头有 Dreamcraft 检测(Thaumcraft.java:68-71):
if (Loader.isModLoaded("dreamcraft")) {
appleeasy = applehard;
applehard = new ItemStack(TinkerArmor.diamondApple);
}
即装 Dreamcraft 时把 diamondApple 与「虚弱/金苹果 meta 1」的配方位置对调
——最低档改用 Items.golden_apple meta 1,中间档改用 TinkerArmor.diamondApple。
⚠️ 这段赋值是死代码:
appleeasy/applehard是两个静态字段 (Thaumcraft.java:31-32),而input1/input2/input3三个数组在类静态初始化 阶段就已经用当时的字段值构造完成(Thaumcraft.java:34-37)。之后重新赋值字段 不会回写已构造的数组内容。所以 Dreamcraft 的这段对调实际不产生任何效果, 除非该类从未被初始化(而registerRecipes是该类的静态方法调用,必然先触发初始化)。
兼容依赖
dependencies.gradle 中 Thaumcraft 是 compile 'thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev'
——从 CurseMaven 之外的仓库拉取的官方 1.7.10 包,同时 compile 了
cofh-core-69162:2388751(CoFH Core,用于 TConstruct 的 TinkerWorld / TinkerArmor 等类)。