Minecraft обрабатывает пользовательский ввод с периферийных устройств, таких как клавиатура и мышь, с помощью назначения клавиш. Когда вы нажимаете W, ваш персонаж движется вперёд, а когда вы нажимаете E, открывается ваш инвентарь. Назначение каждой клавиши может быть изменено в меню настроек, поэтому вы можете переназначить управление своим персонажем с WASD на стрелочки, если захотите.
В этом руководстве предполагается, что у вас есть Key Binding API, если нет — добавьте "fabric-key-binding-api-v1": "*"
в блок "depends"
в вашем файле fabric.mod.json.
Назначить новую клавишу несложно. Вам понадобится:
Обновлённый пример см. здесь.
Если у вас уже создана точка входа в клиент, и вы знакомы с тем, как она работает, вы можете смело переходить к следующему разделу. Если нет — оставайтесь с нами!
Чтобы создать точку входа для клиента, нам нужно будет выполнить несколько действий, чтобы дать Fabric знать, что мы хотим, чтобы определённый код выполнялся только на (стороне) физического клиента. Мы создадим краткий пример класса под названием ExampleClientEntrypoint
, но, как правило, такой класс называют “YourModName”, за которым следует “Client”, например YoYoDeleriumClient
или HappySheepHammocksClient
. Давайте взглянем на код и разберёмся, что происходит:
/* package */ /* imports */ public class ExampleClientEntrypoint implements ClientModInitializer { // Объявление и регистрация KeyBinding обычно выполняются здесь в статическом контексте @Override public void onInitializeClient() { // Регистрация события будет выполнена внутри этого метода } }
Итак, что мы здесь делаем? Точки входа в структуру для большинства вариантов использования назначаются путем реализации специального интерфейса, уникального для стороны или сторон, на которых должен выполняться код в точке входа. Для нашего клиента у нас просто есть наш класс, реализующий интерфейс 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:
keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding( "key.examplemod.spook", // Ключ перевода имени привязки ключей InputUtil.Type.KEYSYM, // Тип привязки клавиш, KEYSYM для клавиатуры, MOUSE для мыши. GLFW.GLFW_KEY_R, // Ключевой код ключа "category.examplemod.test" // Ключ перевода категории привязки ключей. ));
Если вам нужен фиксированный ключ, добавьте () → true
в качестве последнего параметра.
GLFW.GLFW_KEY_R
можно заменить любым ключом, который вы хотите, чтобы привязка была установлена по умолчанию. Категория связана с тем, как привязка клавиш сгруппирована на странице настроек.
Приведенный здесь код выведет сообщение “Клавиша 1 была нажата!”.
ClientTickEvents.END_CLIENT_TICK.register(client -> { while (keyBinding.wasPressed()) { client.player.sendMessage(new LiteralText("Клавиша 1 была нажата!"), false); } });
Имейте в виду, что это полностью на стороне клиента. Чтобы сервер ответил на привязку ключей, вам нужно будет отправить пользовательский пакет и попросить сервер обработать его отдельно.