Minecraft обробляє введення користувачами з периферійних пристроїв, таких як клавіатура та миша, використовуючи призначення клавіш. Багато з цих призначень клавіш можна налаштувати через меню налаштувань.
За допомогою Fabric API ви можете створювати власні користувацькі призначення клавіш і реагувати на них у своєму моді.
Призначення клавіш існують лише на стороні клієнта. Це означає, що реєстрація та реакція на призначення клавіш має виконуватися на стороні клієнта. Для цього можна використовувати ініціалізатор клієнта.
Створення призначень клавіш
Призначення клавіш складається з двох частин: призначення ключа та категорії, до якої воно належить.
Почнімо зі створення категорії. Категорія визначає групу призначень клавіш, які видно в меню налаштувань.
java
KeyMapping.Category CATEGORY = new KeyMapping.Category(
Identifier.fromNamespaceAndPath(ExampleMod.MOD_ID, "custom_category")
);1
2
3
2
3
Далі, ми маємо створити призначення клавіші. Ми будемо використовувати API Fabric KeyBindingHelper, щоб одночасно зареєструвати наше призначення клавіш.
java
KeyMapping sendToChatKey = KeyBindingHelper.registerKeyBinding(
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.
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.
Закріплені клавіші також можна створити за допомогою KeyBindingHelper, передавши екземпляр ToggleKeyMapping замість KeyMapping.
Після реєстрації ви зможете знайти призначення клавіші у Налаштування > Керування > Призначення клавіш.

Переклад
Вам потрібно буде надати переклади як для призначення, так і для категорії.
Ключ перекладу імені категорії приймає форму 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

Реагування на призначення клавіші
Тепер, коли у нас є призначення клавіші ми можемо реагувати на нього за допомогою події клієнта.
java
ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (sendToChatKey.consumeClick()) {
if (client.player != null) {
client.player.displayClientMessage(Component.literal("Key Pressed!"), false);
}
}
});1
2
3
4
5
6
7
2
3
4
5
6
7
Це надрукує «Клавіша натиснута!» до чату в грі кожного разу, коли натискається відповідна клавіша. Майте на увазі, що утримування клавіші призведе до повторного друку повідомлення в чаті, тому ви можете застосувати запобіжники, якщо ця логіка має спрацювати лише один раз.


