TileGenericPipe

事实基准:/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息(本条目用 registerTileEntityWithAlternatives,注册名有 3 个)

属性 值 来源
当前注册名 net.minecraft.src.buildcraft.transport.GenericPipe transport/TransportProxy.java:29-33
历史别名 1 net.minecraft.src.buildcraft.GenericPipe 同上
历史别名 2 net.minecraft.src.buildcraft.transport.TileGenericPipe 同上
注册类 buildcraft.transport.TileGenericPipe 同上
所属 modid BuildCraft|Transport BuildCraftTransport.java:193 @Mod
注册方式 GameRegistry.registerTileEntityWithAlternatives(...) transport/TransportProxy.java:29
是否配置门控 否(TransportProxy.registerTileEntities() 无条件调用) transport/TransportProxy.java:27-36

⚠️ 这是 BuildCraft 里唯一用 registerTileEntityWithAlternatives 的 TileEntity, 源码注释明确说明(:28-29):

The first name here is the current TE name; the remaining names are old names used for backwards compatibility

⚠️ 第一个名字是当前名,其余是向后兼容的旧名 —— 共 3 个名字(1 当前 + 2 历史)。 不能把历史别名当成「三个不同的 TileEntity」。

⚠️ 注册经过 CompatHooks.INSTANCE.getTile(TileGenericPipe.class)(:30)—— 实际注册的类可能不是 TileGenericPipe 本身。

关于 check_class_claims.py 的 NOT FOUND:上表 3 个名字在源码树里查不到, 是预期结果——它们是 GameRegistry 的存档标识串(只用于老存档反查), 源码里不存在同名的 Java 类。该工具只验证「符号是否存在于源码」, 分不出「类名」与「注册名」。判定依据:transport/TransportProxy.java:29-33 把它们当字符串字面量传给 registerTileEntityWithAlternatives。

槽位数量与布局

没有固定槽位。TileGenericPipe 是所有管道的公共 TileEntity, 真正的槽位 / 容量 / 物品过滤逻辑在具体的 Pipe 子类里 (Pipe<?>,如 IDiamondPipe、PipeItemsEmerald 等)。

⚠️ 「管有多少个槽」不是本类的属性——写条目时不能给 TileGenericPipe 编一个槽位数。

实现接口(transport/TileGenericPipe.java:64-65)

public class TileGenericPipe extends TileEntity
        implements IFluidHandler, IPipeTile, ITileBufferHolder, IEnergyHandler, IDropControlInventory, ISyncedTile,
接口 用途
IFluidHandler 流体管道
IPipeTile 物品 / 动力管道
ITileBufferHolder 缓冲
IEnergyHandler MJ / RF 动力管道
IDropControlInventory 掉落控制
ISyncedTile 同步

一个类同时覆盖物品、流体、能量三种管道——这正是「GenericPipe」名字的由来。

内部状态结构

结构 行 内容
CoreState(嵌套静态类,ISerializable) :91 pipeId 初值 -1(:93)
SideProperties(嵌套静态类) :106 每面一个 PipePluggable:PipePluggable[ForgeDirection.VALID_DIRECTIONS.length](:108)
redstoneInput :75 红石输入强度
redstoneInputSide :76 int[ForgeDirection.VALID_DIRECTIONS.length],每面一个

⚠️ CoreState.pipeId 初值是 -1,这是「未分配管道 id」的哨兵值, 不是合法的管道编号。

⚠️ redstoneInputSide 的长度取自 ForgeDirection.VALID_DIRECTIONS.length(6), 不是写死的数组字面量——写条目时不应硬说「数组长度 6」为源码字面量, 它由 Forge 的方向枚举决定。

位置访问器

:651 定义 public int x();同理有 y() / z()—— 这是 CoreConstants.PIPE_MIN_POS / PIPE_MAX_POS 范围内的管道局部坐标。

GUI / Container

没有 GUI,也没有 Container。TransportGuiHandler.getClientGuiElement (transport/TransportGuiHandler.java:87 起)对 IPipeTile 分派到 GuiDiamondPipe / GuiEmeraldPipe / GuiEmzuliPipe / GuiEmeraldFluidPipe / GuiGateInterface (:112、:115、:118、:121、:124)——按管道子类而非按 TileEntity 分派。

网络封包

实现 ISyncedTile。CoreState 与 SideProperties 均实现 ISerializable, 按 ByteBuf 协议传输管道状态。无独立的 Transport 专用封包 ID。

相关条目