附魔要素定价

基本信息

属性 值
管理类 thaumic.tinkerer.common.enchantment.core.EnchantmentManager
初始化 EnchantmentManager.initEnchantmentData(),调用点 TTCommonProxy.java:149
数据表 Map<Integer, Map<Integer, EnchantmentData>> enchantmentData(EnchantmentManager.java:34),一级键为附魔 effectId,二级键为等级
数据行总数 41(vanilla=true 26 行 + vanilla=false 15 行,其中 14 个不同附魔 + 1 行重复)
自定义 Aspect 0 —— 本模组不定义任何 Aspect,只消费 Thaumcraft 的 Aspect 常量

Thaumic Tinkerer 为全部 26 个原版附魔重新指定了要素消耗,使附魔可以通过魔法机制参与定价;同一张表也承载本模组的 14 个自定义附魔。

数值:放大公式

每条注册只传入「1 级要素」,实际每级消耗由 registerExponentialCostData() 在 enchantment.getMinLevel()..getMaxLevel() 区间上展开(EnchantmentManager.java:303-312):

multiplier(i) = i * (1 + 0.2 * i)
cost(要素, 等级 i) = (int)(基础值 * multiplier(i))

MiscHelper.multiplyAspectList() 对每个要素做整数截断相乘(MiscHelper.java:65-72),并在 multiplier == 1 时直接返回原列表。

等级 i multiplier 计算式
1 1.2 1 × (1 + 0.2)
2 2.8 2 × (1 + 0.4)
3 4.8 3 × (1 + 0.6)
4 7.2 4 × (1 + 0.8)
5 10.0 5 × (1 + 1.0)

注意:等级 1 的乘数是 1.2 而非 1.0,因此实际 1 级消耗 = 基础值 × 1.2 后截断,下表给出的是传入的基础值而非最终消耗。

原版附魔定价表(26 项)

以下为注册时传入的 1 级基础要素,行号指向 EnchantmentManager.java。

# 附魔 源码常量 1 级要素 源码行
1 Protection Enchantment.protection EARTH 10 + ENTROPY 7 41
2 Fire Protection Enchantment.fireProtection FIRE 10 + ENTROPY 3 + WATER 4 46
3 Feather Falling Enchantment.featherFalling AIR 16 + ORDER 5 51
4 Blast Protection Enchantment.blastProtection EARTH 5 + FIRE 5 + ENTROPY 8 56
5 Projectile Protection Enchantment.projectileProtection AIR 10 + ENTROPY 7 61
6 Respiration Enchantment.respiration WATER 10 + AIR 8 + ORDER 5 66
7 Aqua Affinity Enchantment.aquaAffinity WATER 25 + ORDER 20 + EARTH 5 71
8 Thorns Enchantment.thorns EARTH 10 + ENTROPY 12 76
9 Sharpness Enchantment.sharpness ORDER 10 82
10 Smite Enchantment.smite ORDER 5 + AIR 5 87
11 Bane of Arthropods Enchantment.baneOfArthropods ORDER 5 + FIRE 5 92
12 Knockback Enchantment.knockback ENTROPY 5 + AIR 10 97
13 Fire Aspect Enchantment.fireAspect FIRE 15 + EARTH 4 102
14 Looting Enchantment.looting AIR 10 + FIRE 10 + WATER 10 + EARTH 10 + ORDER 15 + ENTROPY 15 107
15 Efficiency Enchantment.efficiency ENTROPY 12 + EARTH 4 114
16 Silk Touch Enchantment.silkTouch ORDER 50 + EARTH 10 + ENTROPY 10 119
17 Unbreaking Enchantment.unbreaking ORDER 15 + WATER 8 + EARTH 8 124
18 Fortune Enchantment.fortune AIR 10 + FIRE 10 + WATER 10 + EARTH 10 + ORDER 15 + ENTROPY 15 129
19 Power Enchantment.power EARTH 5 + ORDER 10 136
20 Punch Enchantment.punch AIR 4 + EARTH 10 + ENTROPY 5 141
21 Flame Enchantment.flame ENTROPY 5 + FIRE 20 + EARTH 5 146
22 Infinity Enchantment.infinity ENTROPY 40 + ORDER 40 + EARTH 10 151
23 Lure Enchantment.field_151369_A WATER 20 + BEAST 20 157
24 Luck of the Sea Enchantment.field_151370_z ENTROPY 20 + WATER 20 162
25 Haste Config.enchHaste AIR 10 + ENTROPY 5 + EARTH 5 168
26 Repair Config.enchRepair WATER 20 + FIRE 20 + EARTH 20 + AIR 20 + ORDER 20 + ENTROPY 5 173

第 23、24 项使用 MCP 混淆名 field_151369_A / field_151370_z,分别对应 Lure 与 Luck of the Sea;第 25、26 项取自 Thaumcraft 的 Config.enchHaste / Config.enchRepair,而非原版 Enchantment 字段。

附加数据

EnchantmentData(enchantment/core/EnchantmentData.java)每级携带 4 个字段:

字段 含义
texture 图标 ResourceLocation
vanilla 是否原版附魔
aspects 该等级要素消耗
research 解锁所需研究键;vanilla=true 的 26 项全部传空字符串

canEnchantmentBeUsed(player, enchant)(EnchantmentManager.java:290-295)用 research 是否为空串来决定是否检查研究完成度 —— 因此原版附魔无需研究即可使用,而本模组附魔全部受研究门控(尽管其中 8 个共用了同一个键,见 自定义附魔)。

兼容性规则

registerCompatibilityRules()(EnchantmentManager.java:319-328)遍历 Enchantment.enchantmentsList 的笛卡尔积,凡是 canApplyTogether() 不对称的组合写入 rules(Multimap<Integer, IEnchantmentRule>)。规则实现在 enchantment/core/rule/BasicCompatibilityRule.java。

registerExtraRules()(EnchantmentManager.java:330)为空方法体,被 initEnchantmentData() 末行调用但不做任何事。

相关条目

  • 自定义附魔 - 14 个本模组附魔的 ID、等级上限与研究门控
  • Enchanter - 读取 enchantmentData 并按等级扣除要素的方块