Turret Heads
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | openmodularturrets:disposeItemTurret / :potatoCannonTurret / :machineGunTurret / :incendiaryTurret / :grenadeTurret / :relativisticTurret / :rocketTurret / :teleporterTurret / :laserTurret / :railGunTurret |
| 数量 | 10 种,覆盖 Tier 1 – Tier 5 |
| 块类 | openmodularturrets.blocks.turretheads.BlockDisposableTurret 等 10 个,共同父类 BlockAbstractTurretHead |
| TileEntity | openmodularturrets.tileentity.turrets.*TileEntity,共同父类 TurretHead |
| 材质 | Material.glass(BlockAbstractTurretHead.java:19) |
| 脚步声 | Block.soundTypeStone(BlockAbstractTurretHead.java:24) |
| 碰撞箱 | 0.2, 0.2, 0.2 → 0.8, 0.8, 0.8(BlockAbstractTurretHead.java:16,25) |
| 爆炸抗性 | 6000000.0F(BlockAbstractTurretHead.java:23) |
| 渲染类型 | getRenderType() 返回 -1(BlockAbstractTurretHead.java:29-31,走 TESR 自定义渲染) |
| 生物生成 | canCreatureSpawn 返回 false(BlockAbstractTurretHead.java:54-56) |
| 破坏性 | 构造函数无条件 setBlockUnbreakable()(BlockAbstractTurretHead.java:22) |
| 创造标签 | ModularTurrets.modularTurretsTab |
重要:全部 10 个炮塔头在配置关闭时根本不注册。
Blocks.init()用if (ConfigHandler.getXxxSettings().isEnabled())包住每一种炮塔的new+GameRegistry.registerBlock(Blocks.java中 10 个if块),因此「关掉某炮塔」等于该炮塔在世界里完全不存在(无方块、无 TileEntity、无配方)。
功能
炮塔头必须贴附在 Turret Base 的 6 个正交相邻格之一上。放置时 canPlaceBlockAt 校验邻接(BlockAbstractTurretHead.java:39-46),装好后 TurretHead.updateEntity 持续调用 getBase() 反查底座(TurretHead.java:226)。
每 tick 的运行顺序(TurretHead.java:225-265):
setSide()记录贴附朝向,getBase()取得底座引用- 若
base == null || base.getBaseTier() < this.turretTier→ 自毁(this.getWorldObj().func_147480_a(...)) - 若底座开启攻击玩家且炮塔激活 →
TurretHeadUtil.warnPlayers对附近玩家广播警告 TurretHeadUtil.updateSolarPanelAddon(base)结算太阳能附加件发电concealmentChecks()处理伪装附加件if (!base.isActive()) return;—— 底座未激活时不索敌- 无目标时按
GlobalTargetingParameters/If a turret does not have a target, how many ticks should it wait before looking again?(默认 10 tick)节流索敌
逐种行为
以下描述取自模组自带的 assets/openmodularturrets/wiki/en_US/block/*.txt 与对应 TileEntity 源码。
| 炮塔 | 等级 | 弹药类型(turret.ammo.*) |
投射物 | 行为 |
|---|---|---|---|---|
| Disposable Item Turret | 1 | Any Block/Item(0) |
DisposableTurretProjectile |
首发炮塔,能发射任何方块/物品;慢、伤害低、最便宜 |
| Potato Cannon Turret | 1 | Potato(6) |
DisposableTurretProjectile |
射程/伤害/精度均优于 Disposable,但只能发射土豆 |
| Gun Turret | 2 | Bullet(1) |
BulletProjectile |
高射速、低单发伤害,使用可合成子弹 |
| Incendiary Turret | 2 | Blazing Clay(7) |
BlazingClayProjectile |
发射燃烧黏土弹,在 AOE 内点燃实体;群控强但单体伤害极低 |
| Grenade Launcher Turret | 3 | Grenade(2) |
GrenadeProjectile |
抛射小型炸弹,爆炸对周围造成伤害;不破坏方块 |
| Relativistic Turret | 3 | None(4) |
无 | 削弱并减速射程内所有敌人(Potion.moveSlowdown + Potion.weakness,各 200 tick、等级 5) |
| Rocket Launcher Turret | 4 | Homing Rocket(3) |
RocketProjectile |
精确追踪式爆炸投射物;不破坏方块 |
| Teleporter Turret | 4 | None(4) |
无 | 把射程内符合条件的目标传送到自己上方的方块;最小射程 3 格 |
| Laser Turret | 5 | None(4) |
LaserProjectile |
高射速、长射程、极高精度,不使用弹药 |
| Rail Gun Turret | 5 | Ferro-Magnetic Slugs(5) |
FerroSlugProjectile |
电磁弹射器,100% 穿甲 |
等级来源:每个 TileEntity 构造函数中的 this.turretTier = N;(DisposableItemTurretTileEntity.java:16、PotatoCannonTurretTileEntity.java:17、GunTurretTileEntity.java:17、IncendiaryTurretTileEntity.java:17、GrenadeLauncherTurretTileEntity.java:17、RelativisticTurretTileEntity.java:22、RocketTurretTileEntity.java:17、TeleporterTurretTileEntity.java:21、LaserTurretTileEntity.java:16、RailGunTurretTileEntity.java:17),与模组自带 wiki 中的 Tier 标注逐一吻合。
穿甲来源:FerroSlugProjectile.java:78,86 使用 ArmorBypassDamageSource("ferroslug");GrenadeProjectile.java:59,68 对 10% 伤害也使用 ArmorBypassDamageSource("grenade")。
爆炸来源:GrenadeProjectile.onEntityUpdate(GrenadeProjectile.java:30-42)在 ticksExisted >= 50 时 createExplosion(..., 0.1F, true) 并对 ±3 格 的 AxisAlignedBB 内的 EntityLivingBase 结算伤害;RocketProjectile.java:95-100 同样是 0.1F 爆炸力、±5 格 AABB。两者的爆炸力都只有 0.1F,所以实际不破坏方块 —— 与自带 wiki 的说法一致。
减速/虚弱来源:RelativisticTurretTileEntity.java:111-112。
追踪火箭来源:RocketProjectile.onEntityUpdate(RocketProjectile.java:47-59)在 ConfigHandler.canRocketsHome 为真时每 tick 重新朝目标插值加速(speed 每 tick +0.06),并设 ticksExisted >= 100 自动消失;为假时 ticksExisted <= 2 的命中被忽略以避免自爆。
数值
全部数值来自 ConfigHandler.init() 的 TurretSetting 构造(默认值,非硬编码常量;每种炮塔一个独立配置分类)。RF = 每发耗能,Damage 单位为半心(half-heart)。
| 炮塔 | 配置分类 | 射程 (格) | 射击间隔 (tick) | 伤害 (半心) | 精度 (0–100) | 每发耗能 (RF) | 默认启用 |
|---|---|---|---|---|---|---|---|
| Disposable Item Turret | TurretDisposable |
10 | 25 | 2 | 50 | 2 | 是 |
| Potato Cannon Turret | TurretPotatoCannon |
15 | 35 | 3 | 30 | 10 | 是 |
| Gun Turret | TurretMachineGun |
18 | 8 | 2 | 30 | 100 | 是 |
| Incendiary Turret | TurretIncendiary |
12 | 25 | 2 | 30 | 250 | 是 |
| Grenade Launcher Turret | TurretGrenade |
20 | 40 | 8 | 30 | 3 000 | 是 |
| Relativistic Turret | TurretRelativistic |
20 | 100 | 0 | 0 | 5 000 | 是 |
| Rocket Launcher Turret | TurretRocket |
30 | 30 | 10 | 10 | 5 000 | 是 |
| Teleporter Turret | TurretTeleporter |
20 | 100 | 0 | 0 | 15 000 | 是 |
| Laser Turret | TurretLaser |
25 | 10 | 2 | 10 | 10 000 | 是 |
| Rail Gun Turret | TurretRailgun |
30 | 100 | 25 | 0 | 25 000 | 是 |
来源:ConfigHandler.java:96-224(Disposable 96-107、PotatoCannon 109-120、Gun 122-133、Incendiary 135-146、Grenade 148-159、Relativistic 161-172、Rocket 174-185、Teleporter 187-198、Laser 200-211、Railgun 213-224)。
精度字段的配置说明原文(各分类重复):“Value between 0 - 100, where 0 will miss 0% of the time over a distance of 10 blocks, subject to standard deviation.”
投射物 AOE 半径
| 投射物 | AOE 半径 | 爆炸力 | 破坏方块 |
|---|---|---|---|
GrenadeProjectile |
3 格 | 0.1F | 否 |
RocketProjectile |
5 格 | 0.1F | 否 |
交互
| 触发 | 行为 |
|---|---|
| 放置 | 仅当 6 个正交邻格之一是 TurretBase 时成功(canPlaceBlockAt);模组自带 wiki 提示放置时按住 Shift |
| 破坏 | 不可破坏(构造时 setBlockUnbreakable());底座消失时随 updateEntity 的等级检查一并自毁 |
| 掉落 | 无(setBlockUnbreakable 阻止破坏,故无 dropsNothing 之类分支) |
| 玩家接近 | 底座开启「攻击玩家」时,TurretHeadUtil.warnPlayers 按 miscellaneous/warningDistance(默认 5)提前警告,聊天栏文本 status.warning = “You are entering a turret-protected area. Continue at your own risk.” |
| 瞄准 | 每 tick updateRotationAnimation 驱动渲染朝向;客户端每 5 tick markBlockForUpdate |
| 底座损坏/移除 | 下一 tick 检测到 base == null 即自毁 |
注意:炮塔头没有自己的 GUI。弹药、升级件、附加件全部在底座 GUI 中管理(见 Turret Base GUI)。
合成配方
10 种炮塔的配方由 6 套配方处理器之一提供(VanillaRecipeHandler / ThermalExpansionRecipeHandler / EnderIORecipeHandler / MekanismRecipeHandler),按 miscellaneous/Which recipes should we do? 选择,详见 配方系统。
其中两种 Tier 1 炮塔有独立于处理器的额外注册,且受各自配置开关保护(RecipeHandler.java:128-160):
Disposable Item Turret(RecipeHandler.java:129-142,受 TurretDisposable/Enabled 保护)
A
CBC
CDC
| 字符 | 物品 |
|---|---|
A |
Barrel (Tier 1) |
B |
Chamber (Tier 1) |
C |
圆石 |
D |
红石粉 |
Potato Cannon Turret(RecipeHandler.java:146-159,受 TurretPotatoCannon/Enabled 保护)
CAC
CAC
DBD
| 字符 | 物品 |
|---|---|
A |
Barrel (Tier 1) |
B |
Chamber (Tier 1) |
C |
圆石 |
D |
红石粉 |
相关条目
- Turret Base - 炮塔头必须依附的底座,提供 RF 与槽位
- Turret Head TileEntity - 瞄准、索敌、升级结算的逐 tick 逻辑
- Projectiles - 7 种投射物类与 2 种伤害源
- Upgrades - 提升射程/射速/精度/效率/散射的升级件
- Ammo - 各炮塔消耗的弹药种类