滚轮方向语义
基本信息
| 属性 | 值 |
|---|---|
| 配置字段 | MTConfig.WheelScrollDirection |
| 类型 | int(带 @Config.RangeInt(min = 0, max = 3)) |
| 默认值 | 0(MTConfig.java 字段初始值) |
| 取值 | 0 / 1 / 2 / 3 |
| 唯一读取点 | WheelHandler.shouldPushItems |
全部取值
| 值 | 名称 | 推入(从光标栏位 → 另一侧) | 拉出(从另一侧 → 光标栏位) |
|---|---|---|---|
0(默认) |
Down to Push, Up to Pull | 滚轮向下 | 滚轮向上 |
1 |
Up to Push, Down to Pull | 滚轮向上 | 滚轮向下 |
2 |
Inventory Position Aware | 取决于光标所在区域,见下 | 见下 |
3 |
Inventory Position Aware, Inverted | 2 的全部行为取反 |
2 的全部行为取反 |
判定算法
boolean pushItems = (wheel < 0); // 基准:滚轮向下 = 推入
if ((dir == 2 || dir == 3) && otherInventoryIsAbove(selectedSlot, context.getContainerSlots())) {
pushItems = !pushItems; // 位置感知:先按区域取反
}
if (dir == 1 || dir == 3) {
pushItems = !pushItems; // 反向档:再取反一次
}
return pushItems;
wheel 取自 Mouse.getDWheel(),负值表示向下滚(wheel < 0)。
注意 2 / 3 会连着取反两次(先按区域、再按反向档),因此值 3 在
「另一背包在上方」和「另一背包在下方」两种布局下都会得到与 2 相反的结果——
这与 README 里对 3 的描述(把 2 的两条规则都反过来)一致。
值 2 / 3 的区域判定(otherInventoryIsAbove)
判定「另一个背包是否位于光标栏位的上方」:
selectedIsInPlayerInventory= 光标栏位所属的IInventory是否为mc.thePlayer.inventory(即光标是否在玩家自己的背包里);- 遍历容器全部栏位,凡是与光标栏位归属不同(一个在玩家背包、一个不在)的栏位,
按
yDisplayPosition统计:y < 光标栏位 y计入otherInventorySlotsAbove, 否则(>=,含同一行)计入otherInventorySlotsBelow; - 返回
otherInventorySlotsAbove > otherInventorySlotsBelow。
即「另一个背包里位于光标上方的格子比位于下方的多」就认为另一背包在上方。
源码注释强调该逻辑必须与「哪边算另一个背包」的其它判定保持一致,
因此 滚轮搬运 的搜索区间也用同一套 slotCount - 36 划分。
各值下的实际行为表
假设「另一背包」指机器/箱子一侧(栏位下标 [0, slotCount-36)),
玩家背包为 [slotCount-36, slotCount):
| 值 | 光标位置 | 滚轮向上 | 滚轮向下 |
|---|---|---|---|
0 |
任意 | 拉出(取货) | 推入(送货) |
1 |
任意 | 推入 | 拉出 |
2 |
玩家背包(下方) | 另一背包在上方 → 取反 → 推入 | 拉出 |
2 |
机器/箱子(上方) | otherInventoryIsAbove 为 true → 取反 → 拉出 |
推入 |
2 |
机器/箱子,但同区域内上方格更多 → 仍视为 true | 拉出 | 推入 |
3 |
玩家背包 | 拉出 | 推入 |
3 |
机器/箱子(上方) | 推入 | 拉出 |
简言之,值 2 的效果是「滚轮方向始终远离光标所在区域、朝另一侧操作」:
光标在上半区就向下滚推入,光标在下半区就向上滚推入——无论哪边是上、哪边是下都一致。
与其它选项的关系
| 选项 | 关系 |
|---|---|
| 滚轮搜索顺序 | pushItems 决定走正序还是倒序扫描分支;pushItems == true 时本选项无效 |
| 滚轮物品数量缩放 | 无关,只影响数量 |
| 滚轮搬运 | pushItems 决定 slotTo / slotFrom 的方向以及空栏位是否可作目标 |
已知文档不一致
本仓库 README.md 对值 3 的第二条描述把光标在玩家背包时写成了
「scroll up to pull / scroll down to push」,其中第二行与值 2 完全相同
(照抄未改),应为 pull。本页表格以 WheelHandler.shouldPushItems 的实际算法为准。
相关条目
- 滚轮搬运(WheelTweak) -
pushItems决定的点击序列 - 滚轮搜索顺序 - 正序 / 倒序扫描分支
- 容器兼容性 - 哪些容器允许滚轮
- 配置文件系统 -
WheelScrollDirection所在的MTConfig