键位

基本信息

属性 值
定义类 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)。

相关条目

  • 工具模式 - Execute 键与 Ctrl+滚轮的分派目标
  • 配置项 - toolItem 决定何时启用工具鼠标拦截