Skip to content

⌨️ Клавиатурная навигация и доступность

ПараметрСпецификация
Класс компонентаCollapsibleCategoryRuleEntry
Интерфейс доступностиnet.minecraft.client.gui.narration.NarratableEntry
Приоритет озвучиванияNarrationPriority.HOVERED
Тип элемента диктораNarratedElementType.TITLE
Клавиши переключенияGLFW_KEY_SPACE, GLFW_KEY_ENTER, GLFW_KEY_KP_ENTER
Клавиша сворачиванияGLFW_KEY_LEFT (Только если категория развернута)
Клавиша разворачиванияGLFW_KEY_RIGHT (Только если категория свернута)
Звуковой откликSoundEvents.UI_BUTTON_CLICK (1.0F)

📖 Обзор механики

Мод поддерживает полную клавиатурную навигацию и совместимость с экранным диктором, позволяя комфортно управлять настройками без использования мыши.


⌨️ Таблица горячих клавиш

Когда заголовок категории сфокусирован в RuleList, метод keyPressed(KeyEvent event) обрабатывает следующие клавиши:

КлавишаКонстанта GLFWДействиеУсловиеЗвук
ПробелGLFW_KEY_SPACEПереключить состояниеВсегдаUI_BUTTON_CLICK
EnterGLFW_KEY_ENTERПереключить состояниеВсегдаUI_BUTTON_CLICK
Enter на NumpadGLFW_KEY_KP_ENTERПереключить состояниеВсегдаUI_BUTTON_CLICK
Стрелка влево (←)GLFW_KEY_LEFTСвернуть категориюТолько если expanded == trueUI_BUTTON_CLICK
Стрелка вправо (→)GLFW_KEY_RIGHTРазвернуть категориюТолько если expanded == falseUI_BUTTON_CLICK

⚙️ Техническая реализация

1. Обработка стрелок навигации

Поведение соответствует стандартным иерархическим деревьям ОС:

java
@Override
public boolean keyPressed(KeyEvent event) {
    int keyCode = event.key();
    if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER || keyCode == GLFW.GLFW_KEY_SPACE) {
        this.toggleAction.run();
        Minecraft.getInstance().getSoundManager()
                .play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
        return true;
    } else if (keyCode == GLFW.GLFW_KEY_LEFT && this.expanded) {
        this.toggleAction.run();
        Minecraft.getInstance().getSoundManager()
                .play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
        return true;
    } else if (keyCode == GLFW.GLFW_KEY_RIGHT && !this.expanded) {
        this.toggleAction.run();
        Minecraft.getInstance().getSoundManager()
                .play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
        return true;
    }
    return super.keyPressed(event);
}

2. Поддержка экранного диктора (updateNarration)

java
@Override
public NarrationPriority narrationPriority() {
    return NarrationPriority.HOVERED;
}

@Override
public void updateNarration(NarrationElementOutput output) {
    output.add(NarratedElementType.TITLE, this.label);
}

🔗 Связанная документация

Official documentation & web portal for Dasik Igaijinn mods.