diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index f01d242ad..624d0df27 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -89,6 +89,10 @@ public abstract class Inventory { @Setter private boolean pending = false; + @Getter + @Setter + private boolean displayed = false; + protected Inventory(int id, int size, ContainerType containerType) { this("Inventory", id, size, containerType); } diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index 1f31d917b..1c07a0b1e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -95,6 +95,7 @@ public class InventoryUtils { if (openInv != null && openInv.getJavaId() == inventory.getJavaId()) { translator.openInventory(session, inventory); translator.updateInventory(session, inventory); + openInv.setDisplayed(true); } else if (openInv != null && openInv.isPending()) { // Presumably, this inventory is no longer relevant, and the client doesn't care about it displayInventory(session, openInv); @@ -103,6 +104,7 @@ public class InventoryUtils { } else { translator.openInventory(session, inventory); translator.updateInventory(session, inventory); + inventory.setDisplayed(true); } } else { session.setOpenInventory(null); @@ -117,7 +119,7 @@ public class InventoryUtils { if (inventory != null) { InventoryTranslator translator = session.getInventoryTranslator(); translator.closeInventory(session, inventory); - if (confirm && !inventory.isPending() && !(translator instanceof LecternInventoryTranslator)) { + if (confirm && inventory.isDisplayed() && !inventory.isPending() && !(translator instanceof LecternInventoryTranslator)) { session.setClosingInventory(true); } }