Обработка нажатий.

Версия Minecraft
1.7.10
608
5
15
Добрый день.
Значит, хочу я, что-бы при нажатии на кнопку срабатывал метод keyDown, при отжиме keyUp, ну и keyPress в процессе.

Ивент InputEvent.KeyInputEvent срабатывает только в при нажатии и отжиме. Ну ничего, думаю, сделаю небольшой костылик:

Код:
@SubscribeEvent
    public void key(InputEvent.KeyInputEvent event)
    {
        int keyId = Keyboard.getEventKey();

        for(int i = 0; i < pressedKeys.size(); i++)
        {
            int id = pressedKeys.get(i);

            if(id == keyId)
            {
                pressedKeys.remove(i);
                this.keyUp(keyId);
                return;
            }
        }
        
        this.keyDown(keyId);
        pressedKeys.add(keyId);
    }

    @SubscribeEvent
    public void update(TickEvent.ClientTickEvent event)
    {
        pressedKeys.forEach(e -> keyPress(e));
    }

Но вот незадача - когда я нажимаю esc или открываю гуи, допустим, то при отжиме ивент не срабатывает.

Как можно реализовать пободное? Бо идей нет.

(попытка 2)
Пробовал ещё while(Keyboard.next()), но тогда майновское управление глючит.
 

CumingSoon

Местный стендапер
1,634
12
269
Не всё так просто. Как мне получить массив со всеми нажатыми кнопками в данный момент?
У игры где-то был массив со всеми клавишами. Скорее всего, приватный. Через AT сделай открытым, а потом проходи по списку, фильтруя нужные значения
 
1,111
47
420
У игры где-то был массив со всеми клавишами. Скорее всего, приватный. Через AT сделай открытым, а потом проходи по списку, фильтруя нужные значения
Могу ошибаться, но я таких не видел.
Я бы закинул хук в 1838 строку Minecraft.java. Собственна если клавиша отпущена mouseRealesed иначе Down и там уже можно и Pressed каждый тик или каждый рендер тик вызывать. Как будет удобно. Я прост не понимаю в чем сложность.
 
608
5
15
Могу ошибаться, но я таких не видел.
Я бы закинул хук в 1838 строку Minecraft.java. Собственна если клавиша отпущена mouseRealesed иначе Down и там уже можно и Pressed каждый тик или каждый рендер тик вызывать. Как будет удобно. Я прост не понимаю в чем сложность.
В параллельной обработке.
Допустим игрок жмёт три клавиши одновременно.
А Keyboard.getEventKey() возвращает лишь последнее число.
 
608
5
15
Скорей всего надо тупо хук вставить, в майновский while (Keyboard.next())...
P.S. "Так я в прошлый раз и не разобрался как всунуть хук в строчку."
 
Сверху