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):

  1. 物品实现 IEnchantable → 委托其 isEnchantable
  2. 否则,若附魔类型为 bow 且 BattlegearUtils.isBow 判定为弓 → 允许
  3. 否则,若类型为 all → 拒绝
  4. 否则走原版 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 分类。

相关条目

  • 附魔 ID 配置 - 7 个附魔的 id 均可在配置中改写
  • 盾牌 - 唯一实现 IEnchantable 的物品
  • Bow - bow.loot 与 bow.charge 的适用对象