Иконка ресурса

Небольшое примечание для keybind на 1.16.5

Версия(и) Minecraft
1.16.5
Так как я столкнулся с проблемой касательно считывания и регистрации kybinds, то решил написать небольшое примечание.

После создания keybind вам нужно будет считывать и регистрировать их в игре, поэтому я создал ОДИН класс, где происходило и считывание и регистрация. Вот что было:

Так не работает

# Один файл #
@Подписка с modid и bus
ГЛАВНЫЙ КЛАСС {

РЕГИСТРАЦИЯ с lifecycleEvent
и
ОБРАБОТКА не являющаяся lifecycleEvent
}
# #

И всё вроде хорошо, но выдавало ошибку что onKeyInput не является lifecycleEvent.
Оказывается нельзя ставить регистрацию (ну как минимум на этот ивент) и обработку в один файл.
Поэтому нужно разделить регистрацию и обработку, примерно вот так:

Обработчик ⬇

KeyEvents:
@Mod.EventBusSubscriber(modid = AbilityMod.MOD_ID)
public class KeyEvents {
 
    @SubscribeEvent
    public static void onKeyInput(final InputEvent.KeyInputEvent event) {
        // событие на нажатие любой кнопки

        if (AllKeyBinds.FIRST_ABILITY.isPressed()){
            // действие если нажали нашу кнопку 
        }
        if (AllKeyBinds.SECOND_ABILITY.isPressed()){
            // действиеесли нажали нашу кнопку
        }
    }

}

Создание кнопок ⬇
AllKeyBinds:
public class AllKeyBinds  {

    // это категория мода, которая будет видна в управлении как заголовок
    private static final String CATEGORY = "Abilities REAL";

    public static KeyBinding FIRST_ABILITY;
    public static KeyBinding SECOND_ABILITY;

    public static void register() {

        // создаём кнопки передавая имя и саму кнопку на клавиатуре
        FIRST_ABILITY = create("First ability",KeyEvent.VK_Z);
        SECOND_ABILITY = create("Second ability",KeyEvent.VK_X);

        // регистрируем их в управлении
        ClientRegistry.registerKeyBinding(FIRST_ABILITY);
        ClientRegistry.registerKeyBinding(SECOND_ABILITY);

    }

    private static KeyBinding create(String name, int key) {
        return new KeyBinding(name,key,CATEGORY);
    }
}
(9-10: лучше в имя кнопки включать id мода для локализации)

Регистрация
RegisterKeybinds:
@Mod.EventBusSubscriber(modid = AbilityMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class RegisterKeybinds {

    @SubscribeEvent
    public static void reg(final FMLClientSetupEvent event){
        // вызываем функцию регистрирования при запуске клиента
        AllKeyBinds.register();
    }

}

Важно также убрать в подписчике основного класса внутри обработчика нажатия обозначение bus

Я просто хотел обозначить это примечание, потому что не нашел решения в интернете
  • Like
Реакции: archer742
Автор
Gjgjkkirill
Просмотры
690
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Назад
Сверху