diff --git a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java index c912845..3db2e17 100644 --- a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java @@ -1,14 +1,13 @@ package de.fanta.challenges.challenges; import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.events.ServerStatusChangedEvent; import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.listeners.EventRegistration; -import de.fanta.challenges.scoreboard.ChallengePlayer; 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.GUIUtils; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -24,8 +23,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.InventoryDragEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -38,7 +39,9 @@ import org.bukkit.persistence.PersistentDataType; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Random; @@ -61,6 +64,8 @@ private static final HashMap entityList = new HashMap<>(); private static final HashMap itemByPlayerList = new HashMap<>(); + private static final HashMap> playerMaterials = new HashMap<>(); + private final Map bossBarMap = new HashMap<>(); private int taskId = -1; @@ -77,8 +82,12 @@ if (event.isRunning()) { ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, 3); ItemMeta meta = stack.getItemMeta(); + List lorelist = new ArrayList<>(); meta.setDisplayName(ChatUtil.GREEN + "Skip Item"); meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipItem"); + lorelist.add(ChatUtil.GREEN + "Rechtsklick um das Aktuelle Item zu Skippen."); + lorelist.add(ChatUtil.GREEN + "Geskippte Items bekommst du 1x ins Inventar."); + meta.setLore(lorelist); stack.setItemMeta(meta); skipItem = stack; @@ -179,15 +188,27 @@ } @EventHandler - public void onMoveItem(InventoryMoveItemEvent e) { - if (isRunning()) { - ItemStack stack = e.getItem(); - ItemMeta meta = stack.getItemMeta(); + public void onItemMove(InventoryMoveItemEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getItem(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + @EventHandler + public void onDrag(InventoryDragEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCursor(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - if (e.getSource() != e.getDestination()) { - e.setCancelled(true); - } + e.setCancelled(true); } } } @@ -209,6 +230,9 @@ @EventHandler public void onClick(PlayerInteractEvent e) { if (isRunning()) { + if (e.getAction() != Action.RIGHT_CLICK_AIR) { + return; + } Player p = e.getPlayer(); ItemStack stack = p.getInventory().getItemInMainHand(); ItemMeta meta = stack.getItemMeta(); @@ -217,7 +241,12 @@ ItemStack skipStack = skipItem.clone(); skipStack.setAmount(1); p.getInventory().removeItem(skipStack); - p.getInventory().addItem(new ItemStack(playerItem)); + List stackList = new ArrayList<>(); + stackList.add(new ItemStack(playerItem)); + Collection droplist = p.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); + for (ItemStack itemStack : droplist) { + p.getLocation().getWorld().dropItem(p.getLocation(), itemStack); + } selectItem(p, playerItem); } } @@ -287,7 +316,21 @@ } public void updateItem(Player player) { - Material item = materials.get(random.nextInt((materials.size() - 1) + 1)); + ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); + if (itemList.isEmpty()) { + plugin.getTimer().stopTimer(); + setRunning(false); + GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); + String[] lines = {"", "", "", " " + ChatUtil.BLUE + player.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; + ChatSkull.sendAll(player, lines); + ChatUtil.sendNormalMessage(player, "Du hast alle Items gesammelt und damit gewonnen!"); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.setGameMode(GameMode.SPECTATOR); + } + return; + } + + Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); itemByPlayerList.put(player.getUniqueId(), item); updateArmorStand(player, item); } @@ -295,9 +338,12 @@ public void selectItem(Player player, Material pickupItem) { Material playerItem = itemByPlayerList.get(player.getUniqueId()); if (pickupItem.equals(playerItem)) { + ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); + itemList.remove(pickupItem); + playerMaterials.put(player.getUniqueId(), itemList); updateItem(player); player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); - plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); + //plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); //TODO GANZ MACHEN } } diff --git a/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java b/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java index 3385734..621d597 100644 --- a/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java +++ b/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java @@ -66,6 +66,9 @@ @EventHandler public void onInventoryClick(InventoryClickEvent e) { Player player = (Player) e.getWhoClicked(); + if (InventoryperPlayer.isEmpty()) { + return; + } if (InventoryperPlayer.get(player).equals(e.getClickedInventory())) { int slot = e.getRawSlot(); if (slot == JA_INDEX) { diff --git a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java index 2902d59..85bbc44 100644 --- a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java +++ b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java @@ -70,6 +70,9 @@ @EventHandler public void onInventoryClick(InventoryClickEvent e) { Player p = (Player) e.getWhoClicked(); + if (InventoryperPlayer.isEmpty()) { + return; + } if (e.getInventory() == InventoryperPlayer.get(p)) { int slot = e.getRawSlot(); Player pp = playerPerSlot.get(slot);