用户输入
这一节中我们将来学习如何获取用户输入。这里我们将以快捷键举例。请注意,所有的用户输入都是客户端行为。
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class KeyBoardInput {
public static final KeyBinding MESSAGE_KEY = new KeyBinding("key.message",
KeyConflictContext.IN_GAME,
KeyModifier.CONTROL,
InputMappings.Type.KEYSYM,
GLFW.GLFW_KEY_J,
"key.category." + Utils.MOD_ID);
@SubscribeEvent
public static void onKeyboardInput(InputEvent.KeyInputEvent event) {
if (MESSAGE_KEY.isPressed()) {
assert Minecraft.getInstance().player != null;
Minecraft.getInstance().player.sendMessage(new TranslationTextComponent("message." + Utils.MOD_ID + ".press"), Minecraft.getInstance().player.getUniqueID());
}
}
}
首先我们创建了一个KeyBinding
,这个就是一个可以配置的快捷键,具体的参数非常简单,这里就不多加说明了,别忘了value = Dist.CLIENT
,因为用户输入是物理客户端才有的东西。
可以看到,我们监听了Forge总线上的InputEvent.KeyInputEvent
,即键盘输入事件。InputEvent
下还有其他子事件,大家可以按需选用。在这里我们判断当我的快捷键按下时,给玩家发送一个消息。
当然我们还需要注册我们的快捷键。
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public class KeybindingRegistry {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event) {
event.enqueueWork(() -> ClientRegistry.registerKeyBinding(KeyBoardInput.MESSAGE_KEY));
}
}
因为按钮按下是个客户端行为,所有这里我们选用FMLClientSetupEvent
事件,在里面调用ClientRegistry.registerKeyBinding
方法注册我们的快捷键,同样的在这里别忘了value = Dist.CLIENT
。
打开游戏按下我们之前设置的快捷键,就可以看到我们的消息了。
注:因为我的系统时macOS,所以这里显示的是CMD。