@@ -58,9 +58,8 @@ object InventoryManager : RequestHandler<InventoryRequest>(
5858 private var actions = mutableListOf<InventoryAction >()
5959
6060 private var slots = listOf<ItemStack >()
61- private var alteredSlots = LimitedDecayQueue <InventoryChange >(
62- Int .MAX_VALUE , DEFAULT .desyncTimeout * 50L
63- )
61+ private var alteredSlots = LimitedDecayQueue <InventoryChange >(Int .MAX_VALUE , DEFAULT .desyncTimeout * 50L )
62+ private var alteredPlayerSlots = LimitedDecayQueue <InventoryChange >(Int .MAX_VALUE , DEFAULT .desyncTimeout * 50L )
6463
6564 private var screenHandler: ScreenHandler ? = null
6665 set(value) {
@@ -92,10 +91,8 @@ object InventoryManager : RequestHandler<InventoryRequest>(
9291 actions = mutableListOf ()
9392 }
9493
95- listen<PacketEvent .Send .Pre > { event ->
96- if (event.packet is CloseHandledScreenC2SPacket &&
97- event.packet.syncId != player.currentScreenHandler.syncId
98- ) {
94+ listen<PacketEvent .Send .Post > { event ->
95+ if (event.packet is CloseHandledScreenC2SPacket ) {
9996 screenHandler = player.playerScreenHandler
10097 }
10198 }
@@ -133,6 +130,7 @@ object InventoryManager : RequestHandler<InventoryRequest>(
133130 actions = request.actions.toMutableList()
134131 maxActionsThisSecond = request.inventoryConfig.actionsPerSecond
135132 alteredSlots.setDecayTime(DEFAULT .desyncTimeout * 50L )
133+ alteredPlayerSlots.setDecayTime(DEFAULT .desyncTimeout * 50L )
136134 }
137135
138136 /* *
@@ -178,7 +176,8 @@ object InventoryManager : RequestHandler<InventoryRequest>(
178176 ?.filter { ! it.stack.equal(slots[it.id]) }
179177 ?.map { InventoryChange (it.id, slots[it.id], it.stack.copy()) }
180178 ? : emptyList()
181- alteredSlots.addAll(changes)
179+ if (player.currentScreenHandler.syncId == 0 ) alteredPlayerSlots.addAll(changes)
180+ else alteredSlots.addAll(changes)
182181 slots = getStacks(player.currentScreenHandler.slots)
183182 }
184183
@@ -203,6 +202,7 @@ object InventoryManager : RequestHandler<InventoryRequest>(
203202 else -> return @runSafe
204203 }
205204 val alteredContents = mutableListOf<ItemStack >()
205+ val alteredSlots = if (packet.syncId == 0 ) alteredPlayerSlots else alteredSlots
206206 packet.contents.forEachIndexed { index, incomingStack ->
207207 val matches = alteredSlots.removeIf { cached ->
208208 incomingStack.equal(cached.after)
@@ -235,6 +235,7 @@ object InventoryManager : RequestHandler<InventoryRequest>(
235235 ! it.isInventoryTabSelected
236236 } ? : false
237237
238+ val alteredSlots = if (packet.syncId == 0 ) alteredPlayerSlots else alteredSlots
238239 val matches = alteredSlots.removeIf {
239240 it.syncId == packet.slot && it.after.equal(itemStack)
240241 }
0 commit comments