控制面板

[!INFO] 源码: ControlPanelItem.java(物品)/ ControlPanelPart.java(部件)/ ControlPanelMaterial.java

Project Blue 的核心物品与核心部件。一个控制面板是一个 CodeChicken multipart 部件(pb_controlpanel),贴在方块任意一个面上,内含可缩放的开关/按钮/灯阵列,通过 Project Red 的 Bundled Cable 收发 16 通道信号。

注册信息

项 值
物品注册名 gcewing_projectblue:controlPanel
物品类 ControlPanelItem extends ItemMultiPartJ
部件类型名 pb_controlpanel(MultiPartRegistry.registerParts)
部件类 ControlPanelPart extends PBFacePart,实现 IConnectable、IBundledEmitter
最大堆叠 64(Item 默认,未覆盖)
创造模式子项 3 个:tile.wood 的 4×4 / 3×3 / 2×2
显示名 本地化名 + (4x4) 尺寸后缀
Tooltip Made from <基材本地化名>

尺寸变体

2×2 / 3×3 / 4×4 三档,详见 控制面板尺寸变体。

尺寸 gridSize 格子数
4×4 4 16
3×3 3 9
2×2 2 4

安装方式(mounting)

值 模式 说明
0 flush 嵌入式,与方块面齐平
1 surface 表面安装,贴附在方块外侧(surfaceMountRotation = rotZ(180))

放置时由 FacePlacementGrid.getHitSlot(vhit, sideHit) 判定:若放置槽位 == 点击面(slot == sideHit ^ 1)则 surface,否则 flush;flush 且 slot <= 1 时 rot ^= 2。

用潜行 + 螺丝刀可随时切换(见 控制面板交互动作)。

基材(ControlPanelMaterial)

面板外观与可放置的 BLANK 盖板由微方块材质名决定,存 NBT 字符串 mat:

  • 默认材质名 tile.wood
  • ControlPanelMaterial.forName 通过 MicroMaterialRegistry.getMaterial(name) 解析为 Block + metadata
  • 解析不到时回退为 Blocks.planks meta 0(不报错)
  • 允许任何 ForgeMicroblock 材质,所以理论上任意方块都能做面板

物品 NBT 默认结构(ControlPanelMaterial.newStack):mat、controlTypes、controlMetadata、controlStates、channelColors、labels(32 个空串)、gridSize。

通道与颜色

每个格子有独立的 channelColors[i](0–15),决定它监听/输出哪一路 bundled 信号。

  • 默认 channelColors[i] = i(格子 i 绑定通道 i)
  • 用喷漆罐或染料点击可改(详见 控制面板交互动作)
  • 用喷漆罐颜色 16(去漆)会把通道重置为 setChannelColor(i, i),即「按格号自动」

标签文字

每格可编辑 2 行文字,每行最多 6 个字符(ControlPanelLabelScreen.numLines = 2、maxLength = 6)。

  • 用木炭点击格子打开 ControlPanelLabelScreen
  • 上下键 / 回车切换行,退格删除,Esc 关闭(关闭不提交以外的校验)
  • 光标以 > < 包裹并每 6 次 tick 闪烁
  • 输入通过 ProjectBlueChannel 的 EDIT_CONTROL_PANEL_TEXT / UPDATE_CONTROL_PANEL_TEXT 同步

合成

制作面板

2×2(CraftControlPanel):

[石锯] [空]
[空]   [空心盖板]
  • 石锯 = ForgeMicroblock 的 sawStone
  • 空心盖板 = itemMicroPart 且 meta == hollowCoverMeta(257)

调整尺寸

2×2,「石锯 + 面板」循环 4→3→2→4,见 控制面板尺寸变体。

制作微型控件

2×2,「石锯 + 全身尺寸控件」→ 8 个微型件(CraftMiniatureItem)。原料对应关系:

原料 产物 meta
原版拉杆 miniatureLever 16
原版石头按钮 miniatureButton 16
原版木头按钮 miniatureButton 17
Project Red Illumination fixture miniatureLamp 同 meta
盖板(meta 1) miniatureCover 带 mat NBT

NBT 字段

键 类型 说明
mat String 基材的微方块材质名
gridSize int 2/3/4
controlTypes byte[16] 每格控件类型 ordinal
controlMetadata byte[16] 每格控件附加数据(放置时的 meta)
controlStates byte[16] 每格当前状态
channelColors byte[16] 每格通道色
labels List[32] 16 格 × 2 行的字符串

部件额外持久化(不进物品):side、rot、mounting、connectionMask。

网络同步

部件用 writeDesc / readDesc 做增量同步:基材名 + mounting + gridSize + 每格 4 字节 + 2 个标签串。信号变化通过 changed() → markDirty() + sendDescUpdate()。

相关