GUI 工具箱 (Toolbox)

基本信息

属性 值
注册表 betterquesting.client.toolbox.ToolboxRegistry(单例 INSTANCE)
页签 betterquesting.client.toolbox.ToolboxTabMain(单例)
页签注册 ClientProxy.java:75-76,ID 为 betterquesting:main
工具面板 betterquesting.client.toolbox.PanelTabMain
工具数 12
吸附档位 8 档:1, 4, 6, 8, 12, 16, 24, 32(像素)
消费界面 client.gui2.editors.designer.GuiDesigner
API 键 ApiReference.TOOL_REG(仅客户端)

功能

工具箱是整合包作者的可视化任务设计器:在游戏内拖拽摆放任务节点、连线建立依赖、拉框圈定区域。它只在编辑模式(世界属性 EDIT_MODE,默认 true)且玩家具备 OP 权限时可用(判定见 世界任务设置)。

ToolboxRegistry 只有一个 API 概念 —— 页签:

void registerToolTab(ResourceLocation tabID, IToolTab tab);

注意 IToolRegistry 里工具级注册方法是被注释掉的:api2/client/toolbox/IToolTab.java:13 处留着 // void registerTool(IToolboxTool tool, ResourceLocation icon);。也就是说当前版本只支持页签级扩展,单个工具的注册入口被刻意关闭了。

GuiDesigner 在初始化时把 ToolboxRegistry.INSTANCE.getAllTabs() 全部加入页签列表(GuiDesigner.java:59)。

12 个工具

PanelTabMain 构造工具条目(PanelTabMain.java:167-244),每个条目由「工具实例 + 主题图标 + 提示文本」组成(内部类 ToolEntry,PanelTabMain.java:153-160):

# 工具类 文件 语义(由类名与所在上下文判定)
1 ToolboxToolOpen client/toolbox/tools/ToolboxToolOpen.java 打开/选中节点(PanelTabMain.java:117 对它有特殊分支:当它是 activeTool 时行为不同)
2 ToolboxToolNew 同目录 新建
3 ToolboxToolGrab 同目录 抓取/移动
4 ToolboxToolLink 同目录 建立依赖连线
5 ToolboxToolCopy 同目录 复制
6 ToolboxToolScale 同目录 缩放(对应 QuestLineEntry 的 sizeX / sizeY)
7 ToolboxToolDelete 同目录 删除
8 ToolboxToolRemove 同目录 移除(解除依赖,不删节点)
9 ToolboxToolComplete 同目录 标记完成
10 ToolboxToolReset 同目录 重置
11 ToolboxToolIcon 同目录 改图标(NativeProps.ICON)
12 ToolboxToolFrame 同目录 拉框

表中第 1–12 项的类名与文件路径取自 PanelTabMain.java:167-244 的实际 new ToolboxTool*() 调用与对应 import;「语义」一列是按类名的直译,各工具的精确交互规则无法从本条目单独核实(需读每个 ToolboxTool* 类的实现)。

网格吸附

ToolboxTabMain 用一个整型索引在 8 档吸附值间循环(ToolboxTabMain.java:18-19):

  • toggleSnap() —— dragSnap = (dragSnap + 1) % snaps.length(:31-33)
  • getSnapValue() —— snaps[dragSnap % snaps.length](:35-37)
  • getSnapIndex() —— 返回原始索引(:39-41)
  • drawGrid(CanvasQuestLine) —— 吸附值为 1 时直接 return 不画网格(:43-44);否则按缩放系数 ui.getZoom() 偏移绘制网格线(:46-59)

网格偏移用 ((offX % snap + snap) % snap) * zs 的双重取模实现,兼容负向滚动(ToolboxTabMain.java:50-55)。

数值

数值名 值
工具数 12
注册的页签数 1(betterquesting:main)
吸附档位数 8
吸附值序列 1, 4, 6, 8, 12, 16, 24, 32
吸附值 1 的行为 不绘制网格(等同关闭吸附)
页签级扩展 可用
工具级扩展 不可用(IToolTab.java:13 处注册方法被注释)

相关条目

  • 导入器 - 工具箱相邻的另一套编辑期功能:把外部任务包转成 BQ 格式
  • 主题 - 每个工具按钮的图标经 THEME_REG / RESOURCE_REG 解析
  • 世界任务设置 - EDIT_MODE + NameCache.isOP 决定工具箱是否可用
  • 任务数据模型 - 工具箱编辑的正是 QuestLineEntry 的 pos/size 与 IQuest 的依赖集合