Spear

基本信息

属性 值
注册名 battlegear2:spear.wood / .stone / .iron / .diamond / .gold
类 mods.battlegear2.items.ItemSpear
继承 TwoHandedWeapon → ItemWeapon → ItemSword
接口 IExtendedReachWeapon
注册方式 构造函数内 GameRegistry.registerItem(this, this.name)(ItemSpear.java:30)
创造标签 BattlegearConfig.customTab(ItemWeapon.java:29)
材质顺序 wood, stone, iron, diamond, gold(BattlegearConfig.java:64)

功能

长矛是本模组唯一的双手武器,核心属性是骑乘伤害加成与攻击距离。

核心特性:

  • 骑乘伤害:向 mountedBonus 属性写入 mounted_extra_damage(ItemSpear.java:50-51)
  • 攻击距离:实现 IExtendedReachWeapon,向 extendedReach 属性写入 reach(ItemSpear.java:47-48)
  • 双手限制:TwoHandedWeapon.allowOffhand 返回 offhand == null(TwoHandedWeapon.java:16-18),isOffhandHandDual 返回 false(TwoHandedWeapon.java:21-23)
  • 例外:允许副手持盾:ItemSpear 覆写 allowOffhand,在父类判断基础上追加 || offhand.getItem() instanceof IShield(ItemSpear.java:39-41)
  • 收背后:sheatheOnBack 返回 true(TwoHandedWeapon.java:26-28)
  • 取消蓄力:覆写为无蓄力动作(ItemSpear.java:56-68,返回 EnumAction.none 且使用时长为 0)
  • 大型图标:额外注册 .big 贴图(ItemSpear.java:74)

数值

所有材质的 mount 与 reach 在注册时固定为同一组值(BattlegearConfig.java:283):

spear[i] = new ItemSpear(material, itemNames[6], 3, 2.0F);
数值 值 来源
骑乘伤害加成 mount 3(属性操作 0,即加上) BattlegearConfig.java:283、ItemSpear.java:50-51
攻击距离修正 reach 2.0(属性操作 0,即加上) BattlegearConfig.java:283、ItemSpear.java:47-48
物品使用动作 EnumAction.none ItemSpear.java:61-63
最大使用时长 0 ItemSpear.java:66-68
基础伤害公式 4 + material.getDamageVsEntity() 再 -= 2,即 2 + getDamageVsEntity() ItemWeapon.java:40、ItemSpear.java:29

基础伤害的最终数值取决于原版 Item.ToolMaterial 枚举的 getDamageVsEntity(),该方法不在本仓库中实现,逐材质数值无法从本仓库核实。

交互

触发 行为
副手放置 仅当副手为空或副手为 IShield 时允许(ItemSpear.java:39-41、TwoHandedWeapon.java:16-18)
副手攻击 方法体返回 true(TwoHandedWeapon.java:31-34)
收背后 是(TwoHandedWeapon.java:26-28)
右键 直接返回原 ItemStack,不进入蓄力(ItemSpear.java:56-58)

合成配方

木质长矛与其余材质走两条不同分支(BattlegearConfig.java:425-432)。

木质(i == 0) ShapedOreRecipe:

  S
 S
S
字符 物品
S stickWood(木棍)

其余材质 形状为 ShapedOreRecipe 但以上一级长矛为主料:

 L
S
字符 物品
S spear[0](木质长矛)
L 对应 ToolMaterial 的 func_150995_f(),metadata = WILDCARD_VALUE

相关条目