滚轮物品数量缩放
基本信息
| 属性 | 值 |
|---|---|
| 配置字段 | MTConfig.ScrollItemScaling |
| 类型 | int(带 @Config.RangeInt(min = 0, max = 1)) |
| 默认值 | 0(MTConfig.java 字段初始值) |
| 取值 | 0 / 1 |
| 唯一读取点 | WheelHandler.getNumItemsToMoveFromWheel |
| 前置条件 | 目标系统没有加载 lwjgl3ify(Loader.isModLoaded("lwjgl3ify")) |
全部取值
| 值 | 名称 | 一次滚轮刻度移动的物品数 |
|---|---|---|
0(默认) |
Multiple Wheel Clicks Move Multiple Items | Math.abs(wheel) / 120(整数除法) |
1 |
Always Move One Item (macOS Compatibility) | 1 |
源码
private static int getNumItemsToMoveFromWheel(int wheel) {
if (!ModCompatibility.isLwjgl3Loaded() && MTConfig.ScrollItemScaling == 0) {
return Math.abs(wheel) / 120;
}
return 1;
}
换算表(值 0 且无 lwjgl3ify)
Math.abs(wheel) |
移动数量 |
|---|---|
| 1 ~ 119 | 0 |
| 120 | 1 |
| 121 ~ 239 | 1 |
| 240 | 2 |
| 360 | 3 |
| 480 | 4 |
整数除法会把不足一格的余量直接截断,因此滚轮增量小于 120 时移动数量为 0,
handleWheelTweak 随后会被外层 do { } while (numItemsToMove != 0) 判定为无事可做
(do-while 仍会执行一轮,但因 applicableSlot 判定与 numItemsToMove = 0 而不产生任何点击)。
lwjgl3ify 覆盖
ModCompatibility.initialize() 在启动时执行 Loader.isModLoaded("lwjgl3ify"),
结果存入静态 lwjgl3Loaded(日志中会打印 Detected lwjgl3!)。
一旦 lwjgl3ify 存在,getNumItemsToMoveFromWheel 无条件返回 1**, ScrollItemScaling被完全忽略——即使配成0` 也不会按 120 换算。
这是必要的:LWJGL3 的滚轮事件不再按「每格 120」投递,高精度触控板甚至可能投递
任意小数值,用 120 换算会导致一次微小滚动触发大量物品搬运。值 1 的注释
Always Move One Item (macOS Compatibility) 反映的是同一个问题——
macOS 触控板同样会投递非 120 的增量。
| 环境 | ScrollItemScaling = 0 |
ScrollItemScaling = 1 |
|---|---|---|
| 无 lwjgl3ify | abs(wheel) / 120 格 |
恒为 1 |
| 有 lwjgl3ify | 恒为 1(配置被忽略) | 恒为 1 |
数量如何被消耗
numItemsToMove 在 滚轮搬运 中被逐段消耗:
| 方向 | 消耗方式 |
|---|---|
| 推入 | 先 Math.min(n, count(光标栏位)) 封顶;每轮扣掉目标栏位实际吸收的数量 |
| 拉出 | 先扣除光标栏位可用容量,再扣除来源栏位实际取走的数量 |
| 产物栏位 | 连点 n 次取产物,仅第 1 个会被送走,然后 break(不进入多轮) |
外层 do { ... } while (numItemsToMove != 0); 使得一次滚轮输入可以跨多个栏位连锁搬运,
直到数量耗尽或扫描不到可用栏位。
相关条目
- 滚轮搬运(WheelTweak) -
numItemsToMove的消耗循环 - 滚轮方向语义 - 与本选项互相独立
- 滚轮搜索顺序 - 与本选项互相独立
- 配置文件系统 -
ScrollItemScaling所在的MTConfig