跳到正文
烈焰甘蔗Wiki

Throwing Weapons

⚠️ 已订正:原文堆叠数、基础伤害、速度排序三类数值基本全是编造的。投掷武器不是普通物品,而是模块化工具(ToolCore)。

概述

Tinkers’ Construct 的投掷武器均由 AmmoItem / AmmoWeapon 继承链实现,继承自 ToolCore(即模块化工具),不是普通 Item:

Item → ToolCore → AmmoItem → AmmoWeapon → {Shuriken, ThrowingKnife, Javelin}
                 AmmoItem → {ArrowAmmo, BoltAmmo}

已订正 1(堆叠数全错):原文称 Shuriken/ThrowingKnife/Bolt 可堆叠 16、Arrow 可堆叠 32、Javelin 为 1。 实际 ToolCore 构造函数直接赋字段 this.maxStackSize = 1;(ToolCore.java:73),五种物品堆叠数全部为 1。 注意它用的是直接字段赋值而非 setMaxStackSize(),所以 grep setMaxStackSize 搜不到——这也是容易误判「未设置=默认 64」的地方。

已订正 2(伤害值全错):原文基础伤害 3/5/9/7/「因头部材料而异」是编造的。 实际是 AmmoItem(baseDamage, name) 的第一个参数写入 damageVsEntity:

物品 构造调用 基础伤害 注册名
Shuriken super(1, "shuriken") 1(×getDamageModifier() 1.2) TConstruct:Shuriken
ThrowingKnife super(1, "throwingknife") 1 TConstruct:ThrowingKnife
Javelin super(3, "Javelin") 3 TConstruct:Javelin
ArrowAmmo super(0, "Arrows") 0 TConstruct:ArrowAmmo
BoltAmmo super(0, "Bolts") 0 TConstruct:BoltAmmo

证据:Shuriken.java:23、ThrowingKnife.java:18、Javelin.java:22、ArrowAmmo.java:38、BoltAmmo.java:34。

已订正 3(速度排序写反):原文「Shuriken 快 / Throwing Knife 中 / Javelin 中慢 / Bolt 极快」——语义写反。 实际 getProjectileSpeed():ThrowingKnife 2.2 > Javelin 2.0 > Shuriken 1.9。手里剑反而最慢,飞刀最快。 证据:Shuriken.java getProjectileSpeed() = 1.9f;ThrowingKnife.java = 2.2f;Javelin.java:173-175 = 2.0f。

已订正 4:原文把 Arrow 描述为「标准远程弹药…标准箭矢」并称其抛射物为 ArrowEntity。实际注册的是独立的 ArrowAmmo 物品(TConstruct:ArrowAmmo),抛射物 tconstruct.weaponry.entity.ArrowEntity(注册名 Arrow,ID 23)。本 mod 不注册原版 minecraft:arrow。 另注:仓库中有两个 ArrowEntity——tconstruct/tools/entity/ArrowEntity.java(ID 4,Fancy Item 邻近注册)与 tconstruct/weaponry/entity/ArrowEntity.java(ID 23)。原文未区分。

武器总览

武器 抛射物实体(注册名 / ID) 基础伤害 堆叠 部件数 投射速度 蓄力
Shuriken Shuriken / 20 1 1 4 1.9 无(getWindupProgress 恒为 1.0)
ThrowingKnife ThrowingKnife / 21 1 1 2 2.2 15 ticks
Javelin Javelin / 22 3 1 3 2.0 17 ticks
Bolt Bolt / 24 0 1 — 无法核实 — BoltAmmo 无 getProjectileSpeed 覆写,基类未在本仓 —
Arrow Arrow / 23 0 1 — 无法核实 — 同上 —

证据:WeaponryCommonProxy.java:14-19(实体 ID)、各武器类 getPartAmount()。

原文「Javelin 穿透,不可堆叠」——「不可堆叠」正确;「穿透」在源码中无对应实现,无法核实。

关键机制

弹药消耗

AmmoItem.getMaxAmmo(tags) = max(1, ceil(TotalDurability * getAmmoModifier())) (AmmoItem.java:45-47)。弹药数存于 NBT InfiTool.Ammo;未合成的裸物品 getAmmoCount() 返回 0。

发射前先检查:if (getAmmoCount(stack) <= 0) return stack;(Shuriken.java onItemRightClick)。

特殊修正

武器 getAmmoModifier() getDurabilityModifier() 说明
Javelin 0.2f 0.1f 耐久极低但弹药多,定位为消耗品
Shuriken 继承默认 继承 ToolCore 1.0f getDamageModifier() = 1.2f
ThrowingKnife 继承默认 继承 1.0f 瞄准时移速 ×3(客户端 onUpdate)

暴击

ThrowingKnife:蓄力时间 ≥ getWindupTime * 1.5f(即 15 × 1.5 = 22.5 tick)时 knife.setIsCritical(true)(ThrowingKnife.java createProjectile)。

蓄力/精度

  • ThrowingKnife:getWindupTime 15,minAccuracy 0.6f,maxAccuracy 1f
  • Javelin:getWindupTime 17
  • Shuriken:无蓄力,minAccuracy/maxAccuracy 均 0,EnumAction.block,使用时长 2 tick(点击即投)

相关条目

浏览全部模组