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 同步)。

相关条目