键位
基本信息
| 属性 | 值 |
|---|---|
| 定义类 | com.github.lunatrius.schematica.handler.client.InputHandler |
| 键位总数 | 5(InputHandler.KEY_BINDINGS,handler/client/InputHandler.java:54-56) |
| 注册位置 | ClientProxy 中 for (KeyBinding keyBinding : InputHandler.KEY_BINDINGS) ClientRegistry.registerKeyBinding(keyBinding)(proxy/ClientProxy.java:347-348) |
| 分类键 | Names.Keys.CATEGORY = schematica.key.category,英文原文 Schematica(reference/Names.java:232、assets/schematica/lang/en_US.lang:136) |
| 触发条件 | 仅当 minecraft.currentScreen == null(无 GUI 打开)时响应(handler/client/InputHandler.java:64) |
数值
| 键位 | 常量 | 默认键 | 翻译键 | 作用 |
|---|---|---|---|---|
| Save schematic | KEY_BINDING_SAVE |
Keyboard.KEY_N |
schematica.key.save |
打开保存 GUI GuiSchematicSave(:33-36、:65-67) |
| Manipulate schematic | KEY_BINDING_CONTROL |
Keyboard.KEY_M |
schematica.key.control |
打开控制 GUI GuiSchematicControl(:37-40、:69-71) |
| Next Layer | KEY_BINDING_LAYER_INC |
Keyboard.KEY_NONE(未绑定) |
schematica.key.layerInc |
渲染层 +1(:41-44、:73-80) |
| Previous layer | KEY_BINDING_LAYER_DEC |
Keyboard.KEY_NONE(未绑定) |
schematica.key.layerDec |
渲染层 -1(:45-48、:82-89) |
| Execute Operation | KEY_BINDING_EXECUTE |
Keyboard.KEY_RETURN |
schematica.key.execute |
执行当前工具模式的操作(:49-52、:91-95) |
⚠️ 默认键码是 LWJGL 库常量(org.lwjgl.input.Keyboard),其数值定义在 LWJGL jar 内,不在本仓库源码中。此处只记录符号名,数值无法在本仓库内核实。
交互
渲染层键位
LAYER_INC / LAYER_DEC 仅在已加载蓝图且 schematic.isRenderingLayer 为真时生效(handler/client/InputHandler.java:75、:84),并用 MathHelper.clamp_int(renderingLayer ± 1, 0, height - 1) 夹取到合法范围后调 RendererSchematicGlobal.INSTANCE.refresh() 重绘(:76-79、:85-88)。
两个键位默认都是 Keyboard.KEY_NONE(未绑定),玩家需自行在选项→控制中设置。
Execute 键位
KEY_BINDING_EXECUTE 先检查 ToolManager.isHoldingToolItem()(handler/client/InputHandler.java:92),只有手持配置的工具物品时才调 ToolHandler.onExecute(thePlayer)(:93)。分派逻辑见 工具模式。
工具物品的鼠标拦截(独立于本键位表)
手持工具物品时,handler/client/ToolItemHandler.java 通过 net.minecraftforge.client.event.MouseEvent 拦截鼠标输入(注册在 MinecraftForge.EVENT_BUS,见该文件 :25 注释):
| 输入 | 行为 | 来源 |
|---|---|---|
| 左键(button 0) | event.setCanceled(true) 后调 ToolManager.onToolAttack |
handler/client/ToolItemHandler.java:53-58 |
| 右键(button 1) | event.setCanceled(true) 后调 ToolManager.onToolUse |
:62-67 |
| Ctrl + 滚轮 | cycleMode(dwheel < 0) 切换工具模式 |
:71-79 |
所有被拦截的事件都 setCanceled(true),以阻止原版的攻击/放置/快捷栏切换(:22-23、:80)。持有 Ctrl 判定为 Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)(:72-73);未按 Ctrl 时不取消事件,滚轮仍走原版快捷栏切换(:80-81)。