TileEntityLandingPadSingle(登陆台·单块)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Landing Pad |
GalacticraftCore.java:714 |
| 所属 modid | GalacticraftCore |
core/Constants.java:7,@Mod 见 GalacticraftCore.java:160-161 |
| 关联方块 | micdoodle8.mods.galacticraft.core.blocks.BlockLandingPad |
core/blocks/BlockLandingPad.java:100-111 |
| 触发条件 | metadata 0;且 world.isRemote 时返回 null(只在服务端建 TE) |
core/blocks/BlockLandingPad.java:102-108 |
| 父类 | net.minecraft.tileentity.TileEntity |
core/tile/TileEntityLandingPadSingle.java:11 |
| 实现接口 | 无(类声明 :11 不带 implements) |
core/tile/TileEntityLandingPadSingle.java:11 |
| 槽位数 | 无(不实现 IInventory,源码中不存在 getSizeInventory()) |
core/tile/TileEntityLandingPadSingle.java:1-46 |
⚠ 它没有父类 TileEntityMulti。GC 的 5 大多方块(NASA 工作台 / 空间站 / 低温仓 /
燃料装填台 / 登陆台)都走 TileEntityMulti 那套「主块 + 假方块」框架,
唯独 TileEntityLandingPadSingle 不是其中一员——它继承的是原版 TileEntity
(对比 TileEntityLandingPad extends TileEntityMulti,core/tile/TileEntityLandingPad.java:31-32)。
⚠ 注册名有两条,都是本类相关:GalacticraftCore.java:714 注册单块为
Landing Pad,:715 把多方块版 TileEntityLandingPad 注册为 Landing Pad Full。
全文逻辑(46 行,只有 1 个方法)
updateEntity(core/tile/TileEntityLandingPadSingle.java:13-45)是唯一的方法,
逻辑是「3×3 凑齐就自动合并成完整登陆台」:
| 步骤 | 条件 / 动作 | 来源 |
|---|---|---|
| 1 | 仅服务端执行(!this.worldObj.isRemote) |
core/tile/TileEntityLandingPadSingle.java:15 |
| 2 | 扫描同高度 3×3 邻域(x-1..x+1、z-1..z+1,y 不变) |
core/tile/TileEntityLandingPadSingle.java:18-26 |
| 3 | 收集所有 instanceof TileEntityLandingPadSingle 的 TE |
core/tile/TileEntityLandingPadSingle.java:22-24 |
| 4 | 数量等于 9 才继续(size() == 9) |
core/tile/TileEntityLandingPadSingle.java:28 |
| 5 | 把这 9 个 TE 全部 invalidate() 并替换为 Blocks.air(flag 3) |
core/tile/TileEntityLandingPadSingle.java:29-31 |
| 6 | 把中心那一格换成 GCBlocks.landingPadFull(flag 3) |
core/tile/TileEntityLandingPadSingle.java:36 |
| 7 | 取新的 TileEntityLandingPad,非空则调 onCreate(new BlockVec3(...)) |
core/tile/TileEntityLandingPadSingle.java:37-42 |
⚠ 只替换中心格,不是整个 3×3。另外 8 格变成空气。
TileEntityLandingPad.onCreate 之后会自行按 TileEntityMulti 框架补出结构。
⚠ 合并条件是精确的 9,不是 >= 9。若 3×3 范围内存在多于 9 个(比如叠了别的
单块 TE),条件不成立,永远不合。
⚠ 本类会无限自检:每 tick 都跑一遍上述扫描,没有任何冷却或「已检查过」标记。
能量 / 物品 / GUI
| 项目 | 情况 | 依据 |
|---|---|---|
| 物品槽 | 无 | 类声明 core/tile/TileEntityLandingPadSingle.java:11 不带 implements |
| 能量存储 | 无(不继承 EnergyStorageTile) |
同上 |
| tick 的电力逻辑 | 无(updateEntity 内无任何 storage 引用) |
core/tile/TileEntityLandingPadSingle.java:13-45 |
| GUI / Container | 无 | 源码中无 openGui,core/client/gui/GuiHandler.java 无对应分支 |
| 网络封包 | 无(不继承 TileEntityAdvanced) |
父类是原版 TileEntity,见 core/tile/TileEntityLandingPadSingle.java:11 |
⚠ 本类不写任何 NBT——没有覆写 readFromNBT / writeToNBT,
所以单块状态完全不持久化。放置/破坏一整个周期内它只是个临时合并器。