User Tools

Site Tools


zh_cn:tutorial:keybinds

自定义按键绑定

键盘绑定:直接从键盘输入

Minecraft 用按键绑定功能来处理从键盘和鼠标等外部设备获取的用户输入。按下 W,角色就会向前走,按下 E,物品栏就会打开。每个绑定也都可以在设置菜单中配置,所以你可以用箭头键替代 WASD 来移动。

学习这篇教程前,需要配置好按键绑定 API,如果还没有配置好,在 fabric.mod.json 文件 "depends" 块中加入 "fabric-key-binding-api-v1": "*"

添加按键绑定很简单,只需要:

  • 打开或者创建一个客户端入口点
  • 创建按键绑定对象
  • 键按下时作出反应

这里有更新的实例。

准备入口点

如果你已经创建好了客户端的入口点,而且明白它的工作原理,可以放心快进到下一部分。否则接着了解一下。

想要创建客户端入口点,需要先做几件事,来让 Fabric 知道我们想要写一些只需要在物理客户执行的代码。简单示范一下,我们创建一个叫做 ExampleClientEntrypoint 的类,其实一般都会把这个类命名为“mod 名称”+“Client”,比如 YoYoDeleriumClientHappySheepHammocksClient。看一眼代码,然后我们解释一下发生了什么:

/* package */
/* imports */
 
public class ExampleClientEntrypoint implements ClientModInitializer {
 
    // The KeyBinding declaration and registration are commonly executed here statically
 
    @Override
    public void onInitializeClient() {
 
        // Event registration will be executed inside this method
    }
}

那么,我们到底在干什么?大多数情况下,Fabric 的入口点是通过实现一个特殊的接口来指定的,这个接口只针对应该运行入口点中的代码的客户端或服务端。对于我们的客户端,只需让我们的类实现 “ClientModInitializer”接口。这个接口要求我们重写(“@Override”)“onInitializeClient”这个方法。正是在这个方法(以及其他入口点的对应方法)中,我们会经常调用 Fabric API 提供的方法,以方便注册和添加我们可能希望在 mod 中拥有的一些对象和行为。当然,我们还需要更新 fabric.mod.json,以包括新创建的入口点,所以如果你需要复习这个过程,请务必查阅入口点页面。

创建按键绑定

在你喜欢的地方声明:

private static KeyBinding keyBinding;

FabricKeyBinding 有一个用于初始化的 Builder。它需要 Identifier、InputUtil.Type、按键编码和绑定类别作为参数:

keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
    "key.examplemod.spook", // The translation key of the keybinding's name
    InputUtil.Type.KEYSYM, // The type of the keybinding, KEYSYM for keyboard, MOUSE for mouse.
    GLFW.GLFW_KEY_R, // The keycode of the key
    "category.examplemod.test" // The translation key of the keybinding's category.
));

需要粘滞键的话,加上 () → true 作为最后一个参数。

GLFW.GLFW_KEY_R 可以用任意你想要绑定默认的键替代。类别与设置页面中按键绑定的分组相关。

对按键绑定作出反应

下面的代码会在聊天栏里显示“Key 1 was pressed!”。

ClientTickEvents.END_CLIENT_TICK.register(client -> {
    while (keyBinding.wasPressed()) {
	client.player.sendMessage(new LiteralText("Key 1 was pressed!"), false);
    }
});

请注意,这些完全是客户端的事情。要让服务器响应一个按键绑定,你需要发送一个自定义数据包,让服务器另外处理。

zh_cn/tutorial/keybinds.txt · Last modified: 2024/01/02 10:36 by 194.99.79.89