拆分物品(Decompress Item)
基本信息
| 属性 | 值 |
|---|---|
| 键位 ID | key.craftingtweaks.decompress |
| 默认按键 | Keyboard.KEY_NONE(未绑定) |
| 分类 | key.categories.craftingtweaks |
| 注册位置 | ClientProxy.init() → ClientRegistry.registerKeyBinding |
| 触发方式 | TickEvent.ClientTickEvent 边沿触发 |
英文显示名 Decompress Item,中文「拆分物品」。
触发条件
与 压缩物品 完全一致(同样不要求 provider 的 ENABLED 状态,
同样要求鼠标悬停在有物品的槽位上)。
行为
| 按键组合 | 行为 |
|---|---|
| 直接按 | 拆分一组:compressAll = false |
| 按住 Shift | 拆分全部:compressAll = true |
两种情况都发送 MessageCompress(id 6)且 isDecompress = true
(区别于 压缩物品,那个键用 Ctrl 键来切换方向)。
无服务端时客户端调用 clientProvider.decompress(provider, player, container, mouseSlot, isShiftDown)。
与压缩物品的关系
key.craftingtweaks.compress 按住 Ctrl 时发出的封包参数完全一致
(isDecompress = true),因此 Ctrl+压缩 == 拆分,两个键在这里是重合的。
区别只在 compressAll 的取值来源:
| 触发方式 | compressAll |
|---|---|
| Ctrl + 压缩物品键 | !isShiftDown |
| 拆分物品键 | isShiftDown |
因此「Ctrl+压缩+Shift」= 拆分全部,与直接「拆分+Shift」等价。
服务端 HandlerCompress 的拆分循环条件为
while (compressAll && mouseSlot.getHasStack() && mouseSlot.getStack().stackSize >= 1),
即每拆一个产物就 decrStackSize(1),背包放不下就 break。
完整算法见 压缩与拆分。