Назначения клавиш 26.1.2
Создание назначений клавиш и обработка их нажатий.
Minecraft обрабатывает ввод пользователя с периферийных устройств, таких как клавиатура и мышь, с помощью назначений клавиш (key mappings). Многие из этих назначений можно настроить через меню настроек.
С помощью Fabric API вы можете создавать свои собственные назначения клавиш и реагировать на них в своем моде.
Назначения клавиш существуют только на стороне клиента. Это означает, что регистрация и обработка нажатий должны выполняться на стороне клиента. Для этого вы можете использовать клиентский инициализатор (client initializer).
Создание назначения клавиши
Назначение клавиши состоит из двух частей: привязки к конкретной клавише и категории, к которой она относится.
Давайте начнем с создания категории. Категория определяет группу назначений клавиш, которые будут отображаться вместе в меню настроек.
java
KeyMapping.Category CATEGORY = KeyMapping.Category.register(
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "custom_category")
);1
2
3
2
3
Затем мы можем создать само назначение клавиши. Мы будем использовать класс KeyMappingHelper из Fabric API, чтобы одновременно зарегистрировать наше назначение.
java
KeyMapping sendToChatKey = KeyMappingHelper.registerKeyMapping(
new KeyMapping(
"key.example-mod.send_to_chat", // The translation key for the key mapping.
InputConstants.Type.KEYSYM, // The type of the keybinding; KEYSYM for keyboard, MOUSE for mouse.
GLFW.GLFW_KEY_J, // The GLFW keycode of the key.
this.CATEGORY // The category of the mapping.
));1
2
3
4
5
6
7
2
3
4
5
6
7
INFO
Обратите внимание, что названия токенов клавиш (GLFW.GLFW_KEY_*) подразумевают стандартную раскладку США.
Это означает, что если вы используете раскладку AZERTY, нажатие на клавишу A вернет значение GLFW.GLFW_KEY_Q.
Залипающие клавиши (sticky keys) также можно создать с помощью KeyMappingHelper, передав экземпляр ToggleKeyMapping вместо обычного KeyMapping.
После регистрации вы сможете найти свои назначения клавиш в меню: Настройки > Управление > Назначение клавиш (Options > Controls > Key Binds).

Переводы
Вам нужно будет добавить переводы как для самого назначения клавиши, так заглавия категории.
Ключ перевода для названия категории имеет вид key.category.<namespace>.<path>. Ключом перевода для назначения клавиши будет тот, который вы указали при его создании.
Переводы можно добавить вручную или с помощью генерации данных.
json
{
"key.category.example-mod.custom_category": "Example Mod Custom Category",
"key.example-mod.send_to_chat": "Send to Chat"
}1
2
3
4
2
3
4

Обработка нажатий клавиш
Теперь, когда у нас есть назначение клавиши, мы можем реагировать на его активацию с помощью события клиентского тика (client tick event).
java
ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (this.sendToChatKey.consumeClick()) {
if (client.player != null) {
client.player.sendSystemMessage(Component.literal("Key Pressed!"));
}
}
});1
2
3
4
5
6
7
2
3
4
5
6
7
Этот код будет выводить сообщение «Key Pressed!» в игровой чат при каждом нажатии привязанной клавиши. Имейте в виду, что удержание клавиши будет циклически отправлять сообщение в чат. Вам может потребоваться реализовать проверки (guards), если эта логика должна срабатывать строго один раз за нажатие.


