TwelveIterationMods / InventoryEssentials

Minecraft Mod. Basic inventory tweaks designed to supplement Inventory Sorter.
https://mods.twelveiterations.com/mc/inventory-essentials
Other
11 stars 3 forks source link

Bulk Transfer All To Quark Backpack Deletes Items #30

Closed ChloeDawn closed 5 months ago

ChloeDawn commented 8 months ago

Minecraft Version

1.20.1 (LTS)

Mod Loader

NeoForge

Mod Loader Version

47.1.99

Mod Version

8.2.1

Balm Version

7.2.1

Describe the Issue

When bulk transferring from the player's inventory to the Quark Oddities backpack inventory, all items are deleted. There are no messages in the log when this occurs, but I have included it regardless for additional context.

Steps to reproduce:

Expected behavior:

Screen recording:

Screen recording of issue

Logs

https://mclo.gs/hPgCsom

Do you use any performance-enhancing mods (e.g. OptiFine) or custom server distributions (e.g. SpongeForge)?

No response

BlayTheNinth commented 8 months ago

Inventory Essentials only simulates slot clicks here (especially when used client-only, where it has no authority to change slots directly).

Since the issue occurs even when just sending normal slot clicks to the server, this is likely a bug inside Quark's backpack and can not be fixed here. Best I could do is prevent Inventory Essentials from acting on the backpack screen at all, but it might be worth reporting to Quark since it appears that clients can delete items through forged slot click packets on their backpack.

ChloeDawn commented 8 months ago

What are the reproduction steps without Inventory Essentials so I have something for the report?

BlayTheNinth commented 8 months ago

Reproducible by running

for (Slot slot : menu.slots) {
    if (slot.mayPickup(Minecraft.getInstance().player) && slot.container instanceof Inventory) {
        Minecraft.getInstance().gameMode.handleInventoryMouseClick(menu.containerId, slot.index, 0, ClickType.QUICK_MOVE, Minecraft.getInstance().player);
    }
}

on the client while backpack menu is open. The code simulates a shift-click & sends a click packet on every inventory slot.