控制面板尺寸变体

[!INFO] 源码: src/main/scala/gcewing/projectblue/ControlPanelRecipes.java (ResizeControlPanel)、ControlPanelItem.java:85

Project Blue 没有电压等级;它的变体族是控制面板的网格尺寸。面板支持 2×2 / 3×3 / 4×4 三种尺寸,通过「石锯 + 面板」循环切换。

尺寸对照表

尺寸 gridSize 格子数 gridSize*gridSize 活跃格子索引 存储槽位 可接收通道数(受 channelColors 限制)
4×4 4 16 0–15 16 16
3×3 3 9 0–8 16 16
2×2 2 4 0–3 16 16

关键机制:内部数组恒为 16 长。 controlTypes / controlStates / controlMetadata / channelColors / releaseTime / signal 全部 new byte[16],labels 为 String[16][2]。gridSize 只决定循环上界(int totalCells = gridSize * gridSize),不改变存储。

这意味着缩小面板不会丢失已经放在索引 4–15 的控件数据 —— 但这些格子不再被 getInputs()、getBundledSignal()、scheduledTick() 遍历,处于休眠状态。切回大尺寸即恢复。

尺寸循环

ResizeControlPanel.getNextSize:

当前 切换后
4 3
3 2
其他 4

即 4 → 3 → 2 → 4 → … 循环(ResizeControlPanel.java:195-199)。NEI 反查用 getPrevSize(2→3、3→4、其他→2)。

合成配方

ResizeControlPanel 是 2×2 无序自定义配方(实际只占 2 格):

[石锯] [空]
[空]   [面板]

除左上(石锯)和右下(面板)外,其余格必须为空(ResizeControlPanel.java:167-173)。输出是原物品的副本,只改 NBT 里的 gridSize,其余 NBT(材质、控件、标签、通道色)全部保留。数量为 1。

面板本体

尺寸 vs 变量名

  • 物品 NBT 字段:gridSize(int),缺失时默认 4(ControlPanelItem.getGridSize)
  • 部件 NBT 字段:gridSize(int),缺失时默认 4(ControlPanelPart.load)
  • 显示名:物品 tooltip 追加 (4x4) 之类后缀(ControlPanelItem.getItemStackDisplayName)
  • 创造模式枚举:三种尺寸各出一个 tile.wood 面板