TileEntityTelepadFake(短程传送机假方块)

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

注册信息

属性 值 来源
TileEntity 注册名 Fake Short Range Telepad AsteroidsModule.java:320
注册类 micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityTelepadFake 同上
关联方块 AsteroidBlocks.fakeTelepad = new BlockTelepadFake("telepadFake") planets/asteroids/blocks/AsteroidBlocks.java:44
方块→TE 分派 createNewTileEntity 无条件返回本 TE planets/asteroids/blocks/BlockTelepadFake.java:150
父类 TileBaseElectricBlock(→ TileBaseUniversalElectrical → EnergyStorageTile) planets/asteroids/tile/TileEntityTelepadFake.java:17、core/energy/tile/TileBaseElectricBlock.java:23-24、core/energy/tile/TileBaseUniversalElectrical.java:34
实现接口 无(类声明上不 implements 任何接口) planets/asteroids/tile/TileEntityTelepadFake.java:17
所属 modid GalacticraftMars(Asteroids 模块复用 Constants.MOD_ID_PLANETS) core/Constants.java:8
槽位数 无(不实现 IInventory) 类声明 planets/asteroids/tile/TileEntityTelepadFake.java:17

⚠ 假方块被登记在 hiddenBlocks 里—— planets/asteroids/blocks/AsteroidBlocks.java:49:

GCBlocks.hiddenBlocks.add(AsteroidBlocks.fakeTelepad);

即不能由玩家在创造模式直接取得,只能由 TileEntityShortRangeTelepad 的 onCreate 自动铺设。

槽位与字段

本类没有任何 ItemStack[] 字段,getSizeInventory() 不存在。

字段 类型 含义 源码
mainBlockPosition BlockVec3,@NetworkedField(CLIENT) 指向主块(TileEntityShortRangeTelepad)的坐标 planets/asteroids/tile/TileEntityTelepadFake.java:19-21(源码注释 // The the position of the main block,原文如此)
mainTelepad WeakReference<TileEntityShortRangeTelepad> 主块的弱引用缓存 planets/asteroids/tile/TileEntityTelepadFake.java:23

能量

⚠ 本类自己不做能源设备——它的 storage 每 tick 被主块覆写。

planets/asteroids/tile/TileEntityTelepadFake.java:46-58:

public void updateEntity() {
    super.updateEntity();
    final TileEntityShortRangeTelepad telepad = this.getBaseTelepad();
    if (telepad != null) {
        this.storage.setCapacity(telepad.storage.getCapacityGC());
        this.storage.setMaxExtract(telepad.storage.getMaxExtract());
        this.storage.setMaxReceive(telepad.storage.getMaxReceive());
        this.extractEnergyGC(null, telepad.receiveEnergyGC(null, this.getEnergyStoredGC(), false), false);
    }
}
项目 值 来源
缓冲容量 继承默认 16000 gJ,但每 tick 被主块的 getCapacityGC() 覆盖 core/energy/tile/EnergyStorageTile.java:18、:21;覆盖见 planets/asteroids/tile/TileEntityTelepadFake.java:53
最大输入 继承默认 25 gJ/t(new EnergyStorage(STANDARD_CAPACITY, 10) 两参构造展开 maxReceive = 2.5F * 10),随后被主块的 getMaxReceive() 覆盖 core/energy/tile/EnergyStorage.java:19-21;覆盖见 planets/asteroids/tile/TileEntityTelepadFake.java:55
最大输出 同样每 tick 被主块覆盖(普通 50 / hardMode 115) planets/asteroids/tile/TileEntityTelepadFake.java:54、planets/asteroids/tile/TileEntityShortRangeTelepad.java:77
能量流转 第 4 行把本块已存的电全部转给主块(telepad.receiveEnergyGC(...)),保证电只记在主块账上 planets/asteroids/tile/TileEntityTelepadFake.java:56

⚠ 不要给假方块写独立的「16000 gJ 电池」——它的容量、输入、输出三值都每 tick 跟随主块, 独立写死即为编造。

tick / 特殊机制

updateEntity()(:46-58)是本类唯一的 tick 逻辑,做上面那 4 行同步。

主块解析

getBaseTelepad()(:60-,private):

步骤 行为 源码
1 mainBlockPosition == null → 返回 null planets/asteroids/tile/TileEntityTelepadFake.java:61-63
2 弱引用为空则按坐标取 TE,类型对得上才建引用 planets/asteroids/tile/TileEntityTelepadFake.java:65-71
3 仍拿不到(世界未加载 / 不是主块 TE)→ 把主块坐标处清成空气 planets/asteroids/tile/TileEntityTelepadFake.java:73-74
4 弱引用已失效 → 返回 null planets/asteroids/tile/TileEntityTelepadFake.java:76-80

⚠ 第 3 步会主动拆掉主块——这是源码原样行为,用于主块被移除时清理残留假方块, 不是「假方块能拆传送机」。

与方块 / 主块的联动

行为 触发方 源码
setMainBlock(BlockVec3):记录主块并 markBlockForUpdate BlockTelepadFake.makeFakeBlock → BlockTelepadFake.java:91 planets/asteroids/tile/TileEntityTelepadFake.java:25-31
onBlockRemoval():通知主块拆解 BlockTelepadFake 在邻居变化时 planets/asteroids/tile/TileEntityTelepadFake.java:33-39、方块侧 BlockTelepadFake.java:119-120
onActivated(EntityPlayer):直接转发给主块的 onActivated(玩家右键假方块 = 右键主机) 玩家交互 planets/asteroids/tile/TileEntityTelepadFake.java:41-44

GUI / Container

无。 假方块没有自己的容器;右键被 onActivated 转发到主块后, 打开的是 TileEntityShortRangeTelepad 的 GUI。

相关条目