TileZonePlan

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

注册信息

属性 值 来源
TileEntity 注册名 net.minecraft.src.buildcraft.commander.TileZonePlan BuildCraftRobotics.java:322-323
注册类 buildcraft.robotics.TileZonePlan 同上
所属 modid BuildCraft|Robotics BuildCraftRobotics.java:154 @Mod
关联方块 Zone Plan 方块(注册变量 zonePlanBlock) BuildCraftRobotics.java:323 同块
父类 TileBuildCraft robotics/TileZonePlan.java:34
实现接口 IInventory 同上
是否配置门控 否(BuildCraftRobotics.java:323 无条件调用) 同上

⚠️ 类在 buildcraft.robotics 包,注册名却是 buildcraft.commander. 前缀—— Commander 是 Robotics 的历史子模块名,两处不一致。

槽位数量与布局

robotics/TileZonePlan.java:46:

private final SimpleInventory inv = new SimpleInventory(3, "inv", 64);

即 3 个槽位,单槽上限 64,内部名 "inv"。

槽位 用途
0 ItemMapLocation(空白地图)——放进去才会触发 CRAFT_TIME 合成(:84-85)
1 朝向 / 参数(必须为空才触发合成)
2 蓝图 / 模板

⚠️ 只有 3 槽,且触发合成的条件是「槽 0 有地图 且 槽 1 为空」(:84-85), 不是「输入 / 输出 / 蓝图」的标准三段式。

处理速率 / 耗时(本篇核心常量)

robotics/TileZonePlan.java:36-39:

public static final int RESOLUTION = 2048;
public static final int CRAFT_TIME = 120;
private static final int PREVIEW_BLOCKS_PER_PIXEL = 10;
public static final int RESOLUTION_CHUNKS = RESOLUTION >> 4;
常量 值 含义
RESOLUTION 2048 规划图纸的边长(方块):覆盖 2048×2048 的区域
CRAFT_TIME 120 合成一张「地图物品」耗时 120 tick = 6 秒(见下方说明)
PREVIEW_BLOCKS_PER_PIXEL 10 预览图每像素代表 10 个方块
RESOLUTION_CHUNKS RESOLUTION >> 4 = 128 2048÷16 = 128 个区块的范围

⚠️ CRAFT_TIME = 120 是「画一张地图」的耗时,不是「放置方块」的耗时。 使用点在 robotics/TileZonePlan.java:87-94:

if (progress < CRAFT_TIME) {      // :87
    progress++;
    ...
} else {
    ItemStack stack = inv.decrStackSize(0, 1);          // :94 扣掉 1 个地图
    ItemMapLocation.setZone(stack, selectedAreas[currentSelectedArea]);  // :97

触发条件是槽 0 有 ItemMapLocation(空白地图)且槽 1 为空(:84-85)。 即:放入地图 → 等 120 tick → 地图被写入当前选中的规划区域并改名,地图被扣掉 1 个。

⚠ 把 120 说成「放一个方块要 6 秒」或「画完整张图纸要 6 秒」都是编造。

⚠️ PREVIEW_BLOCKS_PER_PIXEL 与 RESOLUTION 是两套量纲: 预览按 10 格/像素压缩,RESOLUTION 是真实的方块边长,两者不能相乘当成「预览总像素」。

区块范围计算在 :68-69:chunkStartX = cx - RESOLUTION_CHUNKS / 2;(Y 轴同理), 即以自身为中心向两侧各展开 128 / 2 = 64 个区块。

GUI / Container 配对

GUI 类 Container 类 配对处
buildcraft.robotics.gui.GuiZonePlan buildcraft.robotics.gui.ContainerZonePlan robotics/RoboticsGuiHandler.java:35

网络封包

Zone Plan 需要传大量坐标数据(2048 范围的规划点),走 TileEntity 的 ISyncedTile / NBT 同步路径。无独立的 Robotics 专用封包 ID。

相关条目