Smart Key Prompts avatar

Smart Key Prompts [1.21.1] [1.20.4]

Smart Key Prompts

Smart Key Prompts — это мод для Minecraft, который предоставляет гибкие подсказки клавиш и удобное переназначение клавиш, улучшая игровой опыт и управление привязками клавиш.

Для сбора модов (Modpack) рекомендуется работать совместно с KeyBindJS.


Как использовать

  • Для обычных игроков: Просто установите и играйте. Дополнительная настройка не требуется.
  • Для разработчиков модов или сборок: Чтобы определять новые подсказки клавиш в игре, выберите один из следующих методов:
    • Интегрируйте ваш целевой мод с Smart Key Prompts.
    • Используйте KubeJS для вызова предоставленных методов.
    • Добавьте поддержку с помощью датапаков (ограниченная гибкость; см. Руководство по расширению через датапаки).
    • Запросите нативную поддержку через адаптацию от этого мода.

Основные функции

Smart Key Prompts динамически отображает соответствующие подсказки клавиш в зависимости от контекста. Он предоставляет API для разработчиков, чтобы управлять видимостью подсказок:

// Показать зарегистрированную привязку клавиш по ID.
public static void show(String id, String desc);

// Отобразить пользовательскую подсказку клавиши с клавишей и описанием.
public static void custom(String id, String key, String desc);

// Создать псевдоним для существующей привязки клавиш с другим названием.
public static void alias(String id, String key, String desc);

Вызовите любой из этих методов во время клиентского тика (tick) с условной логикой, чтобы показывать подсказки клавиш. Примеры ниже.

Также доступна поддержка на основе датапаков, хотя и с ограничениями по условиям. Для базовых сценариев она работает хорошо.

Эффект в игре

showcase1

Каждый id представляет идентификатор группы клавиш. Например, интеграция с JEI использует jei_skp и по умолчанию отключена.

Вы можете отключать или включать группы клавиш в любое время через конфиг, используя их идентификаторы.

Когда подсказки видны:

  • Нажмите Control Key (по умолчанию: K) + Левый клик, чтобы открыть экран настройки привязок клавиш напрямую.
  • Нажмите Control Key + Правый клик, чтобы переключить видимость и положение HUD.
  • Прокрутите колесо мыши, удерживая Control, чтобы масштабировать HUD.

showcase2

Примечание: Ярлык настройки привязок клавиш работает только для show и alias. Он не работает для подсказок custom.

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

ConfigAction.modifyKey(List keyDescList);

Удержание контрольной клавиши блокирует подсказку, устраняя необходимость точно рассчитывать время взаимодействий.


Примеры для разработки

В языковых файлах key и desc ссылаются на эти ключи:

Пример из assets/minecraft/lang/en_us.json:

{
  "key.keyboard.f11": "F11",
  "key.keyboard.left.shift": "Left Shift",
  "key.mouse.left": "Left Button"
}

Пример из файла мода assets/tacz/lang/zh_cn.json:

{
  "key.tacz.fire_select.desc": "Fire Mode",
  "key.tacz.inspect.desc": "Inspect",
  "key.tacz.interact.desc": "Interact While Armed"
}

Для комбинации клавиш можно записать это так:

SmartKeyPrompts.custom(modid, "key.keyboard.left.shift+key.mouse.left", "Пакетная передача предметов");

Пример на Java:

@SubscribeEvent
public static void tick(TickEvent.ClientTickEvent event) {
    if (!ModList.get().isLoaded("immersive_aircraft")) return;
    Player player = Minecraft.getInstance().player;
    if (player == null || Minecraft.getInstance().screen != null) return;

    String vehicle = Utils.getVehicleType(player);
    if (vehicle != null && vehicle.startsWith("immersive_aircraft:")) {
        SmartKeyPrompts.custom(modid, Utils.getKeyByDesc("key.inventory"), "immersive_aircraft.slot.upgrade");
        SmartKeyPrompts.show(modid, "key.immersive_aircraft.dismount");

        String keyUse = Utils.getKeyByDesc("key.immersive_aircraft.fallback_use");
        SmartKeyPrompts.custom(modid,
            Objects.equals(keyUse, "key.keyboard.unknown") ? "key.mouse.right" : keyUse,
            "item.immersive_aircraft.item.weapon");

        if (vehicle.equals("immersive_aircraft:biplane")) {
            SmartKeyPrompts.custom(modid, Utils.getKeyByDesc("key.jump"), "item.immersive_aircraft.engine");
        }
    }
}

