- Версия(и) Minecraft
- 1.16.5
Так как я столкнулся с проблемой касательно считывания и регистрации kybinds, то решил написать небольшое примечание.
После создания keybind вам нужно будет считывать и регистрировать их в игре, поэтому я создал ОДИН класс, где происходило и считывание и регистрация. Вот что было:
Так не работает ⬇
# Один файл #
@Подписка с modid и bus
ГЛАВНЫЙ КЛАСС {
РЕГИСТРАЦИЯ с lifecycleEvent
и
ОБРАБОТКА не являющаяся lifecycleEvent
}
# #
И всё вроде хорошо, но выдавало ошибку что onKeyInput не является lifecycleEvent.
Оказывается нельзя ставить регистрацию (ну как минимум на этот ивент) и обработку в один файл.
Поэтому нужно разделить регистрацию и обработку, примерно вот так:
Обработчик ⬇
Создание кнопок ⬇
(9-10: лучше в имя кнопки включать id мода для локализации)
Регистрация ⬇
Важно также убрать в подписчике основного класса внутри обработчика нажатия обозначение bus
Я просто хотел обозначить это примечание, потому что не нашел решения в интернете
После создания 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);
}
}
Регистрация ⬇
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
Я просто хотел обозначить это примечание, потому что не нашел решения в интернете