Skip to content

Commit 9ddce51

Browse files
Revert "Don't add slot pdc entry to window items"
7d7e0b0 still needed
1 parent 39ba044 commit 9ddce51

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

invui/src/main/java/xyz/xenondevs/invui/window/AbstractWindow.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@
44
import net.kyori.adventure.text.Component;
55
import net.kyori.adventure.text.minimessage.MiniMessage;
66
import org.bukkit.GameMode;
7+
import org.bukkit.NamespacedKey;
78
import org.bukkit.entity.Player;
89
import org.bukkit.event.inventory.ClickType;
910
import org.bukkit.event.inventory.InventoryCloseEvent.Reason;
1011
import org.bukkit.inventory.ItemStack;
12+
import org.bukkit.persistence.PersistentDataType;
1113
import org.jetbrains.annotations.UnmodifiableView;
1214
import org.jspecify.annotations.Nullable;
1315
import xyz.xenondevs.invui.Click;
1416
import xyz.xenondevs.invui.ClickEvent;
17+
import xyz.xenondevs.invui.InvUI;
1518
import xyz.xenondevs.invui.gui.Gui;
1619
import xyz.xenondevs.invui.gui.SlotElement;
1720
import xyz.xenondevs.invui.i18n.Languages;
@@ -36,6 +39,7 @@
3639

3740
non-sealed abstract class AbstractWindow<M extends CustomContainerMenu> implements Window, WindowEventListener {
3841

42+
private static final NamespacedKey SLOT_KEY = new NamespacedKey(InvUI.getInstance().getPlugin(), "slot");
3943
private static final ThreadLocal<Boolean> isInOpeningContext = ThreadLocal.withInitial(() -> false);
4044
private static final ThreadLocal<Integer> isInCloseHandlerContext = ThreadLocal.withInitial(() -> 0);
4145

@@ -110,6 +114,11 @@ protected void update(int slot) {
110114
SlotElement lastElement = newPath.getLast();
111115
if (!(lastElement instanceof SlotElement.GuiLink)) {
112116
itemStack = lastElement.getItemStack(getViewer());
117+
if (itemStack != null && lastElement instanceof SlotElement.Item) {
118+
// This makes every item unique to prevent Shift-DoubleClick "clicking" multiple items at the same time.
119+
itemStack = itemStack.clone(); // clone ItemStack in order to not modify the original
120+
itemStack.editPersistentDataContainer(pdc -> pdc.set(SLOT_KEY, PersistentDataType.BYTE, (byte) slot));
121+
}
113122
} else { // there is no holding element
114123
// background by gui
115124
itemStack = newPath.reversed().stream()

0 commit comments

Comments
 (0)