TileEntityCryogenicChamber(低温仓)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Cryogenic Chamber |
planets/mars/MarsModule.java:245 |
| 注册类 | micdoodle8.mods.galacticraft.planets.mars.tile.TileEntityCryogenicChamber |
同上 |
| 关联方块 | MarsBlocks.machine(BlockMachineMars) |
planets/mars/blocks/BlockMachineMars.java:307-316 |
| 方块→TE 分派 | CRYOGENIC_CHAMBER_METADATA(4) ≤ metadata < LAUNCH_CONTROLLER_METADATA(8) |
planets/mars/blocks/BlockMachineMars.java:48-49、:310-312 |
| 父类 | TileEntityMulti |
planets/mars/tile/TileEntityCryogenicChamber.java:29 |
| 实现接口 | IMultiBlock |
同上 |
| 所属 modid | GalacticraftMars(@Mod(modid = Constants.MOD_ID_PLANETS) 挂在 GalacticraftPlanets 类上,常量值 GalacticraftMars) |
planets/GalacticraftPlanets.java:37-38、core/Constants.java:8 |
| 槽位数 | 无(不实现 IInventory,无 ItemStack[]) |
planets/mars/tile/TileEntityCryogenicChamber.java:29-185 |
槽位与字段
没有任何槽位。字段只有两个:
| 字段 | 类型 | 语义 | 源码 |
|---|---|---|---|
isOccupied |
boolean |
舱内是否有人(NBT 键 IsChamberOccupied) |
planets/mars/tile/TileEntityCryogenicChamber.java:31、:177、:183 |
mainBlockPosition |
BlockVec3 |
多方块主块坐标(父类) | core/tile/TileEntityMulti.java:17-18 |
⚠ isOccupied 没有 @NetworkedField 注解(:31),
只在 NBT 里持久化;把它写进「同步字段」即为编造。
方块侧置位入口:planets/mars/blocks/BlockMachineMars.java:400-401。
tick / 能量 / 网络
多方块结构
| 项目 | 值 | 源码 |
|---|---|---|
| 尺寸 | 1 × 1 × 3(纯竖柱) | planets/mars/tile/TileEntityCryogenicChamber.java:130-139 |
| 假方块 | y = 1, 2 两块,GCBlocks.fakeBlock,metadata 5 |
planets/mars/tile/TileEntityCryogenicChamber.java:137 |
| 高度检查 | 超过 worldObj.getHeight() - 1 就中断放置 |
planets/mars/tile/TileEntityCryogenicChamber.java:128-133 |
| 渲染包围盒 | x±1、y..y+3、z±1 |
planets/mars/tile/TileEntityCryogenicChamber.java:35-43 |
| 拆除 | 统计剩余假方块,为 0 就不拆;否则 3 格一起删 | planets/mars/tile/TileEntityCryogenicChamber.java:143-172 |
源码没有任何旋转逻辑(与 TileEntityMulti 里的结构表一致)。
tick
updateEntity() 只调 super.updateEntity()(planets/mars/tile/TileEntityCryogenicChamber.java:119-122),
本类不写任何逐 tick 逻辑;canUpdate() 被强制返回 true(:114-117),
以便多方块结构在放置/拆除时被 tick 到。
休眠(核心交互)
onActivated()(planets/mars/tile/TileEntityCryogenicChamber.java:46-79):
| 判定 | 返回 | 源码 |
|---|---|---|
| 已经在睡 / 已死亡 | OTHER_PROBLEM |
planets/mars/tile/TileEntityCryogenicChamber.java:83-85 |
生物群系是 BiomeGenBase.hell(下界) |
NOT_POSSIBLE_HERE |
planets/mars/tile/TileEntityCryogenicChamber.java:87-89 |
GCPlayerStats.cryogenicChamberCooldown > 0 |
NOT_POSSIBLE_NOW,聊天栏显示 cooldown / 20 秒 |
planets/mars/tile/TileEntityCryogenicChamber.java:91-93、:68-76 |
| 其余 | OK,把玩家挪到 (x+0.5, y+1.9, z+0.5) 并置 sleeping |
planets/mars/tile/TileEntityCryogenicChamber.java:100-111 |
⚠ 聊天提示的秒数是 cryogenicChamberCooldown / 20 除法(:73-74),
说明该字段是 tick 数;冷却本身的具体秒数由玩家存档统计控制,不在本类源码里,
本条目不写死。
网络
| 项目 | 值 | 来源 |
|---|---|---|
| 封包距离 | 30.0 |
core/tile/TileEntityMulti.java:83-85 |
| 封包冷却 | 50 tick |
core/tile/TileEntityMulti.java:88-90 |
| 是否同步 | true |
core/tile/TileEntityMulti.java:93-95 |
| 同步字段 | 仅父类的 mainBlockPosition |
core/tile/TileEntityMulti.java:16-18 |
| 专用封包 | EnumSimplePacketMars.C_BEGIN_CRYOGENIC_SLEEP(发给该玩家) |
planets/mars/tile/TileEntityCryogenicChamber.java:61-65 |
能量
不耗电,类内无 EnergyStorage、无能源接口(planets/mars/tile/TileEntityCryogenicChamber.java:29-185)。