
AutoSwitch
Мод AutoSwitch для Minecraft автоматически переключает инструменты в зависимости от того, что вы делаете - копаете, атакуете или взаимодействуете. Настраивается под себя и работает на Fabric и NeoForge.
AutoSwitch
AutoSwitch - мод для Майнкрафт (Fabric / NeoForge), который сам меняет предмет в руке в зависимости от того, что вы собираетесь сделать. Копаете камень кулаком? Моментально переключит на кирку. Атакуете моба мечом, но в руке лопата? Подменит на меч. Всё работает на основе правил, которые можно тонко настроить.
По сути, это решение вечной проблемы: вечно лазать по хотбару в поисках нужного инструмента. Особенно когда мобов много или ресурс надо добывать быстро. Мод смотрит на то, что вы бьёте (блок или моба), и сам подбирает лучший предмет из доступных на панели.
Настраивается через конфиг autoswitch.conf в папке config (рядом с папкой ресурспаков). Быстрый путь: Options > Resource Packs > подняться на папку вверх. В игре мод можно включить/выключить клавишей R.
Настройка
Этот раздел актуален для AutoSwitch 12+. В ранних версиях конфиг был другим.
В конфиге четыре секции:
attack-action- правила для атаки (мобов или блоков).interact-action- правила для взаимодействия (правый клик).stat-change-action- правила для событий статистики (например, использование тотема бессмертия).feature-config- общие настройки поведения мода.
Каждое правило содержит:
priority- число; чем выше, тем приоритетнее правило, если несколько целей подходят.target- что именно правило ищет (типы:BLOCK,ENTITY,STATилиEXPRESSIONдля комбинаций). Цели могут ссылаться на теги или конкретные ID (minecraft:ender_chest,sugar_cane).tools- упорядоченный список кандидатов для переключения. Каждый должен бытьITEMилиEXPRESSIONизITEM, либо пустой список (отключает переключение для этой цели).
EXPRESSION можно вкладывать сколько угодно - гибкость огромная. Дефолтный конфиг покрывает большинство ситуаций, его можно расширять.
У инструментов и целей есть опциональное поле data, чтобы учитывать зачарования или состояния блоков.
Живое редактирование
Просто сохраните конфиг заново в игре - он перезагрузится автоматически.
Технические детали
Выражения
Выражения можно вкладывать как угодно. Поддерживаются операции:
OR- совпадает хотя бы один из дочерних элементов.AND- совпадают все дочерние элементы.NOT- не совпадает ни один из дочерних.XOR- совпадает только один из дочерних.
Данные
Сейчас поддерживаются такие типы данных:
BlockState- состояние блока для сопоставления.Component- пока толькоPOTION_CONTENTSна предметах.Enchantment- зачарования предмета.EntityEquipment- экипировка существа (например, седло на свинье).
Приоритет выбора
Порядок принятия решения (первое различие побеждает):
- Приоритет цели - правила с большим приоритетом предпочтительнее.
- Рейтинг цели (многоуровневый) - сравнение уровней рейтинга 0..N до максимума. На каждом уровне сравниваются:
isGroup(предпочтение не-группам)hasData(предпочтение тем, у кого есть данные)typeRating(выше - лучше, например DPS оружия или уровень добычи)dataRating(выше - лучше, например нормализованный уровень зачарования)
- Приоритет инструмента - предпочтение инструментам с более высоким внутренним приоритетом.
- Рейтинг инструмента (многоуровневый) - та же логика, что и у цели.
- Текущий выбранный слот? - если всё ещё ничья, предпочитается текущий слот.
- Наименьший индекс слота - финальный тай-брейк: самый левый слот инвентаря побеждает.
Текстовая блок-схема
СТАРТ: слоты-кандидаты (все слоты, подошедшие под селектор)
|
v
Сравнить приоритет цели
|-- если разный --> выбрать наивысший --> КОНЕЦ
|
v (одинаковый)
Сравнить рейтинг цели (уровни 0..N)
Для каждого уровня:
- сравнить: isGroup? (не-группа предпочтительнее)
- сравнить: hasData? (с данными предпочтительнее)
- сравнить: typeRating (выше побеждает)
- сравнить: dataRating (выше побеждает)
|-- если разница --> выбрать победителя --> КОНЕЦ
|
v (нет разницы)
Сравнить приоритет инструмента
|-- если разный --> выбрать наивысший --> КОНЕЦ
|
v (одинаковый)
Сравнить рейтинг инструмента (уровни 0..N)
(те же правила на уровне)
|-- если разница --> выбрать победителя --> КОНЕЦ
|
v (всё ещё ничья)
Предпочесть текущий выбранный слот?
|-- Да --> выбрать текущий --> КОНЕЦ
|-- Нет --> выбрать наименьший (самый левый) слот --> КОНЕЦ
