TileEntityBeamReflector(激光反射器)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Beam Reflector |
planets/asteroids/AsteroidsModule.java:317 |
| 注册类 | micdoodle8.mods.galacticraft.planets.asteroids.tile.TileEntityBeamReflector |
同上 |
| 关联方块 | AsteroidBlocks.beamReflector = new BlockBeamReflector("beamReflector") |
planets/asteroids/blocks/AsteroidBlocks.java:41 |
| 方块→TE 分派 | 不分 metadata,一律 new TileEntityBeamReflector() |
planets/asteroids/blocks/BlockBeamReflector.java:73-75 |
| 父类 | TileEntityBeamOutput(抽象类) |
planets/asteroids/tile/TileEntityBeamReflector.java:9 |
| 实现接口 | ILaserNode |
同上 |
| 所属 modid | GalacticraftMars(@Mod(modid = Constants.MOD_ID_PLANETS),常量值 GalacticraftMars) |
planets/GalacticraftPlanets.java:37-38、core/Constants.java:8 |
| 槽位数 | 无(不实现 IInventory,无 ItemStack[]) |
planets/asteroids/tile/TileEntityBeamReflector.java:9-101 |
⚠ 与 Beam Receiver 同属 GalacticraftMars modid——
小行星带没有独立 modid,不要按目录名编一个 GalacticraftAsteroids。
槽位与字段
没有槽位。反射器字段极少:
| 字段 | 类型 | 语义 | 源码 |
|---|---|---|---|
color |
Vector3 = (0,1,0) |
激光颜色,参与连线判定 | planets/asteroids/tile/TileEntityBeamReflector.java:11 |
storage |
EnergyStorage |
自身缓冲 | planets/asteroids/tile/TileEntityBeamReflector.java:12 |
nodeList / targetVec / pitch / yaw |
继承 | 父类的节点表与光束朝向 | planets/asteroids/tile/TileEntityBeamOutput.java:20-26 |
⚠ color 与 storage 都没有 @NetworkedField 注解(:11-12),
父类里只有 targetVec 是同步字段(planets/asteroids/tile/TileEntityBeamOutput.java:22-23)。
tick / 能量 / 网络
能量(本篇核心常量)
planets/asteroids/tile/TileEntityBeamReflector.java:12:
private final EnergyStorage storage = new EnergyStorage(10, 1);
| 常量 | 值 | 含义 |
|---|---|---|
storage 容量 |
10 gJ | 构造第 1 参(core/tile/TileEntityBeamReflector.java:12) |
storage 最大收 / 最大发 |
2.5 gJ/t 收 / 1 gJ/t 发 | 两参构造 EnergyStorage(capacity, maxTransfer) 展开为 maxReceive = 2.5F * maxTransfer、maxExtract = maxTransfer(core/energy/tile/EnergyStorage.java:19-21) |
⚠ 反射器是只收不发的:extractEnergyGC() 无条件返回 0
(planets/asteroids/tile/TileEntityBeamReflector.java:78-80)。
⚠ 有目标时缓冲直接被绕过:receiveEnergyGC() 在 getTarget() != null 时
把能量转手交给目标节点(:63-72),只有没有目标时才落进自己的 10 gJ 缓冲(:74)。
供能限制
| 项目 | 值 | 源码 |
|---|---|---|
| 允许的能源来源 | 仅 EnergySourceWireless |
planets/asteroids/tile/TileEntityBeamReflector.java:83-85 |
| 有目标时的额外校验 | 无线源必须已把本节点 nodes 收进来,否则返回 0 |
planets/asteroids/tile/TileEntityBeamReflector.java:64-67 |
| 连线条件 | color 相等 |
planets/asteroids/tile/TileEntityBeamReflector.java:57-59 |
节点几何
| 项目 | 值 | 源码 |
|---|---|---|
| 输出点 | (x+0.5, y+1.13228/2.0, z+0.5) |
planets/asteroids/tile/TileEntityBeamReflector.java:32-34 |
| 输入点 | 输出点按 yaw-180 偏移 0.15 格 |
planets/asteroids/tile/TileEntityBeamReflector.java:20-29 |
| 搜索半径 | 相对坐标差 < 16 |
planets/asteroids/tile/TileEntityBeamOutput.java:99、:84-87 |
| 无目标时 | 每 tick 调 initiateReflector() 重建节点表 |
planets/asteroids/tile/TileEntityBeamOutput.java:52-53 |
网络
| 项目 | 值 | 来源 |
|---|---|---|
| 封包距离 | 24.0 |
planets/asteroids/tile/TileEntityBeamReflector.java:37-39 |
| 封包冷却 | 3 tick |
planets/asteroids/tile/TileEntityBeamReflector.java:42-44 |
| 是否同步 | true |
planets/asteroids/tile/TileEntityBeamReflector.java:47-49 |
| 自身同步字段 | 无(只有父类的 targetVec 同步) |
planets/asteroids/tile/TileEntityBeamReflector.java:9-101 |
GUI
无 GUI、无 Container,只有渲染器 TileEntityBeamReflectorRenderer
(planets/asteroids/AsteroidsModuleClient.java:111 绑定)。
交互用扳手/右键轮换目标(planets/asteroids/blocks/BlockBeamReflector.java:84-95
→ planets/asteroids/tile/TileEntityBeamOutput.java:218-244)。