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(),所以 grepsetMaxStackSize搜不到——这也是容易误判「未设置=默认 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.javagetProjectileSpeed() = 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:
getWindupTime15,minAccuracy0.6f,maxAccuracy1f - Javelin:
getWindupTime17 - Shuriken:无蓄力,
minAccuracy/maxAccuracy均 0,EnumAction.block,使用时长 2 tick(点击即投)
相关条目
- ToolPart — 武器由哪些部件组装而成
- MaterialItem — 弹药制作材料
- Smeltery — 模具浇铸设备
- TAchievements —
enemySlayer需手持Weapon击杀 - BlueSlime — 蓝色史莱姆