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,因此底座天然支持「六面挂炮塔」的布局。
底座负责三件事:
- 储能:
TurretBase实现 CoFH 的IEnergyHandler,内部持有一个EnergyStorage(TurretBase.java:22,67,89-92) - 供弹 / 装升级 / 装附加件:
TurretBase实现ISidedInventory,可被任意物品管道访问 - 归属与权限:记录
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? 配置 —— 详见 配方系统。
相关条目
- Turret Base TileEntity - 底座的储能、权限与网络封包实现
- Turret Heads - 挂在底座上的 10 种炮塔头
- Base Power Expander - 给底座追加 RF 容量的扩展方块
- Turret Base GUI - 供弹区 / 升级槽 / 附加件槽的界面布局