TileEntityAirLockController(气闸控制器)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Air Lock Controller GalacticraftCore.java:736
注册类 micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController 同上
关联方块 GCBlocks.airLockFrame = new BlockAirLockFrame("airLockFrame") core/blocks/GCBlocks.java:107
方块→TE 分派 metadata >= METADATA_AIR_LOCK_CONTROLLER(=1)时返回本类 core/blocks/BlockAirLockFrame.java:223-224、:34
父类 TileEntityAirLock(→ TileEntityAdvanced) core/tile/TileEntityAirLockController.java:18
实现接口 仅 IPacketReceiver(父类带入) core/tile/TileEntityAdvanced.java:23
所属 modid GalacticraftCore core/GalacticraftCore.java:160-161、core/Constants.java:7
槽位数 无(不实现 IInventory,无 ItemStack[]) core/tile/TileEntityAirLockController.java:18-53

槽位与字段

没有任何槽位。它是纯逻辑 TE,配置全靠 GUI 点击写入内存/NBT,字段清单(:20-53):

字段 类型 语义 源码
redstoneActivation boolean 是否用红石触发 :20-21
playerDistanceActivation boolean 是否用玩家距离触发 :23-24
playerDistanceSelection int 距离档位 :26-27
playerNameMatches / playerToOpenFor boolean / String 是否限定玩家名 :29-33
invertSelection boolean 取反输出 :35-36
horizontalModeEnabled boolean 水平气闸模式 :38-39
ownerName / active String / boolean 主人名 / 当前是否密封 :43-47
otherAirLocks ArrayList<TileEntityAirLock> 协议算出的气闸框架集合 :50-51
protocol / lastProtocol AirLockProtocol 几何计算结果 :52-53

NBT 键名在 readFromNBT / writeToNBT(:241-253 / :256-268)里是驼峰大写形式 (OwnerName、RedstoneActivation、PlayerDistanceSelection …)。

tick / 能量 / 网络

逻辑周期 = 每 10 tick 一次:updateEntity() 的实际动作全在 if (this.ticks % 10 == 0) 里 (core/tile/TileEntityAirLockController.java:117)。

触发判定(服务端,:63-111)

条件 行为 源码
redstoneActivation active = !isBlockIndirectlyGettingPowered(...)(低电平触发) :66-68
playerDistanceActivation 用 AABB 找玩家,找不到才 active = true :70-107
距离档位 0→1.0、1→2.0、2→5.0、3→10.0 格 :73-86
invertSelection 最后统一取反 :109-111

密封 / 解封

sealAirLock()(:146-189)与 unsealAirLock()(:191-238)在协议框内 minX..maxX / minY..maxY / minZ..maxZ 之间,把空气换成 GCBlocks.airLockSeal (:163、:174、:184),解封时反向换成空气(:212、:223、:233)。 ⚠ 只填空气,不覆盖实心方块(:162、:173、:183 都先判 isAir)。 播放音效 player.openairlock(:152)/ player.closeairlock(:201)。

⚠ horizontalModeEnabled 切换时直接 unsealAirLock()(:118-119), 即改模式会先破封,必须重新触发才会再封上。

网络

项目 值 来源
封包距离 20.0 core/tile/TileEntityAirLockController.java:271-273
封包冷却 3 tick core/tile/TileEntityAirLockController.java:276-278
是否同步 true(8 个 @NetworkedField 字段) core/tile/TileEntityAirLockController.java:281-283、:20-47
能量 无 core/tile/TileEntityAirLockController.java:18

⚠ otherAirLocks / lastOtherAirLocks / lastActive / lastHorizontalModeEnabled 不是 @NetworkedField,不参与封包同步。

GUI

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiAirLockController(core/client/gui/container/GuiAirLockController.java:41) 无 Container(源码 core/inventory/ 下没有气闸容器类) Gui :222

相关条目