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。

相关条目