TileBlueprintLibrary

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

注册信息

属性 值 来源
TileEntity 注册名 net.minecraft.src.builders.TileBlueprintLibrary BuildCraftBuilders.java:633-634
注册类 buildcraft.builders.TileBlueprintLibrary 同上
所属 modid BuildCraft|Builders BuildCraftBuilders.java:144 @Mod
关联方块 Library(注册变量 libraryBlock) BuildCraftBuilders.java:631 上下文
实现接口 IInventory / ICommandReceiver builders/TileBlueprintLibrary.java:40
是否配置门控 否(无条件注册) BuildCraftBuilders.java:634

槽位数量与布局

builders/TileBlueprintLibrary.java:45:

public SimpleInventory inv = new SimpleInventory(4, "Electronic Library", 1);

即 4 槽,单槽上限 1,内部名 "Electronic Library"。

槽位 用途
0–3 蓝图(每槽 1 张,可存 4 张)

处理速率 / 耗时(两个独立常量,勿混)

builders/TileBlueprintLibrary.java:42-43:

private static final int PROGRESS_TIME = 100;
private static final int CHUNK_SIZE = 16384;
常量 值 含义
PROGRESS_TIME 100 进度条上限 tick 数:updateEntity() 中 progressIn++ / progressOut++ 每 tick 一次,涨到 100 封顶(:204-211,条件 progressIn < PROGRESS_TIME)
CHUNK_SIZE 16384 单个传输分块的字节数(16 KiB)

这两个数语义完全不同:PROGRESS_TIME 是 tick 计数、CHUNK_SIZE 是 字节。 蓝图大于 CHUNK_SIZE 时会被切成多块,源码的块数算法在 :287:

final int chunks = (bptData.length + CHUNK_SIZE - 1) / CHUNK_SIZE;

即向上取整;每块的起点 CHUNK_SIZE * chunk、长度 Math.min(CHUNK_SIZE, bptData.length - start)(:300-301)。 接收端按 CHUNK_SIZE * stream.readUnsignedShort() 分配缓冲(:345),偏移为 CHUNK_SIZE * 块序号(:347)。

蓝图库还要扫描区块以发现附近蓝图,该扫描步进同样以 CHUNK_SIZE 为界。

传输状态机

字段 含义 行
progressIn / progressOut 上传 / 下载进度计数 :47-48
uploadingPlayer / downloadingPlayer 正在传输的玩家 :54-55
blueprintDownloadId / blueprintDownload 待写入的蓝图 id 与字节数组 :57-58
selected 当前选中条目索引,初值 -1(即「无选中」) :52
entries 蓝图条目列表 :50

GUI / Container 配对

GUI 类 Container 类 配对处
buildcraft.builders.gui.GuiBlueprintLibrary buildcraft.builders.gui.ContainerBlueprintLibrary builders/BuildersGuiHandler.java:45

网络封包

有独立封包:TileBlueprintLibrary 实现 ICommandReceiver, 蓝图字节流通过 BuildCraft 的 NetworkUtils 通道传输(BC 主频道 + Builders 模块注册)。 这是少数真的按分块传大数据的方块实体。

源码缺陷

CHUNK_SIZE(:43)用的是字节语义,但传包时若未按整数倍切分, 大蓝图会在 blueprintDownload 数组上产生部分块;本条目不对其正确性下断言。

相关条目