Turret Base TileEntity
基本信息
| 属性 | 值 |
|---|---|
| 抽象基类 | openmodularturrets.tileentity.turretbase.TurretBase |
| 等级子类 | TurretBaseTierOneTileEntity … TurretBaseTierFiveTileEntity |
| 注册名 | turretbase、turretWoodBase、turretBaseOne、turretBaseTwo、turretBaseThree、turretBaseFour |
| 注册数量 | 6 个类(TileEntityHandler.java 中 TurretBase + 5 个等级类) |
| 实现接口 | IEnergyHandler(CoFH)、SimpleComponent(OpenComputers)、ISidedInventory、IEssentiaTransport、IAspectContainer(Thaumcraft)、IPeripheral(ComputerCraft)、IEnergyConnected(GregTech) |
| 父类 | openmodularturrets.tileentity.TileEntityContainer |
@Optional.InterfaceList(TurretBase.java:47-53):TurretBase的 5 个跨模组接口全部标注为可选 ——IPeripheral(ComputerCraft)、SimpleComponent(OpenComputers)、IAspectContainer与IEssentiaTransport(Thaumcraft)、IEnergyConnected(GregTech)。源码注释写明:“don’t change to gregtech_nh as the api also exists in gt6”。IEnergyConnected来自gregtech.api.interfaces.tileentity(TurretBase.java:29),不是 IC2 的接口。
注册名与实际用途错位(已核实):
TileEntityHandler把TurretBaseTierOneTileEntity注册为"turretWoodBase",把 Tier 2 – 5 依次注册为"turretBaseOne"…"turretBaseFour"(TileEntityHandler.java:37-42),整体比方块等级错位一位。TurretBase自身另注册为"turretbase"(:36)。这些 ID 只用于存档识别与调试,不可作为方块名的对照。
功能
TurretBase 是本模组的核心状态机,一个方块同时承担能源容器 + 物品容器 + 权限主体 + 目标策略四重角色。
能源
内部持有 private final EnergyStorage storage(TurretBase.java:67),构造时以 (MaxEnergyStorage, MaxIO) 初始化(:89-92)。
| 方向 | 行为 |
|---|---|
| 输入 | receiveEnergy 直接转发给 storage.receiveEnergy(:650-652),无额外限制 |
| 输出 | extractEnergy 无条件 return 0(:654-657)—— 底座只进电不出电 |
| IC2 EU 注入 | injectEnergyUnits / inputEnergyFrom 在 storageEU < 40000 * getBaseTier() 时拒绝(:498-510)—— 这是手写的 IC2 桥接,与 IEnergyConnected(GregTech 接口)无关 |
| 容量刷新 | 每 tick updateEntity 调 storage.setCapacity(getMaxEnergyStorageWithExtenders()),把相邻动力扩展器的容量计入(:532-540) |
物品栏
getSizeInventory() 由 5 个子类分别覆写为 9 / 12 / 12 / 12 / 13。TurretBase 构造时 this.inv = new ItemStack[this.getSizeInventory()](:97)。
isItemValidForSlot无条件return true(:679-681)—— 底座本身不校验物品类型,类型过滤在 GUI 的AddonSlot/UpgradeSlot层getAccessibleSlotsFromSide对所有侧面只返回{0..8}(:699-701),附加件/升级槽对自动化不可见canExtractItem无条件return true(:706-708)setInventorySlotContents会按getInventoryStackLimit()截断堆叠(:444-450)
权限模型
| 字段 | 含义 |
|---|---|
owner |
主人 UUID 字符串(getOwner / setOwner,:617-623) |
ownerName |
主人名 |
trustedPlayers |
受信任玩家列表(List<TrustedPlayer>) |
trustedPlayerIndex |
GUI 列表的当前游标(:58) |
waitForTrustedPlayer |
离线模式兼容标志(:86) |
addTrustedPlayer(String) / removeTrustedPlayer(String) / getTrustedPlayers() / getTrustedPlayer(String) / getTrustedPlayer(UUID) / setTrustedPlayers(List) 是完整的增删查接口(:179-245)。TrustedPlayer 带 canOpenGUI 权限位,BlockAbstractTurretBase.onBlockActivated 据此决定是否 player.openGui(...)(BlockAbstractTurretBase.java:76-80)。
OP 覆盖:ConfigHandler.canOPAccessTurrets(miscellaneous/Can OPs access all turrets?,默认 false,ConfigHandler.java:305)控制 OP 是否能越过权限。
目标策略
三个独立布尔开关(attacksMobs / attacksNeutrals / attacksPlayers)与三个全局配置 GlobalTargetingParameters/Can turrets attack mobs|neutrals|players?(默认全 true,ConfigHandler.java:297-303)共同决定攻击目标。构造函数默认 attacksMobs = true、attacksNeutrals = true、attacksPlayers = false(TurretBase.java:93-95)—— 即新放置的底座默认不攻击玩家。
yAxisDetect(潜行视角偏移)默认 2(:90),setyAxisDetect 会钳制到 [0, 9](:688-696)。
active 由 setInverted 推导:active = redstone ^ inverted,默认 inverted = true、active = true(:98-99)。
killCount 记录本底座累计击杀(:87),由 onKill(Entity) 递增(:103-105)。
数值
| 数值名 | 值 |
|---|---|
默认 attacksMobs |
true |
默认 attacksNeutrals |
true |
默认 attacksPlayers |
false |
默认 active |
true |
默认 inverted |
true |
默认 yAxisDetect |
2(范围 0 – 9) |
| IC2 EU 注入上限 | 40000 × 等级 |
| 可提取能量 | 0(恒定) |
| 自动化可访问槽位 | 0 – 8(仅 3×3 供弹区) |
交互
| 触发 | 行为 |
|---|---|
| GUI 打开 | player.openGui(ModularTurrets.instance, base.getBaseTier(), world, x, y, z),GUI ID 即底座等级(1 – 5) |
| OpenComputers | getComponentName() 返回 tierOneTurretBase … tierFiveTurretBase |
| ComputerCraft | IPeripheral 由 CCPeripheralProvider 提供 |
| 存档 | writeToNBT / readFromNBT(:296 / :346)保存物品栏、伪装栈与权限列表 |
| 区块卸载 | onChunkUnload(:153)清理 wasAddedToEnergyNet |
相关条目
- Turret Base - 对应方块
- Turret Base GUI - 配置界面(GUI ID 6)
- CoFH Energy -
EnergyStorage/IEnergyHandler依赖