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 e9d3f56..085054d 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java @@ -19,6 +19,7 @@ import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; @@ -33,6 +34,7 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerBucketEntityEvent; @@ -44,6 +46,8 @@ 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.meta.ItemMeta; import org.bukkit.persistence.PersistentDataType; @@ -62,13 +66,13 @@ public class ForceItemChallengeEvent implements Listener { private static boolean running; - private final Challenges plugin = Challenges.getPlugin(); + private static final Challenges plugin = Challenges.getPlugin(); private static boolean isRunning() { return running; } - private void setRunning(boolean run) { + private static void setRunning(boolean run) { running = run; } @@ -80,13 +84,13 @@ private static final HashMap> playerMaterials = new HashMap<>(); - private final Map bossBarMap = new HashMap<>(); + private static final Map bossBarMap = new HashMap<>(); private int taskId = -1; - private final Random random = new Random(); + private static final Random random = new Random(); - private ItemStack skipItem; + public static ItemStack skipItem; private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipItem"); @@ -172,7 +176,6 @@ if (isRunning()) { Player player = e.getPlayer(); removeArmorStand(player); - plugin.getScoreManager().leave(new ChallengePlayer(player)); } } @@ -356,18 +359,8 @@ Player p = e.getPlayer(); ItemStack stack = p.getInventory().getItemInMainHand(); ItemMeta meta = stack.getItemMeta(); - Material playerItem = itemByPlayerList.get(p.getUniqueId()); if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - ItemStack skipStack = skipItem.clone(); - skipStack.setAmount(1); - p.getInventory().removeItem(skipStack); - 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); + AcceptGUI.createAcceptGUI(p); } } @@ -444,7 +437,7 @@ } } - public void updateArmorStand(Player player, Material material) { + public static void updateArmorStand(Player player, Material material) { if (entityListContainsUUID(player.getUniqueId())) { ArmorStand stand = (ArmorStand) entityListGetEntity(player.getUniqueId()); stand.getEquipment().setHelmet(new ItemStack(material)); @@ -458,7 +451,7 @@ } } - public void updateItem(Player player) { + public static void updateItem(Player player) { ArrayList itemList = playerMaterials.get(player.getUniqueId()); if (itemList.isEmpty()) { plugin.getTimer().stopTimer(); @@ -478,7 +471,7 @@ updateArmorStand(player, item); } - public void selectItem(Player player, Material pickupItem) { + public static void selectItem(Player player, Material pickupItem) { Material playerItem = itemByPlayerList.get(player.getUniqueId()); if (pickupItem.equals(playerItem)) { ArrayList itemList = playerMaterials.get(player.getUniqueId()); @@ -491,7 +484,7 @@ } } - public void updateBossBar() { + public static void updateBossBar() { ScoreManager scoreManager = plugin.getScoreManager(); for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { Material playerItem = itemByPlayerList.get(player.getUniqueId()); @@ -517,7 +510,7 @@ entityList.remove(uuid); } - public boolean entityListContainsUUID(UUID uuid) { + public static boolean entityListContainsUUID(UUID uuid) { return entityList.containsKey(uuid); } @@ -525,7 +518,7 @@ return entityList.containsValue(entity); } - public Entity entityListGetEntity(UUID uuid) { + public static Entity entityListGetEntity(UUID uuid) { return entityList.get(uuid); } @@ -552,7 +545,7 @@ } public ItemStack createSkipItem() { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, 3); + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, 5); ItemMeta meta = stack.getItemMeta(); List lorelist = new ArrayList<>(); meta.setDisplayName(ChatUtil.GREEN + "Skip Item"); @@ -560,6 +553,8 @@ 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); + meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); stack.setItemMeta(meta); return stack; @@ -568,4 +563,57 @@ public ArrayList createMaterielList() { 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 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); + } + + @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) { + 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); + } + if (slot == NEIN_INDEX) { + player.closeInventory(); + } + e.setCancelled(true); + } + } + } } diff --git a/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java b/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java index cf8f352..a967cc1 100644 --- a/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java +++ b/src/main/java/de/fanta/challenges/gravestones/GravestoneUtils.java @@ -127,6 +127,7 @@ container.set(UUIDKey, PersistentDataType.STRING, player.getUniqueId().toString()); container.set(inventoryKey, PersistentDataType.BYTE_ARRAY, inventoryBytes); }); + ChatUtil.sendNormalMessage(player, "Dein Grabschstein steht bei:" + ChatUtil.ORANGE + " (" + player.getLocation().getBlockX() + "/" + player.getLocation().getBlockY() + "/" + player.getLocation().getBlockZ() + ")"); } } diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 9c37019..ac2b6d0 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -104,5 +104,7 @@ pM.registerEvents(new ForceItemChallengeEvent(), plugin); pM.registerEvents(new CheckItemsGUI(), plugin); + + pM.registerEvents(new ForceItemChallengeEvent.AcceptGUI(), plugin); } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java index c0bc205..52c05d5 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -111,12 +111,7 @@ int dir = (int) Math.signum(difference * -1); IntPredicate forCondition = (dir == -1) ? curr -> curr > 0 && positions.get(curr - 1).getScore() < data.getScore() - : curr -> curr < positions.size() - 2 && positions.get(curr + 1).getScore() > data.getScore(); - - // did we have the same score as the one before us and thus hat the same position but dont anymore because we got worse? - /*if (dir == 1 && current > 0 && data.getScore() == positions.get(current - 1).getScore()) { - data.setPosition(data.getPostition() + 1); - }*/ + : curr -> curr < positions.size() - 1 && positions.get(curr + 1).getScore() > data.getScore(); int startingIndex = data.getIndex(); @@ -128,17 +123,8 @@ positions.set(current, other); data.setIndex(current + dir); other.setIndex(current); - - /*int oldPosition = data.getPostition(); - data.setPosition(other.getPostition()); - other.setPosition(oldPosition);*/ } - // do we now have the same score as the one before us and thus get the same position? - /*if (dir == -1 && current > 0 && data.getScore() == positions.get(current - 1).getScore()) { - data.setPosition(positions.get(current + dir).getPostition()); - }*/ - // update positions int endIndex = data.getIndex(); int i = Math.min(startingIndex, endIndex); diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java index 5054d4d..9e3a596 100644 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -18,6 +18,9 @@ private static final Challenges plugin = Challenges.getPlugin(); public static void saveWorld(String uuid, Boolean autosafe) { + if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { + return; + } Challenges.getPlugin().getConfig().set("timertime", Challenges.getPlugin().getTimer().getTime()); Challenges.getPlugin().saveConfig(); Challenges.getPlugin().getConfig().set("backpack_size", Challenges.getPlugin().getBackpack().getSize() / 9); @@ -58,19 +61,19 @@ if (loaddir.isDirectory()) { loaddir.delete(); } - try { - FileUtils.forceMkdir(dir); - FileUtils.copyDirectory(configs, saveconfigs); - FileUtils.copyDirectory(end, saveend); - FileUtils.copyDirectory(nether, savenether); - FileUtils.copyDirectory(world, saveworld); - if (loaddir.isDirectory()) { - FileUtils.deleteDirectory(loaddir); - } - FileUtils.moveDirectory(dir, loaddir); - } catch (IOException ex) { - Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + try { + FileUtils.forceMkdir(dir); + FileUtils.copyDirectory(configs, saveconfigs); + FileUtils.copyDirectory(end, saveend); + FileUtils.copyDirectory(nether, savenether); + FileUtils.copyDirectory(world, saveworld); + if (loaddir.isDirectory()) { + FileUtils.deleteDirectory(loaddir); } + FileUtils.moveDirectory(dir, loaddir); + } catch (IOException ex) { + Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); + } } else if (plugin.getServerType() == ServerType.ADVENTURE) { File loaddir; if (autosafe) { @@ -95,8 +98,6 @@ Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); ChatUtil.sendErrorMessage(Bukkit.getPlayer(uuid), "Map konnte nicht richtig gespeichert werden, bitte versuche es noch einmal"); } - } else { - throw new RuntimeException("Motd stimmt nicht überein!"); } } }