控制面板尺寸变体
[!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面板