diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java index 407a33d..59d35c4 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java @@ -7,6 +7,7 @@ import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.AbstractWindow; import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -46,9 +47,9 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; import org.kitteh.vanish.event.VanishStatusChangeEvent; @@ -347,6 +348,27 @@ if (isRunning()) { Player player = e.getPlayer(); Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> addArmorStand(player), 1L); + + PlayerInventory inventory = e.getPlayer().getInventory(); + int countSkipper = 0; + if (!inventory.isEmpty()) { + for (ItemStack stack : inventory) { + if (stack != null && stack.getItemMeta() != null && stack.getItemMeta().getPersistentDataContainer().has(skipKey)) { + countSkipper = countSkipper + stack.getAmount(); + } + + if (countSkipper >= 64) { + break; + } + } + + if (countSkipper > 0) { + ItemStack copySkipper = skipItem.clone(); + copySkipper.setAmount(countSkipper); + inventory.removeItem(copySkipper); + inventory.setItem(8, copySkipper); + } + } } } @@ -360,7 +382,7 @@ ItemStack stack = p.getInventory().getItemInMainHand(); ItemMeta meta = stack.getItemMeta(); if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - AcceptGUI.createAcceptGUI(p); + new AcceptGUI(e.getPlayer()).open(); } } @@ -564,55 +586,60 @@ return new ArrayList<>(materials); } - public static class AcceptGUI implements Listener { - private static final int JA_INDEX = 1; - private static final int NEIN_INDEX = 3; + public static class AcceptGUI extends AbstractWindow { + private static final int YES_INDEX = 1; + private static final int NO_INDEX = 3; public static final int INVENTORY_SIZE = 5; - private static final Map InventoryperPlayer = new HashMap<>(); - - public static void createAcceptGUI(Player p) { - Inventory ACCEPT_GUI = Bukkit.createInventory(p, InventoryType.HOPPER, ChatUtil.GREEN + "Willst du wirklich Skippen?"); - InventoryperPlayer.put(p, ACCEPT_GUI); - - ACCEPT_GUI.setItem(JA_INDEX, GUIUtils.createGuiItem(Material.LIME_CONCRETE, ChatUtil.GREEN + "Ja", true)); - ACCEPT_GUI.setItem(NEIN_INDEX, GUIUtils.createGuiItem(Material.RED_CONCRETE, ChatUtil.RED + "Nein", true)); - for (int i = 0; i < INVENTORY_SIZE; i++) { - ItemStack item = ACCEPT_GUI.getItem(i); - if (item == null || item.getType() == Material.AIR) { - ACCEPT_GUI.setItem(i, GUIUtils.EMPTY_ICON); - } - } - p.openInventory(ACCEPT_GUI); + public AcceptGUI(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGUIPREFIX() + " >> Settings")); } - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - Player player = (Player) e.getWhoClicked(); - if (InventoryperPlayer.isEmpty()) { + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { return; } - if (InventoryperPlayer.get(player).equals(e.getClickedInventory())) { - int slot = e.getRawSlot(); - if (slot == JA_INDEX) { - Material playerItem = itemByPlayerList.get(player.getUniqueId()); - player.closeInventory(); - ItemStack skipStack = skipItem.clone(); - skipStack.setAmount(1); - player.getInventory().removeItem(skipStack); - List stackList = new ArrayList<>(); - stackList.add(new ItemStack(playerItem)); - Collection droplist = player.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); - for (ItemStack itemStack : droplist) { - player.getLocation().getWorld().dropItem(player.getLocation(), itemStack); - } - selectItem(player, playerItem); + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + if (slot == YES_INDEX) { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + player.closeInventory(); + ItemStack skipStack = skipItem.clone(); + skipStack.setAmount(1); + player.getInventory().removeItem(skipStack); + List stackList = new ArrayList<>(); + stackList.add(new ItemStack(playerItem)); + Collection droplist = player.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); + for (ItemStack itemStack : droplist) { + player.getLocation().getWorld().dropItem(player.getLocation(), itemStack); } - if (slot == NEIN_INDEX) { - player.closeInventory(); + selectItem(player, playerItem); + } + if (slot == NO_INDEX) { + player.closeInventory(); + } + } + + @Override + protected void rebuildInventory() { + for (int i = 0; i < getInventory().getSize(); i++) { + ItemStack item; + switch (i) { + case YES_INDEX -> + item = GUIUtils.createGuiItem(Material.LIME_CONCRETE, ChatUtil.GREEN + "Ja", true); + case NO_INDEX -> item = GUIUtils.createGuiItem(Material.RED_CONCRETE, ChatUtil.RED + "Nein", true); + + default -> item = GUIUtils.EMPTY_ICON; } - e.setCancelled(true); + this.getInventory().setItem(i, item); } } } diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 859e291..e83b514 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -100,7 +100,5 @@ } pM.registerEvents(new CheckItemsGUI(), plugin); - - pM.registerEvents(new ForceItemChallengeEvent.AcceptGUI(), plugin); } }