滚轮搜索顺序

基本信息

属性 值
配置字段 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

拉出(从别的背包取货)时优先命中最靠近玩家背包的栏位,也就是下标最大的那个—— 它通常是玩家背包中最靠底、离光标最近的位置,视觉上更符合直觉。

相关条目