Upgrades
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | openmodularturrets:upgRan / :upgEff / :upgFire / :upgAcc / :upgScatter |
| 数量 | 5 种 |
| 物品类 | openmodularturrets.items.upgrades.RangeUpgradeItem / EfficiencyUpgradeItem / FireRateUpgradeItem / AccuracyUpgradeItem / ScattershotUpgradeItem,共同父类 UpgradeItem |
| 最大堆叠 | 4(UpgradeItem.java:12);散射例外为 2(ScattershotUpgradeItem.java:21) |
| 安装位置 | 底座的 UpgradeSlot(槽位 11;Tier 5 另有槽位 12) |
| 创造标签 | ModularTurrets.modularTurretsTab(UpgradeItem.java:11) |
功能
升级件装入炮塔底座的 UpgradeSlot(Tier 1 无升级槽;Tier 2/3/4 各 1 个;Tier 5 有 2 个),由 TurretHeadUtil 的 5 个读取函数逐 tick 结算:
| 升级件 | 读取函数 | 作用对象 |
|---|---|---|
| Upgrade - Range | TurretHeadUtil.getRangeUpgrades(:649) |
每格 +upgrades/range 格射程 |
| Upgrade - Scattershot | TurretHeadUtil.getScattershotUpgrades(:674) |
每格额外投射物数 |
| Upgrade - Accuracy | TurretHeadUtil.getAccuraccyUpgrades(:699) |
每格 +upgrades/accuracy 精度 |
| Upgrade - Efficiency | TurretHeadUtil.getEfficiencyUpgrades(:724) |
每格 −upgrades/efficiency 每发 RF |
| Upgrade - Fire Rate | TurretHeadUtil.getFireRateUpgrades(:750) |
每格 +upgrades/rateOfFire 射速 |
Tier 1 底座完全无法使用升级件:getRangeUpgrades 等函数开头都是 if (tier == 1) { return value; }(如 TurretHeadUtil.java:653-655),且 Tier 1 容器本就没有 UpgradeSlot。
堆叠即倍率:每个函数按 base.getStackInSlot(n).stackSize 线性累加,因此一格放 4 个 Upgrade - Range 相当于 4 倍加成。模组自带 lang(turret.upgrade.stacks):“Stacks up to 4 times.”
数值
| 升级件 | 配置键 | 默认每格加成 | 说明 |
|---|---|---|---|
| Upgrade - Range | upgrades/range |
+2 格 | 配置原文 “Increases range in blocks linearly” |
| Upgrade - Fire Rate | upgrades/rateOfFire |
+0.1(10%) | 配置原文 “It’s a double for some reason, reduces cooldown” |
| Upgrade - Accuracy | upgrades/accuracy |
+0.2 | 配置原文 “Increases accuracy linearly” |
| Upgrade - Efficiency | upgrades/efficiency |
−0.08(8%) | 配置原文 “Reduces power consumption linearly” |
| Upgrade - Scattershot | 复用 upgrades/range |
见下方说明 | 无独立配置项 |
来源:ConfigHandler.java:226-231。
源码缺陷(已核实):
TurretHeadUtil.getScattershotUpgrades的两个累加点都用了ConfigHandler.getRangeUpgradeBoost()而非某个散射专用常量(TurretHeadUtil.java:685与:692)—— 与getRangeUpgrades(:660与:667)的取值完全相同。这是复制粘贴遗留,导致改变射程配置会同时改变散射计数。本条按源码原文记录,不做推测性修正。
另需注意:
getScattershotUpgrades与getRangeUpgrades一样,在tier == 5时额外检查槽位 12,其余等级只检查槽位 11(TurretHeadUtil.java:657-672与:682-697)。
交互
| 触发 | 行为 |
|---|---|
放入 UpgradeSlot |
逐 tick 线性加成,无消耗、无耐久 |
| 放入普通槽位 | 被当作普通物品存放,不产生任何效果 |
| 放满 4 个 | 一格内 4 叠,获得 4 倍加成 |
| 散射件放 4 个 | 不可能 —— 堆叠上限 2 |
合成配方
5 种升级件都是固定配方,与已加载模组无关,统一在 RecipeHandler.initRecipes() 中注册(RecipeHandler.java:369-432),每次产出 1 个。
统一布局(仅中间 B 位不同):
A
ABA
C
| 字符 | 物品 |
|---|---|
A |
下界石英 |
B |
逐种不同,见下表 |
C |
IO Bus |
| 升级件 | B 位材料 |
源码位置 |
|---|---|---|
| Upgrade - Efficiency | 末影之眼 | RecipeHandler.java:369-380 |
| Upgrade - Accuracy | 金锭 | RecipeHandler.java:382-393 |
| Upgrade - Fire Rate | 烈焰粉 | RecipeHandler.java:395-406 |
| Upgrade - Range | 钻石 | RecipeHandler.java:408-419 |
| Upgrade - Scattershot | 燧石 | RecipeHandler.java:421-432 |
相关条目
- Turret Base - 升级槽的宿主
- Turret Parts - 配方中的 IO Bus
- Turret Base GUI - 升级槽的界面位置