面板显示设置

[!INFO] 源码 src/main/java/com/neirecipepanels/PanelSettings.java、client/GuiRecipePanelConfig.java

每个已放置的面板可以单独改两样东西:顶部标题文字、以及背景是否透明。这些设置存在 TileEntity 的 cfg NBT 标签里,跟着面板走。

设置项

字段 NBT 键 类型 默认 上限 说明
customName name String ""(空) 48 字符 自定义标题。为空时用 NEI handler 自己报的配方名
transparent transparent boolean false — 背景是否透明

PanelSettings.MAX_NAME = 48。trim(name) 在 null 时返回 "",超过 48 字符则截断到 48——服务端与客户端都走这个方法,所以长度上限在两端一致。

toNBT() 是稀疏写入:空标题不写 name,transparent 为 false 时不写 transparent。isEmpty() 判断两者都处于默认态时 setSettings(null) 生效(RecipePanelTile.setSettings 会把空标签也归一为 null),避免给每个面板都塞一份空配置。

配置界面

在 配方面板方块 上潜行右键打开 GuiRecipePanelConfig(由 RecipePanelBlock.onBlockActivated 判断 player.isSneaking() 分流)。

界面元素:

控件 位置 说明
标题文字 屏幕正中上方 neirecipepanels.config.title = Recipe Panel
名称标签 输入框上方 neirecipepanels.config.name = Name
文本输入框 cx-100, height/2-30,200×20 setMaxStringLength(PanelSettings.MAX_NAME),默认聚焦
背景按钮(id 1) cx-100, height/2,200×20 文字在 Shown / Hidden 之间切换
完成按钮(id 0) cx-100, height/2+28,200×20 gui.done

背景按钮的两种文案:

状态 键 文本
有背景 neirecipepanels.config.background.shown Background: Shown
透明 neirecipepanels.config.background.hidden Background: Hidden

按键行为:ESC 或回车/小键盘回车(输入框聚焦时)直接关闭;nameField.textboxKeyTyped 转发其余按键。initGui / onGuiClosed 各自调 Keyboard.enableRepeatEvents(true/false) 管理长按重复。

doesGuiPauseGame() 返回 false,所以单机世界不会因为开着这个界面而暂停。

什么时候才真的发包

onGuiClosed 里先比较新旧值:标题先 trim() 空白再截断,然后

  • name.equals(initialName) && transparent == initialTransparent → 直接返回,一个包都不发
  • 有任一变化 → NeiRecipePanels.NETWORK.sendToServer(new ConfigurePanelMessage(tile.xCoord, tile.yCoord, tile.zCoord, name, transparent))

也就是关掉界面即提交,没有单独的"保存"按钮。服务端收到后的校验见 刻印流程 的 ConfigurePanelMessage.Handler.apply(含 8 格距离上限)。

设置在画面上的体现

两个字段都由 面板渲染管线 消费:

  • customName 非空 → drawNamePlate 画它;否则用 frozen.recipeName(来自 handler.getRecipeName())
  • transparent = false → 先画九宫格拉伸的原版 textures/gui/demo_background.png 作背景,标题用实色
  • transparent = true → 跳过背景绘制,标题改用 drawStringWithShadow(阴影保证压在墙面上仍可读),且只把各材料格的矩形区域回填为不透明

PanelFboManager.Panel.isStale 用 NBT 标签的对象身份判断是否需要重绘,所以改设置会立刻触发一次重渲染。

相关条目