滚轮搜索顺序
基本信息
| 属性 | 值 |
|---|---|
| 配置字段 | MTConfig.WheelSearchOrder |
| 类型 | int(带 @Config.RangeInt(min = 0, max = 1)) |
| 默认值 | 1(MTConfig.java 字段初始值) |
| 取值 | 0 / 1 |
| 唯一读取点 | WheelHandler.handleWheelTweak 的扫描方向分支 |
全部取值
| 值 | 含义 | 源码行为 |
|---|---|---|
0 |
First to Last(由前到后) | 总是正序扫描 [slotCounter, countUntil) |
1 |
Last To First(由后到前) | 推入时仍正序;拉出时倒序扫描 [countUntil-1 → slotCounter] |
源码条件只有一条:
if (pushItems || (MTConfig.WheelSearchOrder == 0)) {
for (int i = slotCounter; i < countUntil; i++) { ... }
} else {
for (int i = countUntil - 1; i >= slotCounter; i--) { ... }
}
其中 pushItems 由 滚轮方向语义 决定。
关键细节:推入永远正序
pushItems == true 时无条件走正序循环,本选项被完全短路。也就是说:
| 方向 | WheelSearchOrder = 0 |
WheelSearchOrder = 1(默认) |
|---|---|---|
| 推入 | 正序 | 正序(与 0 无差别) |
| 拉出 | 正序 | 倒序 |
因此本选项**只影响拉出(从别的背包往光标栏位取货)**的行为; 推入方向在两个取值下完全一致。
两个方向的差异对比
| 属性 | 值 0 |
值 1(默认) |
|---|---|---|
| 拉出时扫描方向 | 下标升序(先遇到下标小的栏位) | 下标下标降序(先遇到下标大的栏位) |
| 推入时扫描方向 | 下标升序 | 下标升序 |
| 空栏位候选检查 | 倒序分支不做产物栏位排除 | 正序分支做 !isCraftingOutputSlot 排除 |
| 实际影响面 | 拉出方向 | 拉出方向 |
⚠️ 源码不对称点:正序循环里的空栏位候选额外检查了
!context.isCraftingOutputSlot(currentScreen, sl), 倒序循环里没有(WheelHandler.java:75)。在默认配置(1)下拉出时使用的是正序分支(有检查), 因此默认配置下这个不对称不会造成问题;只有把本项改成0并配合拉出方向时才暴露。
为什么默认是 1
拉出(从别的背包取货)时优先命中最靠近玩家背包的栏位,也就是下标最大的那个—— 它通常是玩家背包中最靠底、离光标最近的位置,视觉上更符合直觉。
相关条目
- 滚轮搬运(WheelTweak) - 搜索区间的划分与点击序列
- 滚轮方向语义 - 决定走
pushItems还是else分支 - 配置文件系统 -
WheelSearchOrder所在的MTConfig