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

相关条目