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),交互靠扳手/右键轮换目标。