Dagger
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | battlegear2:dagger.wood / .stone / .iron / .diamond / .gold |
| 类 | mods.battlegear2.items.ItemDagger |
| 继承 | OneHandedWeapon → ItemWeapon → ItemSword |
| 接口 | IBackStabbable、IHitTimeModifier、IExtendedReachWeapon |
| 注册方式 | 构造函数内 GameRegistry.registerItem(this, this.name)(ItemDagger.java:29) |
| 创造标签 | BattlegearConfig.customTab(ItemWeapon.java:29) |
| 材质顺序 | wood, stone, iron, diamond, gold(BattlegearConfig.java:64) |
功能
匕首是 5 种材质的单手武器,每种材质注册一个独立 Item。继承 ItemSword 以便附 vanilla 剑附魔(ItemWeapon.java:17 注释)。
核心特性:
- 背后刺杀:实现
IBackStabbable。从背后命中时额外造成一次baseDamage伤害,伤害源为battlegearExtra.backstab(ItemDagger.java:56-60;伤害源常量见Battlegear.java:49) - 攻速修正:实现
IHitTimeModifier,getHitTime返回-(int)(attackSpeed 属性修正量 × 10)(ItemDagger.java:51-53) - 攻击距离修正:实现
IExtendedReachWeapon,返回extendedReach属性修正量(ItemDagger.java:63-65) - 副手适配:
OneHandedWeapon允许副手放置(allowOffhand返回 true),sheatheOnBack返回 false(OneHandedWeapon.java:16-28) - 附魔等级:覆写
getItemEnchantability()返回材质的getEnchantability()(OneHandedWeapon.java:50-52)
数值
所有材质的 hitTime 与 reach 在注册时固定为同一组值(BattlegearConfig.java:277):
dagger[i] = new ItemDagger(material, itemNames[3], 0.5F, -2);
| 数值 | 值 | 来源 |
|---|---|---|
攻击速度修正量 hitTime |
0.5(属性操作 1,即减去) | BattlegearConfig.java:277、ItemDagger.java:45-46 |
攻击距离修正量 reach |
-2(属性操作 0,即加上) | BattlegearConfig.java:277、ItemDagger.java:42-43 |
击退时间 getHitTime |
-5(= -(int)(0.5 × 10)) |
ItemDagger.java:51-53 |
| 基础伤害公式 | 4 + material.getDamageVsEntity() 再 -= 2,即 2 + getDamageVsEntity() |
ItemWeapon.java:40、ItemDagger.java:28 |
基础伤害的最终数值取决于原版
Item.ToolMaterial枚举的getDamageVsEntity(),该方法不在本仓库中实现,具体逐材质数值无法从本仓库核实。
交互
| 触发 | 行为 |
|---|---|
| 副手攻击 | 允许(OneHandedWeapon.java:31-34) |
| 副手点击空气 / 点击方块 | 允许(OneHandedWeapon.java:37-44) |
| 收背后 | 否(sheatheOnBack 返回 false,OneHandedWeapon.java:26-28) |
| 可采集方块 | 高草(Blocks.tallgrass)与羊毛(Blocks.wool)(ItemDagger.java:33-36) |
合成配方
ShapedOreRecipe,每种材质一个(BattlegearConfig.java:390-400):
L
S
| 字符 | 物品 |
|---|---|
S |
stickWood(木棍) |
L |
木质匕首为 plankWood(物品字典);其余为 ToolMaterial.values()[i].func_150995_f(),metadata = WILDCARD_VALUE |
woodStack 常量为字符串 "plankWood"(BattlegearConfig.java:383)。