From fa9b99a05bc6077b044b87b11f27dd4c34c40637 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sun, 7 May 2023 22:43:05 +0800 Subject: [PATCH] WIP implementation of shop item copying using shift click --- .../net/citizensnpcs/trait/ShopTrait.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java index 78f2db55c..e43f4939a 100644 --- a/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java +++ b/main/src/main/java/net/citizensnpcs/trait/ShopTrait.java @@ -176,6 +176,7 @@ public void setPermission(String permission) { @Menu(title = "NPC Shop Contents Editor", type = InventoryType.CHEST, dimensions = { 5, 9 }) public static class NPCShopContentsEditor extends InventoryMenuPage { + private NPCShopItem copying; private MenuContext ctx; private int page = 0; private final NPCShop shop; @@ -191,23 +192,36 @@ public void changePage(int newPage) { for (int i = 0; i < ctx.getInventory().getSize(); i++) { InventoryMenuSlot slot = ctx.getSlot(i); slot.clear(); - NPCShopItem item = shopPage.getItem(i); - if (item != null) { - slot.setItemStack(item.getDisplayItem(null)); + if (shopPage.getItem(i) != null) { + slot.setItemStack(shopPage.getItem(i).getDisplayItem(null)); } final int idx = i; slot.setClickHandler(evt -> { - ctx.clearSlots(); - NPCShopItem display = item; + NPCShopItem display = shopPage.getItem(idx); + if (display != null && evt.isShiftClick() && evt.getCursorNonNull().getType() == Material.AIR + && display.display != null) { + copying = display.clone(); + evt.setCursor(display.getDisplayItem(null)); + evt.setCancelled(true); + return; + } if (display == null) { + if (copying != null && evt.getCursorNonNull().getType() != Material.AIR + && evt.getCursorNonNull().equals(copying.getDisplayItem(null))) { + shopPage.setItem(idx, copying); + copying = null; + return; + } + display = new NPCShopItem(); if (evt.getCursor() != null) { display.display = evt.getCursor().clone(); } } + ctx.clearSlots(); ctx.getMenu().transition(new NPCShopItemEditor(display, modified -> { if (modified == null) { shopPage.removeItem(idx);