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。