KeyMappings

With custom KeyMappings, clients can input from mouse and keyboards to do certain actions.

Note: The following code should only be executed from client.

Registering KeyMappings

We can register KeyMappings with KeyMappingRegistry.

First, let's create a KeyMapping:

// A key mapping with keyboard as the default
public static final KeyMapping CUSTOM_KEYMAPPING = new KeyMapping(
    "key.examplemod.custom_key", // The translation key of the name shown in the Controls screen
    InputConstants.Type.KEYSYM, // This key mapping is for Keyboards by default
    InputConstants.KEY_P, // The default keycode
    "category.examplemod.example" // The category translation key used to categorize in the Controls screen 
);
 
// A key mapping with mouse as the default
public static final KeyMapping CUSTOM_KEYMAPPING = new KeyMapping(
    "key.examplemod.custom_key", // The translation key of the name shown in the Controls screen
    InputConstants.Type.MOUSE, // This key mapping is for Mouse by default
    InputConstants.MOUSE_BUTTON_LEFT, // The default button
    "category.examplemod.example" // The category translation key used to categorize in the Controls screen 
);
 
// A key mapping with no default
public static final KeyMapping CUSTOM_KEYMAPPING = new KeyMapping(
    "key.examplemod.custom_key", // The translation key of the name shown in the Controls screen
    InputConstants.Type.KEYSYM, // This key mapping is for Keyboards by default
    -1, // The default keycode
    "category.examplemod.example" // The category translation key used to categorize in the Controls screen 
);

We can register the key mapping in a method now.

KeyMappingRegistry.register(CUSTOM_KEYMAPPING);

Listening to when the key is pressed

We will register a client tick event, and consume the key there.

ClientTickEvent.CLIENT_POST.register(minecraft -> {
	while (CUSTOM_KEYMAPPING.consumeClick()) {
        // Do action here
    }
});