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 处注册方法被注释) |