Turret Head TileEntity
基本信息
| 属性 | 值 |
|---|---|
| 抽象基类 | openmodularturrets.tileentity.turrets.TurretHead |
| 等级子类 | 10 个,见下表 |
| 注册数量 | 10 个(TileEntityHandler.java:37-42 与 :48-51) |
| 辅助类 | openmodularturrets.tileentity.turrets.InvisibleTurretHelperEntity(索敌辅助实体) |
| 父类 | openmodularturrets.tileentity.TileEntityOMT |
注意:10 种炮塔头的 TileEntity 全部无条件注册,与方块不同 —— 方块的注册受配置开关保护(见 Turret Heads),但
TileEntityHandler里这 10 行registerTileEntity不在任何if中。关闭某炮塔时对应方块不注册,其 TileEntity 注册成为无用条目,但不会报错。
注册名对照
| TileEntity 类 | registerTileEntity 名称 |
|---|---|
TurretBase |
turretbase |
TurretBaseTierOneTileEntity |
turretWoodBase |
DisposableItemTurretTileEntity |
disposableItemTurret |
PotatoCannonTurretTileEntity |
potatoCannonTurret |
RocketTurretTileEntity |
rocketTurret |
GunTurretTileEntity |
machineGunTurret |
GrenadeLauncherTurretTileEntity |
grenadeTurret |
LaserTurretTileEntity |
laserTurret |
RailGunTurretTileEntity |
railGunTurret |
IncendiaryTurretTileEntity |
incendiaryTurret |
RelativisticTurretTileEntity |
relativisticTurret |
TeleporterTurretTileEntity |
teleporterTurret |
来源:TileEntityHandler.java:35-51(曲柄 LeverTileEntity 在 :43)。
功能
TurretHead.updateEntity(TurretHead.java:225-265)是所有炮塔共用的逐 tick 骨架:
setSide()— 记录贴附在底座的哪一面this.base = getBase()(:226)— 反查底座- 客户端分支:
updateRotationAnimation()后立即返回 - 每 5 tick
markBlockForUpdate同步朝向 - 存活检查:
if (base == null || base.getBaseTier() < this.turretTier)→this.getWorldObj().func_147480_a(xCoord, yCoord, zCoord, true)自毁(:240-241) - 若底座开启攻击玩家且炮塔激活 →
TurretHeadUtil.warnPlayers(...)广播警告(:243-250) TurretHeadUtil.updateSolarPanelAddon(base)结算太阳能附加件(:252)concealmentChecks()处理伪装附加件(:254)if (!base.isActive()) return;(:257)- 索敌节流:无目标时按
ConfigHandler.getTurretTargetSearchTicks()累加targetingTicks后提前返回(:262-265)
依赖注入:TurretHead 不直接读配置数值,而是通过 TurretHeadUtil 的静态方法取升级加成(getRangeUpgrades / getScattershotUpgrades / getAccuraccyUpgrades / getEfficiencyUpgrades / getFireRateUpgrades),再与 炮塔配置 的基线值组合。
投射物工厂:每个子类覆写一个返回投射物的工厂方法,例如 DisposableItemTurretTileEntity.java:56 与 PotatoCannonTurretTileEntity.java:57 都 return new DisposableTurretProjectile(world, ammo, this.getBase()),RailGunTurretTileEntity.java:57 返回 new FerroSlugProjectile(world, ammo, this.getBase())。
Teleporter Turret 额外覆写了存活检查(TeleporterTurretTileEntity.java:44),Relativistic Turret 亦然(RelativisticTurretTileEntity.java:45)—— 两者的实现与基类 TurretHead.java:240 重复。
数值
| 数值名 | 值 |
|---|---|
turretTier 取值 |
1 – 5(各子类构造函数内硬编码,非配置) |
| 朝向同步间隔 | 5 tick |
| 索敌节流间隔 | GlobalTargetingParameters/If a turret does not have a target, how many ticks should it wait before looking again?,默认 10 tick |
| 火箭存活上限 | 100 tick(RocketProjectile.onEntityUpdate) |
| Relativistic 施加的负面效果 | Potion.moveSlowdown 200 tick 等级 5 + Potion.weakness 200 tick 等级 5(RelativisticTurretTileEntity.java:111-112) |
| Teleporter 最小射程 | 3 格(取自模组自带 wiki teleporterTurret.txt) |
Teleporter 最小射程 3 格只由模组自带 wiki 文本佐证(
assets/openmodularturrets/wiki/en_US/block/teleporterTurret.txt:“Note that this turret has a minimum range of 3 blocks.”)。TeleporterTurretTileEntity.java中没有对应的3字面量或钳制逻辑 —— 实际生效的射程仍来自配置TurretTeleporter/Range(默认 20)。此条以 wiki 原文标注,不视为已从代码核实。
交互
| 触发 | 行为 |
|---|---|
| 无 GUI | 炮塔头的全部配置在底座 GUI(ID 6)中完成 |
| 底座移除或等级不足 | 下一 tick 自毁 |
| 玩家接近 | 触发 warnPlayers 警告(受底座开关与 GlobalTargetingParameters/Can turrets attack players? 双重控制) |
相关条目
- Turret Heads - 对应方块与配置数值
- Turret Base TileEntity - 炮塔头的宿主
- Projectiles - 各炮塔发射的实体