拆分物品(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。

完整算法见 压缩与拆分。

相关条目