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) с условной логикой, чтобы показывать подсказки клавиш. Примеры ниже.
Также доступна поддержка на основе датапаков, хотя и с ограничениями по условиям. Для базовых сценариев она работает хорошо.
Эффект в игре
Каждый id
представляет идентификатор группы клавиш. Например, интеграция с JEI использует jei_skp
и по умолчанию отключена.
Вы можете отключать или включать группы клавиш в любое время через конфиг, используя их идентификаторы.
Когда подсказки видны:
- Нажмите Control Key (по умолчанию: K) + Левый клик, чтобы открыть экран настройки привязок клавиш напрямую.
- Нажмите Control Key + Правый клик, чтобы переключить видимость и положение HUD.
- Прокрутите колесо мыши, удерживая Control, чтобы масштабировать HUD.
Примечание: Ярлык настройки привязок клавиш работает только для
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
- Возможная поддержка нескольких версий