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。