端盖(Cap)造价倍率表
基本信息
| 属性 | 值 |
|---|---|
| 注册方式 | TCWandAPI.regCap(new CapWrapper(name, costMultiplier)) |
| 无条件注册 | 6 个(GTWandRegistry.java:44-49) |
| 条件注册 | 13 个(5 个附属块内) |
| 研究 key | 默认 "CAP_" + name(CapWrapper.java:20) |
⚠️ 端盖的第二个参数不是造价,而是「造价乘数」。
CapWrapper(String name, int costMultiplier)(:12-14)会去
thaumcraft.api.wands.WandCap.caps.get(name) 取原版已注册端盖的物品,
本 mod 不新增端盖物品,只改它们的合成代价权重。
无条件注册(6 个)
| 端盖 tag | costMultiplier | 研究 key |
|---|---|---|
iron |
0 | CAP_iron |
copper |
1 | CAP_copper |
gold |
2 | CAP_gold |
silver |
3 | CAP_silver |
thaumium |
5 | CAP_thaumium |
void |
7 | CAP_void |
⚠️ iron 的乘数是 0 —— 铁端盖的 cap 项贡献为
capCost × 0 = 0,即完全免去端盖部分的 vis 成本。
这是本 mod 中最极端的一档,不要写成 1。
条件注册(13 个)
| 所属模组 | 端盖 tag | costMultiplier |
|---|---|---|
| Forbidden Magic | manasteel |
6 |
| Forbidden Magic | terrasteel |
1 |
| Forbidden Magic | elementium |
7 |
| Forbidden Magic | vinteum |
5 |
| Forbidden Magic | alchemical |
6 |
| Thaumic Tinkerer | ICHOR |
8(全表最高) |
| Blood Arsenal | blood_iron |
6 |
| Tainted Magic | cloth |
3 |
| Tainted Magic | crimsoncloth |
6 |
| Tainted Magic | shadowcloth |
5 |
| Tainted Magic | shadowmetal |
8 |
| Thaumic Bases | thauminite |
6 |
| Thaumic Exploration | SOJOURNER |
5 |
| Thaumic Exploration | MECHANIST |
5 |
(表中 14 行,其中 Forbidden Magic 5 + TT 1 + BA 1 + TM 4 + TB 1 + TE 2 = 14;
CompatibleMods 覆盖 6 个模组。)
Tainted Magic 的两步覆写
GTWandRegistry.java:89-107 对 shadowcloth / crimsoncloth
先改 Thamcraft 侧参数、再包一层 CapWrapper,顺序不能颠倒:
| 端盖 | makeCap 的 discount |
makeCap 的 cost |
随后 regCap 的乘数 |
|---|---|---|---|
shadowcloth |
0.85F | 7 | 5 |
crimsoncloth |
0.80F | 9 | 6 |
discount(0–1)是 Thamcraft 侧的要素折扣系数(越小越便宜)cost是 Thamcraft 侧的端盖基础造价costMultiplier是本 mod 自己的端盖项乘数
makeCap 还会设置 ResourceLocation 贴图,指向
taintedmagic:textures/models/ModelWAND_CAP_{SHADOW,CRIMSON}_CLOTH.png
(引用的是别的模组的资源域,本仓库内无这些贴图)。
源码核对(2026-10-01 审计)
- ⚠️
CapWrapper构造会 NPE:new CapWrapper(name, costMultiplier)直接WandCap.caps.get(name).getItem()(:13), 不判空。若某端盖未被 Thamcraft(或对应附属)注册, 此行抛NullPointerException且没有任何可读的报错信息。 capTagToWrapper(TCWandAPI.java:32)是Map<String, CapWrapper>, 同名regCap会静默覆盖先前的条目(Map.put语义), 而caps列表里两条都在 ⇒getCaps()与getWrapperForCap()可能不一致。 当前GTWandRegistry中无同名重复。- 端盖也要求完成研究才能合成(
GTNHWandRecipe.checkCaps,:63)。 - 合成时两个端盖格必须放同一种端盖:
OreDictionary.itemMatches(cap, inv.getStackInSlot(SLOT_CAP[1]), true)(:64)。 权杖则是三个端盖格全同(GTNHScepterRecipe.checkCaps,:55-56)。