Battlegear 附魔
基本信息
| 属性 | 值 |
|---|---|
| 注册数 | 7 |
| 类 | mods.battlegear2.enchantments.BaseEnchantment |
| 本地化键 | enchantment.<name>(en_US.lang) |
| 可承载物品 | 盾牌(实现 IEnchantable)与弓(EnumEnchantmentType.bow) |
功能
7 个自定义附魔全部由 BaseEnchantment.initBase 在 init 阶段注册(BattlegearConfig.java:314-318 → BaseEnchantment.java:78-88)。每个附魔的 id 取自配置项 EnchantmentsID 分类下的对应键,被其他附魔占用时会自动顺延到下一个可用 id(EnchantmentHelper.takeNextAvailableId,EnchantmentHelper.java:120-157)。
可用性判定
BaseEnchantment.canApply 的判定顺序(BaseEnchantment.java:42-51):
- 物品实现
IEnchantable→ 委托其isEnchantable - 否则,若附魔类型为
bow且BattlegearUtils.isBow判定为弓 → 允许 - 否则,若类型为
all→ 拒绝 - 否则走原版
Enchantment.canApply
全仓库中实现 IEnchantable 的物品只有 ItemShield(ItemShield.java:38)。因此盾击类附魔只能上盾牌。
数值
参数含义由 BaseEnchantment 构造函数决定(BaseEnchantment.java:23-31):
(id, weight, limit, progress, range) → 最大等级 = limit,最小附魔需求 = 1 + level × progress,最大附魔需求 = 最小值 + range。
| 附魔 | 本地化名 | 最大等级 | 附魔需求系数 | range | 附魔类型 | 来源 |
|---|---|---|---|---|---|---|
bash.weightless |
Bash Weightless | 5 | 3 | 30 | all |
BaseEnchantment.java:79 |
bash.power |
Bash Power | 5 | 10 | 40 | all |
BaseEnchantment.java:80 |
bash.damage |
Bash Damage | 3 | 15 | 50 | all |
BaseEnchantment.java:81 |
shield.usage |
Shield Efficiency | 5 | 5 | 30 | all |
BaseEnchantment.java:82 |
shield.recover |
Shield Recovery | 4 | 20 | 20 | all |
BaseEnchantment.java:83 |
bow.loot |
Bow Luck | 2 | 10 | 50 | bow |
BaseEnchantment.java:84-85 |
bow.charge |
Bow Drawnback | 1 | 20 | 20 | bow |
BaseEnchantment.java:86-87 |
各附魔的实际效果
| 附魔 | 效果 | 计算式 | 来源 |
|---|---|---|---|
shield.usage |
降低盾牌体力衰减 | decayRate × (1 - 等级 × 0.1F) |
ItemShield.java:138-141 |
shield.recover |
提升体力恢复速率 | 0.01F × (1 + 等级 × 0.2F) |
ItemShield.java:144-147 |
bash.weightless |
降低盾击体力代价 | 0.33F - 0.06F × 等级 |
BattlegearClientTickHandeler.java:66-67 |
bash.power |
提升盾击击退力 | 击退分量 × (1 + 0.1 × 等级) |
SpecialActionPacket.java:54, 56 |
bash.damage |
盾击追加 thorns 伤害 | 每级 +2.0F,仅当目标距离 < 2 格时结算,伤害源为 DamageSource.causeThornsDamage |
SpecialActionPacket.java:58-63 |
bow.loot |
提升掉落物数量(非箭矢本身) | 对每个掉落堆叠 +等级,且不超过其堆叠上限 |
BattlemodeHookContainerClass.java:424-432 |
bow.charge |
缩短蓄力窗口 | setItemInUse(result, maxUseDuration - 20000 × 等级) |
BowHookContainerClass2.java:114-118 |
bash.power / bash.damage / bash.weightless 均从副手物品读取(SpecialActionPacket.java:44、BattlegearClientTickHandeler.java:63-67),故实际生效前提是副手持盾牌。bow.loot 先查射手主手,若未附魔且射手处于 battlemode 状态,再查副手(BattlemodeHookContainerClass.java:406-412);其触发条件是伤害来源 isProjectile()(BattlemodeHookContainerClass.java:404)。bow.charge 最大等级为 1,即最多把 72000 的使用时长压缩到 52000。
交互
| 行为 | 说明 |
|---|---|
| 同一附魔重复 | canApplyTogether 要求两附魔 effectId 不同,即同类附魔不能共存(BaseEnchantment.java:63-66) |
| 附魔台可用性 | canApplyAtEnchantingTable 直接委托 canApply(BaseEnchantment.java:53-56) |
| 创造模式展示 | EnchantmentHelper.getEnchantmentBooks 生成满级附魔书供创造标签展示(EnchantmentHelper.java:78-86) |
| 自动加入附魔书列表 | setName 时调用 addToBookList(BaseEnchantment.java:90-95) |
合成配方
附魔没有合成配方,只能通过附魔台获得。id 冲突时可手工编辑 EnchantmentsID 分类。