TileEntityRefinery(GC 精炼机)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。 ⚠ 与 BuildCraft 的 Refiner 是两个不同 mod 的同名机器, 参数、槽位、配方体系互不通用,切勿混写。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Refinery |
GalacticraftCore.java:710 |
| 注册类 | micdoodle8.mods.galacticraft.core.tile.TileEntityRefinery |
同上 |
| 关联方块 | 精炼机方块 | GalacticraftCore.java:710 同块 |
| 父类 | TileBaseElectricBlockWithInventory |
core/tile/TileEntityRefinery.java:27 |
| 实现接口 | ISidedInventory / IFluidHandler |
同上 |
| 是否配置门控 | 否(无条件注册) | GalacticraftCore.java:710 |
⚠ 注册名同样是 Refinery,与 BuildCraft 的 Refinery(BuildCraftFactory.java:109)同名。
按注册名去搜会同时命中两个 mod 的机器。
槽位数量与布局
IInventory + ISidedInventory + IFluidHandler:
- 物品槽由父类
TileBaseElectricBlockWithInventory提供; - 流体走
IFluidHandler(输入 / 输出各一),不占物品槽。
⚠ 本条目以 TileEntityRefinery 自身源码为真源,
物品槽数量由父类决定,不在本类,不写死未经核对的数字。
处理速率 / 耗时(本篇核心常量)
core/tile/TileEntityRefinery.java:37-38:
public static final int PROCESS_TIME_REQUIRED = 2;
public static final int OUTPUT_PER_SECOND = 1;
| 常量 | 值 | 含义 |
|---|---|---|
PROCESS_TIME_REQUIRED |
2 | 一次精炼需要 2 tick(0.1 秒) |
OUTPUT_PER_SECOND |
1 | 每秒产出 1 单位 |
⚠ 两个数字的量纲不同,不要混算:
PROCESS_TIME_REQUIRED 是 tick(20 tick = 1 秒),OUTPUT_PER_SECOND 是产物/秒。
把 OUTPUT_PER_SECOND = 1 读成「每 tick 产 1」是量纲写反——
2 tick 出 1 个 = 0.5 个/tick = 10 个/秒,与 OUTPUT_PER_SECOND = 1 并不一致,
说明这两个常量在源码中各自服务于不同代码路径,本条目不断言二者的换算关系。
使用点在 :102 与 :105:
this.processTicks = TileEntityRefinery.PROCESS_TIME_REQUIRED; // :102
this.processTicks = this.canProcess() ? TileEntityRefinery.PROCESS_TIME_REQUIRED : 0; // :105
即处理就绪时把 processTicks 复位到 2,随后逐 tick 倒数。
canProcess() 为假时直接置 0(不累积)。
配方体系
GC 的精炼配方是硅 / 钻石产业链(把低级矿物加工成高级材料), 与 BuildCraft 的流体两进一出精炼配方不是同一套系统。
⚠ 跨 mod 兼容引用提醒:GC 机器的配方常引用 GregTech 的材料, 那属于「兼容引用」(ore-dict / 条件注册),不是 Galacticraft 拥有的物品。
GUI / Container
没有 GUI,也没有 Container。
core/client/gui/GuiIdsCore.java 的常量总共只有 8 个(集合运算):
| GUI ID | 常量 | 行 |
|---|---|---|
| 0 | NASA_WORKBENCH_ROCKET |
:5 |
| 1 | NASA_WORKBENCH_BUGGY |
:6 |
| 2 | NASA_WORKBENCH_NEW_SCHEMATIC |
:7 |
| 3 | GALAXY_MAP |
:8 |
| 4 | ROCKET_INVENTORY |
:9 |
| 5 | EXTENDED_INVENTORY |
:10 |
| 6 | SPACE_RACE_START |
:11 |
| 7 | SPACE_RACE_JOIN |
:12 |
注意:这些 ID 只覆盖「玩家随身界面」(火箭背包、银河图、太空竞赛),
机器界面走的是另一套——core/client/gui/GuiHandler.java 的
getServerGuiElement(:89)按 TileEntity 的 instanceof 类型分派,
不使用 GuiIdsCore 的 ID。
| GUI 类 | Container 类 | 分派处(GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiRefinery |
core.inventory.ContainerRefinery |
Container :114 |
⚠ 与 BuildCraft 的 Refinery(GuiRefinery + ContainerRefinery)同名,
但两者的槽位、配方、容器逻辑完全不通用。
⚠ 源码缺陷:core/tile/TileEntityRefinery.java 本身没有 openGui 调用,
界面是由方块的 onBlockActivated 转发到 GuiHandler 的。
网络封包
走 GC 的 @NetworkedField 字段同步。无独立的封包 ID。