Turret Base

基本信息

属性 值
注册名 openmodularturrets:baseTierWood / :baseTierOneBlock / :baseTierTwoBlock / :baseTierThreeBlock / :baseTierFourBlock
数量 5 个等级(Tier 1 – Tier 5)
块类 openmodularturrets.blocks.turretbases.BlockTurretBaseTierOne … BlockTurretBaseTierFive,共同父类 BlockAbstractTurretBase
TileEntity openmodularturrets.tileentity.turretbase.TurretBaseTierOneTileEntity … TurretBaseTierFiveTileEntity
材质 Material.rock(BlockAbstractTurretBase.java:30)
脚步声 Block.soundTypeStone(BlockAbstractTurretBase.java:35)
创造标签 ModularTurrets.modularTurretsTab(BlockAbstractTurretBase.java:31)
碰撞箱 完整方块
破坏性 关闭 miscellaneous/Are turrets/turret bases breakable by anyone? 时调用 setBlockUnbreakable()(BlockAbstractTurretBase.java:32-34)

功能

炮塔底座是本模组所有炮塔的载体。炮塔头本身不能独立存在,必须贴附在底座上 —— BlockAbstractTurretHead.canPlaceBlockAt(BlockAbstractTurretHead.java:39-46)要求 6 个正交相邻格中至少一个是 TurretBase,因此底座天然支持「六面挂炮塔」的布局。

底座负责三件事:

  1. 储能:TurretBase 实现 CoFH 的 IEnergyHandler,内部持有一个 EnergyStorage(TurretBase.java:22,67,89-92)
  2. 供弹 / 装升级 / 装附加件:TurretBase 实现 ISidedInventory,可被任意物品管道访问
  3. 归属与权限:记录 owner(UUID 字符串)、ownerName 与 trustedPlayers 列表,控制谁能开 GUI、能否改设置

底座还负责高级功能开关:反重(inverted)、红石输入(redstone)、多目标(multiTargeting)、潜行视角偏移(yAxisDetect)、以及三个独立的目标类别开关(attacksMobs / attacksNeutrals / attacksPlayers)。

等级规则

底座等级只向上兼容:TurretHead.java:240 判定 base.getBaseTier() < this.turretTier 时直接自毁炮塔。Tier N 底座可挂载 Tier ≤ N 的全部炮塔头。

伪装(camo)

BlockAbstractTurretBase.onBlockActivated(BlockAbstractTurretBase.java:39-71)实现了伪装逻辑,受 miscellaneous/Should turret bases be camouflage-able with normal blocks? 控制(默认 true):

  • 潜行 + 空手右键 → 清除伪装(camoStack = null)
  • 非潜行 + 手持 ItemBlock 且该方块 isNormalCube() && isOpaqueCube() 且不是炮塔底座本身 → 把该方块设为伪装外观
  • 两种操作都要求 player.getUniqueID().toString().equals(base.getOwner()),否则聊天栏提示 status.ownership(“You do not own this turret, or you don’t have permission to do that.”)

数值

等级 内部类 最大储能 (RF) 最大 IO (RF/t) 爆炸抗性 物品栏格数 附加件槽 升级槽 独立 GUI ID
Tier 1 TurretBaseTierOneTileEntity 500 50 10 9 无 无 1
Tier 2 TurretBaseTierTwoTileEntity 50 000 100 10 12 2 1 2
Tier 3 TurretBaseTierThreeTileEntity 150 000 500 10 12 2 1 3
Tier 4 TurretBaseTierFourTileEntity 500 000 1 500 10 12 2 1 4
Tier 5 TurretBaseTierFiveTileEntity 10 000 000 5 000 10 13 2 2 5

数据来源:储能/IO/抗性读自 ConfigHandler.java:76-94(TurretBaseTierOne..FiveMaxCharge / MaxIo / BlastResistance,全部 TurretBaseTierX 分类下);格数读自各 TurretBaseTierXTileEntity.getSizeInventory()(9 / 12 / 12 / 12 / 13);槽位分布读自 TurretBaseTierXContainer(Tier 1 只有 x + y * 3 网格;Tier 2/3/4 追加 2 个 AddonSlot + 1 个 UpgradeSlot;Tier 5 追加 2 个 AddonSlot + 2 个 UpgradeSlot);GUI ID 读自 GuiHandler.java 的 case 1–case 5。

爆炸抗性说明:五个等级的 BlastResistance 配置默认值均为 10,源码以 this.setResistance(ConfigHandler.getBaseTierXBlastResistance()) 传入 int(BlockTurretBaseTierOne.java:19 等 5 处),在 1.7.10 的 Block.setResistance(float) 签名下被隐式加宽为 10.0F。这是可配置值,不是硬编码常量。

槽位编号(以 Tier 5 容器 TurretBaseTierFiveContainer.java:25-34 为准,其余等级同构):

槽位号 类型 数量
0 – 8 3×3 供弹区(x + y * 3) 9
9 – 10 AddonSlot 附加件 2
11 – 12 UpgradeSlot 升级件 2

管道访问面:TurretBase.getAccessibleSlotsFromSide(int side)(TurretBase.java:699-701)对所有侧面一律返回 {0,1,2,3,4,5,6,7,8},即只有 3×3 供弹区可被自动化访问,附加件与升级槽不行。canExtractItem 无条件返回 true。

EU 兼容:TurretBase.injectEnergyUnits 与 inputEnergyFrom(TurretBase.java:498-510)在 storageEU < 40000 * getBaseTier() 时拒绝 IC2 注入,即每级底座的 EU 容量上限为 40000 × 等级。

扩容:getMaxEnergyStorageWithExtenders()(TurretBase.java:157-178)在每 tick 的 updateEntity 中重算容量,把相邻的 Base Power Expander 容量加到基础值上(TurretHeadUtil.getPowerExpanderTotalExtraCapacity)。

交互

触发 行为
右键(空手,非潜行) 打开该等级的炮塔底座 GUI(GUI ID 1–5)。需 TrustedPlayer.canOpenGUI 为真,否则拒绝
右键(潜行 + 空手) 清除伪装,需为底座主人
右键(潜行 + 手持方块) 设置伪装外观,需为底座主人
右键(手持 ItemBlock,非潜行) 设置伪装外观,需为底座主人
红石信号 setInverted 决定红石高电平时炮塔是开火还是停火(TurretBase.setInverted:active = redstone ^ inverted,默认 inverted = true)
比较器 / 管道 仅 3×3 供弹区可被 ISidedInventory 侧访问
OpenComputers 外设 每个等级实现 SimpleComponent,组件名 tierOneTurretBase … tierFiveTurretBase(@Optional.Method(modid = "OpenComputers"))
ComputerCraft 外设 TurretBase 实现 IPeripheral,由 ModCompatibility.registerCCCompat 注册 CCPeripheralProvider
命令 /omtchangeowner 改写指定坐标底座的主人

合成配方

Tier 1 底座为固定配方(RecipeHandler.java:85-96,不随已加载模组变化):

ABA
BCB
ABA
字符 物品
A 圆石
B 木板(物品字典 plankWood)
C Sensor (Tier 1)

Tier 2 – Tier 5 底座由 6 套配方处理器之一提供,取决于 miscellaneous/Which recipes should we do? 配置 —— 详见 配方系统。

相关条目