User Tools

Site Tools


ru:tutorial:keybinds

Привязка клавиш

Привязки клавиш: прямо с клавиатуры

Minecraft обрабатывает пользовательский ввод с периферийных устройств, таких как клавиатура и мышь, с помощью привязки клавиш. Когда вы нажимаете W, ваш персонаж движется вперед, а когда вы нажимаете E, открывается ваш инвентарь. Каждая привязка клавиш также может быть настроена с помощью меню настроек, так что вы можете заставить свой плеер двигаться с помощью клавиш со стрелками вместо WASD, если хотите.

В этом руководстве предполагается, что у вас есть API привязок ключей, если не добавить "fabric-key-binding-api-v1": "*" в блок "depends" в вашем файле fabric.mod.json.

Добавить привязку к ключу несложно. Вам нужно будет:

  • открыть или создать точку входа клиента
  • создать объект KeyBinding
  • создать реакцию на нажатие клавиши

Смотрите это для обновленного примера.

Подготовка точки входа

Если у вас уже создана точка входа в клиент и вы знакомы с тем, как она работает, вы можете смело переходить к следующему разделу. В противном случае, оставайтесь здесь для краткого обзора!

Чтобы создать точку входа клиента, нам нужно будет выполнить несколько разных действий, чтобы сообщить Fabric, что мы намерены указать код, который должен выполняться только физическим клиентом (side). Мы создадим краткий пример класса под названием ExampleClientEntrypoint, но обычной практикой было бы назвать класс “YourModName”, за которым следует “Client”, например YoYoDeleriumClient или HappySheepHammocksClient. Давайте взглянем на код, а затем объясним, что происходит:

  1. /* package */
  2. /* imports */
  3.  
  4. public class ExampleClientEntrypoint implements ClientModInitializer {
  5.  
  6. // Объявление и регистрация привязки ключей обычно выполняются здесь статически
  7.  
  8. @Override
  9. public void onInitializeClient() {
  10.  
  11. // Регистрация события будет выполнена внутри этого метода
  12. }
  13. }

Итак, что мы здесь делаем? Точки входа в структуру для большинства вариантов использования назначаются путем реализации специального интерфейса, уникального для стороны или сторон, на которых должен выполняться код в точке входа. Для нашего клиента у нас просто есть наш класс, реализующий интерфейс ClientModInitializer. Интерфейс требует, чтобы мы поставили @Override на один метод, onInitializeClient. Именно в этом методе (и эквивалентах из других точек входа соответственно) мы часто будем вызывать методы, предоставляемые Fabric API , для простой регистрации и добавления некоторых объектов и поведений, которые мы, возможно, пожелаем иметь в нашем моде. Конечно, нам также потребуется обновить наш fabric.mod.json , чтобы включить нашу недавно созданную точку входа, поэтому обязательно обратитесь к странице точек входа, если вам нужно обновить этот процесс.

Создание вашей привязки ключей

Объявите один из них в области, которую вы предпочитаете:

private static KeyBinding keyBinding;

FabricKeyBinding has a Builder for initialization. It takes in an Identifier, InputUtil.Type, key code, and binding category:

  1. keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
  2. "key.examplemod.spook", // Ключ перевода имени привязки ключей
  3. InputUtil.Type.KEYSYM, // Тип привязки клавиш, KEYSYM для клавиатуры, MOUSE для мыши.
  4. GLFW.GLFW_KEY_R, // Ключевой код ключа
  5. "category.examplemod.test" // Ключ перевода категории привязки ключей.
  6. ));

Если вам нужен фиксированный ключ, добавьте () → true в качестве последнего параметра.

GLFW.GLFW_KEY_R можно заменить любым ключом, который вы хотите, чтобы привязка была установлена по умолчанию. Категория связана с тем, как привязка клавиш сгруппирована на странице настроек.

Реакция на вашу привязку ключей

Приведенный здесь код выведет сообщение “Клавиша 1 была нажата!”.

ClientTickEvents.END_CLIENT_TICK.register(client -> {
    while (keyBinding.wasPressed()) {
	client.player.sendMessage(new LiteralText("Клавиша 1 была нажата!"), false);
    }
});

Имейте в виду, что это полностью на стороне клиента. Чтобы сервер ответил на привязку ключей, вам нужно будет отправить пользовательский пакет и попросить сервер обработать его отдельно.

ru/tutorial/keybinds.txt · Last modified: 2022/03/22 22:46 by furnygo