TileEntityBeamReceiver(激光接收器)

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

注册信息

属性 值 来源
TileEntity 注册名 Beam Receiver planets/asteroids/AsteroidsModule.java:318
注册类 micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReceiver 同上
关联方块 AsteroidBlocks.beamReceiver = new BlockBeamReceiver("beamReceiver") planets/asteroids/blocks/AsteroidBlocks.java:42
方块→TE 分派 不分 metadata,一律 new TileEntityBeamReceiver() planets/asteroids/blocks/BlockBeamReceiver.java:199-201
父类 TileEntityBeamOutput(抽象类) planets/asteroids/tile/TileEntityBeamReceiver.java:27
实现接口 IEnergyHandlerGC / ILaserNode 同上
所属 modid GalacticraftMars(@Mod(modid = Constants.MOD_ID_PLANETS) 挂在 GalacticraftPlanets 类上,常量值 GalacticraftMars) planets/GalacticraftPlanets.java:37-38、core/Constants.java:8
槽位数 无(不实现 IInventory,无 ItemStack[]) planets/asteroids/tile/TileEntityBeamReceiver.java:27-319

⚠ 本条目属于 GalacticraftMars modid,不是 GalacticraftCore—— 小行星带内容全挂在同一个 modid 下(@Mod 只声明了 MOD_ID_CORE 与 MOD_ID_PLANETS 两个), 不能从 planets/asteroids/ 目录名推断出 GalacticraftAsteroids 这个 modid。

槽位与字段

没有槽位。它是激光网络的能源端点(发射或接收),字段:

字段 类型 语义 源码
maxRate float = 1500 传输速率上限(gJ/t) planets/asteroids/tile/TileEntityBeamReceiver.java:33
storage EnergyStorage 自身缓冲 planets/asteroids/tile/TileEntityBeamReceiver.java:34
facing int 朝向(ForgeDirection.ordinal(),UNKNOWN = −1) planets/asteroids/tile/TileEntityBeamReceiver.java:30
modeReceive int ReceiverMode 枚举序(UNDEFINED/RECEIVE/EXTRACT) planets/asteroids/tile/TileEntityBeamReceiver.java:40
color Vector3 = (0,1,0) 激光颜色,未标 @NetworkedField planets/asteroids/tile/TileEntityBeamReceiver.java:42
nodeList / targetVec / pitch / yaw 继承 父类 TileEntityBeamOutput 的节点表与朝向 planets/asteroids/tile/TileEntityBeamOutput.java:20-26

tick / 能量 / 网络

能量常量(本篇核心)

planets/asteroids/tile/TileEntityBeamReceiver.java:33-37:

private final float maxRate = 1500;
private final EnergyStorage storage = new EnergyStorage(10 * this.maxRate, this.maxRate);
常量 值 含义
maxRate 1500 单向传输速率上限(gJ/t)
storage 容量 15000 gJ 10 * maxRate;源码注释:电路断开后仍可收 0.5 s
storage 收发上限 各 1500 gJ/t 继承自 GC 设备通用做法

⚠ 单位是 gJ(GigaJoule),不是 RF/t、不是 EU/t。 GC 自己的能源单位与 BuildCraft RF、IC2 EU 不是同一套,互换即跨 mod 单位幻觉。

⚠ 容量会被旁边的储能设备改写:getAttachedTile() 碰到 EnergyStorageTile 时 执行 setCapacity(附体容量 - 已存) / setMaxExtract(...) / setMaxReceive(...) (planets/asteroids/tile/TileEntityBeamReceiver.java:174-179)。

RECEIVE / EXTRACT 两种模式

modeReceive 由 setFacing() 依附着方块自动判定(planets/asteroids/tile/TileEntityBeamReceiver.java:252-279):

模式 tick 行为 源码
EXTRACT 从正面方块抽取能量转发给激光目标 planets/asteroids/tile/TileEntityBeamReceiver.java:54-83
EXTRACT(GC 机器) 只认 TileBaseUniversalElectricalSource,取 min(maxExtract, 已存) planets/asteroids/tile/TileEntityBeamReceiver.java:58-68
EXTRACT(他模) EnergyUtil.otherModsEnergyExtract,仍限 maxRate planets/asteroids/tile/TileEntityBeamReceiver.java:74-82
RECEIVE 每 tick 把缓冲推给正面方块,上限 maxRate * 5 planets/asteroids/tile/TileEntityBeamReceiver.java:87
RECEIVE 剩余量 < 0.01 gJ 时停止 planets/asteroids/tile/TileEntityBeamReceiver.java:89-92

⚠ maxRate * 5 是源码注释的硬上限(:85-87:「One Beam Receiver might be powered by multiple transmitters - allow for 5 at maximum transfer rate」)——一个接收器最多同时吃 5 束激光。

⚠ 拒绝直连 GC 导线:getAttachedTile() 遇到 IConductor 直接把朝向置回 UNKNOWN 并返回 null (planets/asteroids/tile/TileEntityBeamReceiver.java:169-172);updateEntity 里也显式排除 EnergyStorageTile 与 TileBaseConductor(:69、:102)——接收器只能接机器/电池,不能接铝线。

激光连接

项目 值 来源
搜索范围 相对坐标差 < 16(即半径 15 格内) planets/asteroids/tile/TileEntityBeamOutput.java:99、:84-87
连线条件 双方 modeReceive 不同(EXTRACT 接 RECEIVE) planets/asteroids/tile/TileEntityBeamReceiver.java:282-292
颜色 getColor() 恒返回 (0,1,0),无视 color 字段 planets/asteroids/tile/TileEntityBeamReceiver.java:295-297
右侧点击 轮换激光目标(父类 onMachineActivated) planets/asteroids/tile/TileEntityBeamOutput.java:218-244

网络

项目 值 来源
封包距离 24.0 planets/asteroids/tile/TileEntityBeamReceiver.java:119-121
封包冷却 3 tick planets/asteroids/tile/TileEntityBeamReceiver.java:124-126
是否同步 true planets/asteroids/tile/TileEntityBeamReceiver.java:129-131
同步字段 facing、modeReceive(均 @NetworkedField(targetSide = Side.CLIENT)) planets/asteroids/tile/TileEntityBeamReceiver.java:29-30、:39-40

NBT:FacingSide(:311、:317)、父类的 HasTarget / TargetX|Y|Z (planets/asteroids/tile/TileEntityBeamOutput.java:272-289)。

GUI

无 GUI、无 Container——源码 planets/asteroids/client/ 下只有渲染器 (TileEntityBeamReceiverRenderer.java),交互靠扳手/右键轮换目标。

相关条目