AutoSwitch
Активный0.0
Установок
Последнее обновление
Версии
AutoSwitch
AutoSwitch — это мод для Minecraft (под Fabric/NeoForge), который автоматически меняет предмет в руке в зависимости от ваших действий — добычи ресурсов, атаки, взаимодействия или изменения определенных характеристик, а также от доступных предметов на панели быстрого доступа (например, если вы ударяете по каменному блоку рукой, он переключится на кирку).
Мод работает на основе правил и обладает широкими возможностями настройки через файл конфигурации HOCON autoswitch.conf, расположенный в папке config рядом с папкой ресурс-паков. Быстро перейти туда можно через Настройки → Ресурс-паки → перейти на уровень выше.
Мод можно включать и выключать прямо в игре, нажав клавишу R.
Настройка
Этот раздел относится только к AutoSwitch версии 12 и выше. В более ранних версиях использовался другой формат конфигурации.
В файле конфигурации есть четыре раздела — три для определения условий и целей при различных действиях и один для общей настройки функций:
attack-action— правила, применяемые при атаке (сущностей или блоков).interact-action— правила, используемые при взаимодействии (действия, похожие на правый клик).stat-change-action— правила, срабатывающие при событиях изменения характеристик (например, использование тотема бессмертия).feature-config— управляет общим поведением мода.
Каждое правило содержит:
priority— целое число; более высокие значения имеют приоритет, когда несколько целей совпадают.target— что соответствует этому правилу (типы:BLOCK,ENTITY,STATилиEXPRESSION, позволяющий комбинировать другие цели). Цели могут ссылаться на теги или конкретные идентификаторы (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(предпочтение более высоким, например, нормализованный уровень зачарования)
- Приоритет инструмента — предпочтение инструментам с более высоким внутренним приоритетом.
- Рейтинг инструмента (многоуровневый) — та же логика многоуровневого сравнения, что и для рейтинга цели (isGroup → hasData → typeRating → dataRating).
- Выбран ли слот в данный момент? — предпочтение текущему слоту в руке, если до сих пор нет различий.
- Наименьший индекс слота — окончательный тай-брейк: побеждает слот с наименьшим индексом (крайний левый).
Текстовая блок-схема
НАЧАЛО: кандидаты в слотах инвентаря (все слоты, соответствующие селектору)
|
v
Сравнить приоритет цели
|-- если различаются --> выбрать наивысший приоритет цели --> КОНЕЦ
|
v (одинаковые)
Сравнить рейтинг цели (уровни 0..N)
Для каждого уровня:
- сравнить: isGroup? (предпочтение не-группам)
- сравнить: hasData? (предпочтение с данными)
- сравнить: typeRating (выигрывает более высокий)
- сравнить: dataRating (выигрывает более высокий)
|-- если найдено различие --> выбрать победителя --> КОНЕЦ
|
v (нет различий)
Сравнить приоритет инструмента
|-- если различаются --> выбрать наивысший приоритет инструмента --> КОНЕЦ
|
v (одинаковые)
Сравнить рейтинг инструмента (уровни 0..N)
(те же правила на уровне, что и для рейтинга цели)
|-- если найдено различие --> выбрать победителя --> КОНЕЦ
|
v (все еще одинаковые)
Предпочитать текущий выбранный слот?
|-- Да --> выбрать текущий выбранный --> КОНЕЦ
|-- Нет --> выбрать наименьший (крайний левый) слот --> КОНЕЦ