自动切换工具

自动切换工具

执行操作时自动切换工具。

工具

client Fabric API

AutoSwitch

AutoSwitch 是一款 Minecraft 模组(支持 Fabric / NeoForge),它会根据你即将进行的操作——挖掘、攻击、交互,或当特定状态变化以及快捷栏中可用物品的变化时(例如你用拳头击打石头方块,它会自动切换到镐子)自动切换当前手持的物品。

该模组由规则驱动,可通过位于 config 文件夹中的 HOCON 格式配置文件 autoswitch.conf 进行高度自定义。该文件夹位于资源包文件夹旁边。快速导航到此处的路径是:选项 > 资源包 > 向上导航一级文件夹。

游戏中按下 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 或 ITEM 的 EXPRESSION,也可以是空列表(以禁用该目标的切换)。

EXPRESSION 可以包含任意数量的元素或任意深度,提供极大的控制能力。默认配置覆盖了广泛的用例,可以作为扩展的良好基础。

工具和目标可以有一个可选的 data 字段,用于控制诸如应匹配的附魔或方块状态等属性。

实时编辑

在游戏中直接重新保存配置文件即可自动重新加载。

详细细节

表达式

表达式可以嵌套到你想要的任何深度。

表达式支持以下操作:

  • OR - 匹配其任意一个子项
  • AND - 匹配其所有子项
  • NOT - 不匹配其任何子项
  • XOR - 仅匹配其其中一个子项

数据

目前支持以下数据类型:

  • BlockState - 要匹配的方块状态
  • Component - 目前仅支持物品上的 POTION_CONTENTS
  • Enchantment - 物品拥有的附魔
  • EntityEquipment - 实体穿戴的装备,例如带有鞍的猪

选择优先级

决策顺序(最先出现的差异项优先):

  1. 目标优先级 - 优先级更高的规则更受青睐。
  2. 目标评级(多级) - 比较从第 0 级到配置的最大值的评级级别。在每一级,按顺序比较:
    • isGroup(优先选择非组)
    • hasData(优先选择有数据的)
    • typeRating(数值更高者优先,例如武器 DPS 或挖掘等级)
    • dataRating(数值更高者优先,例如标准化附魔等级)
  3. 工具优先级 - 优先选择内在优先级更高的工具。
  4. 工具评级(多级) - 与目标评级相同的多级比较逻辑(isGroup → hasData → typeRating → dataRating)。
  5. 当前槽位是否被选中? - 如果此前仍然平局,优先选择当前手持的槽位。
  6. 最小的槽位索引 - 最终平局决胜:数值最低(最左侧)的物品栏槽位胜出。
基于文本的流程图
开始:候选物品栏槽位(所有匹配选择器的槽位)
|
v
比较目标优先级
|-- 如果不同 --> 选择最高目标优先级 --> 结束
|
v(相同)
比较目标评级(级别 0..N)
对于每个级别:
- 比较:isGroup?(优先非组)
- 比较:hasData?(优先有数据的)
- 比较:typeRating(数值高者胜出)
- 比较:dataRating(数值高者胜出)
|-- 如果发现差异 --> 选择获胜者 --> 结束
|
v(无差异)
比较工具优先级
|-- 如果不同 --> 选择最高工具优先级 --> 结束
|
v(相同)
比较工具评级(级别 0..N)
(与目标评级相同的逐级规则)
|-- 如果发现差异 --> 选择获胜者 --> 结束
|
v(仍然平局)
优先选择当前选中的槽位?
|-- 是 --> 选择当前选中的 --> 结束
|-- 否  --> 选择数值最小(最左侧)的槽位 --> 结束