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):

  1. setSide() 记录贴附朝向,getBase() 取得底座引用
  2. 若 base == null || base.getBaseTier() < this.turretTier → 自毁(this.getWorldObj().func_147480_a(...))
  3. 若底座开启攻击玩家且炮塔激活 → TurretHeadUtil.warnPlayers 对附近玩家广播警告
  4. TurretHeadUtil.updateSolarPanelAddon(base) 结算太阳能附加件发电
  5. concealmentChecks() 处理伪装附加件
  6. if (!base.isActive()) return; —— 底座未激活时不索敌
  7. 无目标时按 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 - 各炮塔消耗的弹药种类