Пример для KubeJS:

let SmartKeyPrompts = Java.loadClass("com.mafuyu404.smartkeyprompts.SmartKeyPrompts");
let Utils = Java.loadClass("com.mafuyu404.smartkeyprompts.init.Utils");

ClientEvents.tick(event => {
    let player = event.player;
    if (["key.left", "key.right", "key.forward", "key.back"]
          .map(desc => Utils.isKeyPressedOfDesc(desc)).includes(true)) {
        SmartKeyPrompts.show("parcool", "key.parcool.Dodge");
    }
    if (!player.onGround() && !player.isInWater()) {
        SmartKeyPrompts.show("parcool", "key.parcool.Breakfall");
        SmartKeyPrompts.show("parcool", "key.parcool.ClingToCliff");
    }
    if (player.isSprinting()) {
        SmartKeyPrompts.show("parcool", "key.parcool.FastRun");
    }
    if (Utils.isKeyPressedOfDesc("key.parcool.FastRun")) {
        SmartKeyPrompts.show("parcool", Utils.getKeyByDesc("key.parcool.Dodge"));
        SmartKeyPrompts.custom("parcool", Utils.getKeyByDesc("key.sneak"), "parcool.action.CatLeap");
    }
});

Пример датапака

Из Руководства по расширению через датапаки:

{
  "modid": "tacz_skp",
  "vars": {
    "modLoaded": "isModLoaded('tacz')",
    "hasTaczGun": "mainHandItem() == 'tacz:modern_kinetic_gun'",
    "isNotInVehicle": "!isInVehicle()"
  },
  "entries": [
    {
      "when": {
        "modLoaded": "true",
        "hasTaczGun": "true",
        "isNotInVehicle": "true"
      },
      "then": [
        "show('tacz_skp', 'key.tacz.shoot.desc')",
        "show('tacz_skp', 'key.tacz.zoom.desc')",
        "show('tacz_skp', 'key.tacz.reload.desc')"
      ]
    }
  ]
}

Продвинутое: Показ подсказки под прицелом для сущности

@SubscribeEvent
public static void tick(TickEvent.ClientTickEvent event) {
    if (!ModList.get().isLoaded(modid)) return;
    if (Utils.getTargetedEntityType() == "minecraft:pig") {
        SmartKeyPrompts.addDesc("key.pig.feed")
            .forKey("key.mouse.right")
            .withCustom(true)
            .atPosition("crosshair")
            .toGroup(modid);
    }
}

В примере выше:

  • custom определяет, появляется ли она в настройках привязок клавиш.
  • position устанавливает местоположение отображения; не подвержено влиянию переключения перемещения HUD.

Другая информация

  • Хотите, чтобы другой мод был поддержан? Сообщите нам!
  • Хотите добавить новые группы клавиш? Создайте Pull Request (PR).

Планируемые функции

  • Больше позиций отображения подсказок (например, следование за курсором мыши)
  • Поддержка двойного нажатия и долгого удерживания клавиш
  • Улучшения эстетики HUD
  • Возможная поддержка нескольких версий

Скачать Smart Key Prompts

 
Тип Скачать Версия Загрузчик Обновлено Размер
Releasesmartkeyprompts-1.1.0.jar1.21+1 NeoForge21 августа 2025880,3 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.1.0-release-all.jar1.20.1Forge14 августа 2025855,5 КБ
Release1.1.0_hotfix^21.20.1Forge6 августа 2025855,8 КБ
Release1.1.0-hotfix1.20.1Forge3 августа 2025118,3 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.1.0-all.jar1.20.1Forge31 июля 2025855,1 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.0.7-all.jar1.20.1Forge26 июля 2025827,5 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.0.6-all.jar1.20.1Forge18 июля 2025823,6 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.0.4.2-all.jar1.20.1Forge17 июля 2025818,4 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.0.5-all.jar1.20.1Forge17 июля 2025818,5 КБ
ReleaseSmartKeyPrompts-1.20.1-forge-1.0.4.1-all.jar1.20.1Forge14 июля 2025800 КБ
Пожалуйста авторизуйтесь, чтобы оставить свой комментарий.