Bow

基本信息

属性 值
注册名 battlegear2:bow.iron、battlegear2:bow.diamond
类 mods.battlegear2.items.ItemBowIron、mods.battlegear2.items.ItemBowDiamond
继承 net.minecraft.item.ItemBow
注册方式 BattlegearConfig 反射循环(BattlegearConfig.java:293-306)
贴图 battlegear2:bow.iron、battlegear2:bow.diamond(ItemBowIron.java:133、ItemBowDiamond.java:129)
专用渲染器 BowRendererIron、BowRendererDiamond(ClientProxy.java:98,100)

功能

本模组提供 2 把自制弓。它们不是替换原版弓,而是额外注册的物品,可在副手使用。

核心特性:

  • 满蓄力可长期保持:getMaxItemUseDuration 返回 72000(远超原版的 72000 蓄力窗口设计),两把弓一致(ItemBowIron.java:100-102、ItemBowDiamond.java:96-98)
  • 不可食用:onEaten 被覆写为原样返回,防止弓被当作食物吃掉(ItemBowIron.java:94-97、ItemBowDiamond.java:90-93)
  • Forge 事件支持:覆写 onPlayerStoppedUsing 时构造并触发 ArrowLooseEvent(ItemBowIron.java:28-36),onItemRightClick 触发 ArrowNockEvent(ItemBowIron.java:110-115)
  • 附魔支持:getItemEnchantability 返回 1(ItemBowIron.java:125-127、ItemBowDiamond.java:121-123),故可接受 Power / Punch / Flame / Infinity 等原版弓附魔(ItemBowIron.java:59-73)
  • 蓄力曲线:沿用原版 f = (f*f + f*2)/3,f < 0.1 不发射,上限 1.0,满蓄力时箭矢 setIsCritical(true)(ItemBowIron.java:42-57)
  • 原版弓渲染器接管:若 disabledRenderers 不含 bow,模组为原版 Items.bow 注册 BowRenderer(ClientProxy.java:96-97)—— 这是对原版弓的渲染替换,与本模组的两把自制弓是不同条目

未注册的金弓与 Greg 弓

en_US.lang 中存在 item.battlegear2:bow.gold.name=Gold Bow 与 item.battlegear2:bow.greg.name=Greg's Bow 两条本地化字符串,但这两个物品从未被注册。BattlegearConfig 中相关代码整段被注释:

public static ItemBow mobBowIron, modBowDiamond; // modBowGold ,modBowGreg;
...
// modBowGold = (ItemBow) new ItemBowGold().setUnlocalizedName(...)
// modBowGreg = (ItemBow) new ItemBowGreg().setUnlocalizedName(...)

(BattlegearConfig.java:73, 210-213)

ClientProxy 中对应的渲染器注册同样被注释(ClientProxy.java:99-101)。全仓库检索 ItemBowGold / ItemBowGreg 仅命中上述注释行,ItemBowGold.java 与 ItemBowGreg.java 两个源文件不存在。这两个物品属于死代码,不构成注册内容。

数值

两把弓的差异仅在耐久与每发损耗:

数值 Iron Bow Diamond Bow 来源
最大耐久 576 768 ItemBowIron.java:24、ItemBowDiamond.java:24
每发耐久损耗 1 2 ItemBowIron.java:75、ItemBowDiamond.java:75
最大使用时长 72000 72000 ItemBowIron.java:101、ItemBowDiamond.java:97
附魔能力 1 1 ItemBowIron.java:126、ItemBowDiamond.java:122
堆叠上限 1 1 ItemBowIron.java:23、ItemBowDiamond.java:23

箭矢伤害、击退、燃烧时间由原版 Enchantment.power / punch / flame 与 EntityArrow 决定,不在本仓库中实现,具体数值无法从本仓库核实。

交互

触发 行为
右键 触发 ArrowNockEvent;创造模式或背包有箭时进入蓄力(ItemBowIron.java:110-122)
松开右键 触发 ArrowLooseEvent,按蓄力计算箭矢速度 f * 2.0F(ItemBowIron.java:28-91)
蓄力 < 0.1 不发射(ItemBowIron.java:45-47)
拥有 Infinity 或创造模式 箭矢设为 canBePickedUp = 2,不消耗箭(ItemBowIron.java:38-39, 82-83)
右键食用 无效果(onEaten 原样返回,ItemBowIron.java:94-97)

合成配方

两把弓共用形状 ShapedOreRecipe,仅材料不同(BattlegearConfig.java:357-380):

 #I
# I
 #I
字符 物品
# Items.iron_ingot(铁弓)/ Items.diamond(钻石弓)
I Items.string(线)

两者均可被 Disabled Recipies 中的 bow 关闭。

相关条目