From cac8ace8524139172e0325df5fbf4ef14c849482 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Sat, 18 Dec 2021 13:15:31 +0100 Subject: [PATCH] Fixed Shift-DoubleClick --- .../studiocode/invui/window/impl/BaseWindow.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java b/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java index f6cf8c7..d35961d 100644 --- a/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java +++ b/InvUI/src/main/java/de/studiocode/invui/window/impl/BaseWindow.java @@ -19,17 +19,22 @@ import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.entity.HumanEntity; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; import java.util.*; public abstract class BaseWindow implements Window { + private static final NamespacedKey SLOT_KEY = new NamespacedKey(InvUI.getInstance().getPlugin(), "slot"); + private final UUID viewerUUID; private final boolean closeOnEvent; private final SlotElement[] elementsDisplayed; @@ -55,7 +60,14 @@ public abstract class BaseWindow implements Window { protected void redrawItem(int index, SlotElement element, boolean setItem) { // put ItemStack in inventory ItemStack itemStack; - if (element == null || (element instanceof VISlotElement && element.getItemStack(viewerUUID) == null)) { + if (element instanceof ItemSlotElement) { + itemStack = element.getItemStack(viewerUUID); + + // This makes every item unique to prevent Shift-DoubleClick "clicking" multiple items at the same time. + ItemMeta itemMeta = itemStack.getItemMeta(); + itemMeta.getPersistentDataContainer().set(SLOT_KEY, PersistentDataType.BYTE, (byte) index); + itemStack.setItemMeta(itemMeta); + } else if (element == null || (element instanceof VISlotElement && element.getItemStack(viewerUUID) == null)) { ItemProvider background = getGuiAt(index).getFirst().getBackground(); itemStack = background == null ? null : background.getFor(viewerUUID); } else itemStack = element.getItemStack(viewerUUID);