TileLaser
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | net.minecraft.src.buildcraft.factory.TileLaser |
BuildCraftSilicon.java:145 |
| 注册类 | buildcraft.silicon.TileLaser |
同上 |
| 所属 modid | BuildCraft|Silicon |
BuildCraftSilicon.java:63 |
| 关联方块 | Laser 方块(注册变量 laserBlock,方块类 BlockLaser) |
BuildCraftSilicon.java:76、:100-102 |
| 父类 | TileBuildCraft |
silicon/TileLaser.java:31 |
| 实现接口 | IHasWork / IControllable |
同上 |
| 是否配置门控 | 否(无条件注册) | BuildCraftSilicon.java:145 |
槽位数量与布局
没有物品槽位(不实现 IInventory)。
Laser 是能量发射器,本身不存物品。
能量(回源码读常量)
silicon/TileLaser.java:49:
this.setBattery(new RFBattery(10000, 250, 0));
| 参数 | 值 |
|---|---|
| 容量 | 10000 |
| 每 tick 接收上限 | 250 |
| 最小接收量 | 0 |
⚠️ 注意这与它供给的机器用的不是同一套单位: Laser 容量 10000 与 TileRefinery 相同(10000), 但每 tick 接收上限只有 250(Refinery 是 1500)—— Laser 是「大容量、小进料」,因为它的能量要分给下游多台机器。
处理速率 / 耗时
silicon/TileLaser.java:33-34:
| 常量 | 值 | 含义 |
|---|---|---|
LASER_OFFSET |
2.0F / 16.0F = 0.125 |
渲染偏移(像素→方块比例),2/16 格 |
POWER_AVERAGING |
100(short) |
功率平均窗口:出力用滑动平均平滑,避免抖动 |
⚠️ LASER_OFFSET = 2.0F/16.0F 是渲染用的亚像素偏移,不是任何速率或尺寸。
把它说成「激光长度 0.125 格」即为量纲写反。
⚠️ POWER_AVERAGING = 100 是平滑窗口的样本数,
不是「每 100 tick 发射一次」。实际输出速率由下游 ILaserTarget.getRequiredEnergy() 决定。
与下游机器的契约
Laser 实现 IHasWork / IControllable,向 ILaserTarget 接口的机器
(TileAdvancedCraftingTable 等)供能。
[TileAdvancedCraftingTable](tile-advanced-crafting-table) 的
REQUIRED_POWER = 5000(silicon/TileAdvancedCraftingTable.java:59)
就是由这套契约传入的需求值。
⚠ 多方块提示:Laser 不是多方块结构。它是一个单方块, 通过能量网络向
[BlockLaserTable](block-laser-table-meta-map)家族供能。 没有面板、没有控制器、不可旋转。
GUI / Container
没有 GUI,也没有 Container——
silicon/gui/ 目录下不存在 ContainerLaser / GuiLaser,
SiliconGuiHandler 的 7 个分支(:44–:86)全部对应 6 种 BlockLaserTable 机器 + Packager,
不含 Laser 本身。
蓝图 / 转向
Laser 放置后由玩家用红石板 / 路径标记定义朝向与作用范围,
状态存在 TileConstructionMarker 的 laser(LaserData)字段里。
网络封包
走 TileEntity 默认 NBT 同步。无独立的 Silicon 专用封包 ID。