Minecraft 用按键绑定功能来处理从键盘和鼠标等外部设备获取的用户输入。按下 W,角色就会向前走,按下 E,物品栏就会打开。每个绑定也都可以在设置菜单中配置,所以你可以用箭头键替代 WASD 来移动。
学习这篇教程前,需要配置好按键绑定 API,如果还没有配置好,在 fabric.mod.json 文件 "depends"
块中加入 "fabric-key-binding-api-v1": "*"
。
添加按键绑定很简单,只需要:
这里有更新的实例。
如果你已经创建好了客户端的入口点,而且明白它的工作原理,可以放心快进到下一部分。否则接着了解一下。
想要创建客户端入口点,需要先做几件事,来让 Fabric 知道我们想要写一些只需要在物理客户侧执行的代码。简单示范一下,我们创建一个叫做 ExampleClientEntrypoint
的类,其实一般都会把这个类命名为“mod 名称”+“Client”,比如 YoYoDeleriumClient
、HappySheepHammocksClient
。看一眼代码,然后我们解释一下发生了什么:
/* 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); } });
请注意,这些完全是客户端的事情。要让服务器响应一个按键绑定,你需要发送一个自定义数据包,让服务器另外处理。