TileEntityMinerBaseSingle(采矿机基座·单块)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Astro Miner Base Builder |
planets/asteroids/AsteroidsModule.java:322 |
| 所属 modid | GalacticraftMars |
core/Constants.java:8,@Mod 见 planets/GalacticraftPlanets.java:37-38 |
| 注册方法入口 | AsteroidsModule.registerTileEntities(),由 planets/asteroids/AsteroidsModule.java:270 调用 |
planets/asteroids/AsteroidsModule.java:316-324 |
| 关联方块 | AsteroidBlocks.blockMinerBase = new BlockMinerBase("minerBase") |
planets/asteroids/blocks/AsteroidBlocks.java:46 |
| 方块→TE 分派 | 无条件 new TileEntityMinerBaseSingle() |
planets/asteroids/blocks/BlockMinerBase.java:72-74 |
| 父类 | net.minecraft.tileentity.TileEntity(原版) |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:9 |
| 实现接口 | 无(类声明无 implements) |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:9 |
| 槽位数 | 无(不实现 IInventory,全类无 getSizeInventory()) |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:1-50 |
⚠ 本类不是机器,是「建造器」占位方块——它继承原版 TileEntity,
不走 GC 的 TileEntityAdvanced / 能量体系,没有 GUI、没有容器、没有 NBT 持久化。
槽位与字段
无槽位、无任何字段声明(:9-49 只有 updateEntity 一个方法)。
类总长 50 行,updateEntity 占 :11-49。
能量
无。 直接继承原版 TileEntity(:9),不含 EnergyStorageTile
——本类没有容量 / maxReceive / maxExtract。
tick / 特殊机制(本篇核心)
updateEntity(:12-48)只做一件事:检测 2×2×2 是否凑齐,凑齐就自组装成
AsteroidBlocks.minerBaseFull(即带完整功能的采矿机基座)。
| 步骤 | 行为 | 源码 |
|---|---|---|
| 触发条件 | 仅服务端(!worldObj.isRemote) |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:13 |
| 扫描范围 | 以自身为角的 2×2×2(x、y、z 各 coord .. coord+1) |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:16-27 |
| 提前退出 | 任何一格不是 TileEntityMinerBaseSingle 就 break SEARCH |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:21-23 |
| 判定 | attachedBaseBlocks.size() == 8 |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:29 |
| 自组装 | 8 格全部 invalidate() 后换成 AsteroidBlocks.minerBaseFull,flag = 3 |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:30-34 |
| 选主块 | 换成 TileEntityMinerBase 后,用第一个转换块的坐标(即本方块)调 setMainBlockPos |
planets/asteroids/tile/TileEntityMinerBaseSingle.java:36-46 |
⚠ 转换是「一次性」且不可逆的——updateEntity 每 tick 都跑,但组装后
8 格的 TE 全变成 TileEntityMinerBase,下次扫描第一个格子就不是
TileEntityMinerBaseSingle,break SEARCH 立刻退出,不会重复触发。
⚠ 没有任何失败提示:只摆 1 块或 7 块时,这个方块静默地什么都不做,
既不掉落也不报错(getItemDropped 恒按 meta 0 处理,planets/asteroids/blocks/BlockMinerBase.java:51-54)。