TileConstructionMarker
事实基准:
/Users/evlos/a/mirror/BuildCraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | net.minecraft.src.builders.TileConstructionMarker |
BuildCraftBuilders.java:643-644 |
| 注册类 | buildcraft.builders.TileConstructionMarker |
同上 |
| 所属 modid | BuildCraft|Builders |
BuildCraftBuilders.java:144 |
| 关联方块 | Construction Marker 方块(注册变量 constructionMarkerBlock) |
BuildCraftBuilders.java:643-644 |
| 实现接口 | IBuildingItemsProvider / IBoxProvider / ICommandReceiver |
builders/TileConstructionMarker.java:40-41 |
| 是否配置门控 | 否(无条件注册) | BuildCraftBuilders.java:644 |
槽位数量与布局
没有物品槽位(不实现 IInventory)。蓝图不是「放进去的槽位」,而是一个字段:
builders/TileConstructionMarker.java:48:
public ItemStack itemBlueprint;
蓝图存在 itemBlueprint 字段里,由 setBlueprint(ItemStack currentItem)(:170)写入。
核心状态字段
builders/TileConstructionMarker.java:43-55:
| 字段 | 类型 | 含义 |
|---|---|---|
currentMarkers |
static HashSet<TileConstructionMarker>(:43) |
全局静态集合,登记所有已放置的施工标记 |
direction |
ForgeDirection(:45) |
朝向,初值 ForgeDirection.UNKNOWN |
laser |
LaserData(:47) |
激光连线数据 |
itemBlueprint |
ItemStack(:48) |
蓝图 |
box |
Box(:49) |
待建造区域 |
bluePrintBuilder |
BptBuilderBase(:51) |
蓝图生成器 |
bptContext |
BptContext(:52) |
蓝图上下文 |
⚠️ direction 初值是 ForgeDirection.UNKNOWN,不是 NORTH——
这是「尚未确定朝向」的哨兵值。
处理速率 / 耗时
updateEntity()(builders/TileConstructionMarker.java:77)按激光信号逐步把蓝图方块逐个放置。
⚠️ 本类没有写死「N tick 放一个方块」的节拍常量;
单次放置的能耗走 BuilderAPI(BREAK_ENERGY = 160 / BUILD_ENERGY = 240),
具体节拍不写死数字。
蓝图执行
TileConstructionMarker 是 Builders 链路的自动施工端:
与需要玩家手持 Builder 手动放置不同,
Construction Marker 接收激光信号后自动按蓝图铺方块。
laser 字段(LaserData,:47)承接来自 Laser 的连线。
GUI / Container
没有 GUI,也没有 Container(BuildersGuiHandler 无 ConstructionMarker 分支)——
它靠激光与命令(ICommandReceiver)驱动,不是点界面操作。
NBT
writeToNBT(:134)— 蓝图、box、方向全部落盘readFromNBT(:157)— 读回
网络封包
initialize()(:58)内注册了一个内部写包回调(:70 public void write(ByteBuf data)),
把蓝图数据按 ByteBuf 协议发出。
这是Construction Marker 专有的封包路径(不是通用 NBT 同步)。