diff --git a/pom.xml b/pom.xml index b77262c..263cd01 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ io.papermc.paper paper-api - 1.20.2-R0.1-SNAPSHOT + 1.20.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java index 6f4b488..237d870 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -29,6 +29,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityMountEvent; import org.bukkit.event.entity.EntityPlaceEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -39,7 +40,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; -import org.spigotmc.event.entity.EntityMountEvent; import java.util.ArrayList; import java.util.HashMap; @@ -256,7 +256,7 @@ @EventHandler public void onPlantBreak(BlockBreakEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - if (e.getBlock().getType() != Material.GRASS) { + if (e.getBlock().getType() != Material.SHORT_GRASS) { return; } if (random.nextInt(10) == 0) { diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java deleted file mode 100644 index 5fc5019..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java +++ /dev/null @@ -1,692 +0,0 @@ -package de.fanta.challenges.challenges.ChallengeEvents; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.schedular.CancellableTask; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.scoreboard.ScoreManager; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.Config; -import de.fanta.challenges.utils.CubesideModUtils; -import de.fanta.challenges.utils.guiutils.AbstractWindow; -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; -import org.bukkit.OfflinePlayer; -import org.bukkit.Sound; -import org.bukkit.block.Block; -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; -import org.bukkit.entity.Player; -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.ClickType; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryDragEvent; -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; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerGameModeChangeEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; -import org.bukkit.inventory.CraftingInventory; -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; -import org.spigotmc.event.entity.EntityDismountEvent; - -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; -import java.util.UUID; - -public class ForceItemChallengeEvent implements Listener { - private static boolean running; - - private static final Challenges plugin = Challenges.getPlugin(); - - private static boolean isRunning() { - return running; - } - - private static void setRunning(boolean run) { - running = run; - } - - private static final ArrayList materials = new ArrayList<>(); - - private static final HashMap itemByPlayerList = new HashMap<>(); - - private static final HashMap> playerMaterials = new HashMap<>(); - private static final ArrayList dismountAllowList = new ArrayList<>(); - - private static final Map bossBarMap = new HashMap<>(); - - private final HashMap playerTasks = new HashMap<>(); - - private static final Random random = new Random(); - - public static ItemStack skipItem; - public static int skipItemCount = 3; - - private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipItem"); - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(Config.getString("event.type"), "forceitem")) { - if (event.isRunning()) { - skipItem = createSkipItem(); - - for (Material material : Material.values()) { - if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material) && !material.name().contains("smithing_template".toUpperCase())) { - materials.add(material); - } - } - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); - addArmorStand(pp); - pp.getInventory().setItem(8, skipItem); - startUpdateTask(pp); - } - - setRunning(true); - } else { - stopUpdateTask(); - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - removeArmorStand(pp); - pp.setGameMode(GameMode.SPECTATOR); - } - - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); - if (p.isOnline()) { - String[] lines = {"", "", "", " " + ChatUtil.BLUE + p.getName(), ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Items gesammelt", ChatUtil.GREEN + " und hat damit gewonnen!", "", ""}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Items gesammelt und hat damit gewonnen!", ChatUtil.BLUE); - } - } - - setRunning(false); - } - } - } - - @EventHandler - public void onGameModeSwitch(PlayerGameModeChangeEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (e.getNewGameMode() == GameMode.SPECTATOR) { - removeArmorStand(player); - } else if (!plugin.getVanish().isVanish(player)) { - addArmorStand(player); - } - } - } - - @EventHandler - public void onToggleVanish(VanishStatusChangeEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (e.isVanishing()) { - removeArmorStand(player); - } else if (player.getGameMode() != GameMode.SPECTATOR) { - if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player.getUniqueId()))) { - plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); - } - - addArmorStand(player); - - if (itemByPlayerList.get(player.getUniqueId()) == null) { - plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); - updateBossBar(); - player.getInventory().setItem(8, skipItem); - } - } - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - removeArmorStand(player); - stopUpdateTask(e.getPlayer()); - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onPlayerJoin(PlayerJoinEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (plugin.getVanish().isVanish(player)) { - return; - } - plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); - - - addArmorStand(player); - updateBossBar(); - startUpdateTask(player); - - if (itemByPlayerList.get(player.getUniqueId()) == null) { - player.getInventory().setItem(8, skipItem); - } - } - } - - @EventHandler - public void onPickUpItem(PlayerAttemptPickupItemEvent e) { - ItemStack itemStack = e.getItem().getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - selectItem(player, itemStack.getType()); - } - } - - @EventHandler - public void onBucketFill(PlayerBucketFillEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - selectItem(player, itemStack.getType()); - } - } - } - - @EventHandler - public void onBucketChatchFish(PlayerBucketEntityEvent e) { - ItemStack itemStack = e.getEntityBucket(); - if (isRunning()) { - selectItem(e.getPlayer(), itemStack.getType()); - } - } - - @EventHandler - public void onBlockPlace(BlockPlaceEvent e) { - if (isRunning()) { - ItemStack stack = e.getItemInHand(); - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onDropItem(PlayerDropItemEvent e) { - if (isRunning()) { - ItemStack stack = e.getItemDrop().getItemStack(); - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - - @EventHandler - public void onSwapItem(PlayerSwapHandItemsEvent e) { - if (!isRunning()) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - @EventHandler - 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 onInventoryClick(InventoryClickEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCurrentItem(); - ItemStack stackInHand = e.getCursor(); - Player player = (Player) e.getWhoClicked(); - ItemMeta meta = null; - ItemMeta metaInHand = null; - - if (stack != null) { - meta = stack.getItemMeta(); - } - - if (stackInHand != null) { - metaInHand = stackInHand.getItemMeta(); - } - - if (e.getClick() == ClickType.NUMBER_KEY) { - int slot = e.getHotbarButton(); - if (slot >= 0 && slot < 9) { - if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { - ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); - if (swap != null) { - ItemMeta swapItemMeta = swap.getItemMeta(); - if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - } - } - - if (meta != null && meta.getPersistentDataContainer().has(skipKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(skipKey)) { - switch (e.getAction()) { - case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { - if (e.getClickedInventory() != player.getInventory()) { - e.setCancelled(true); - } - } - case MOVE_TO_OTHER_INVENTORY -> { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - default -> { - e.setCancelled(true); - return; - } - } - } - - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - selectItem((Player) e.getWhoClicked(), itemStack.getType()); - } - } - - @EventHandler - public void onItemDrag(InventoryDragEvent e) { - if (!isRunning()) { - return; - } - ItemStack stack = e.getCursor(); - ItemMeta stackMeta = null; - ItemStack oldStack = e.getOldCursor(); - ItemMeta oldStackMeta = null; - if (stack != null) { - if (stack.getItemMeta() != null) { - stackMeta = stack.getItemMeta(); - } - } - - if (oldStack.getItemMeta() != null) { - oldStackMeta = oldStack.getItemMeta(); - } - - if (stackMeta != null && stackMeta.getPersistentDataContainer().has(skipKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(skipKey)) { - if (!(e.getInventory() instanceof CraftingInventory)) { - e.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDeath(PlayerDeathEvent e) { - if (isRunning()) { - ItemStack[] inv = e.getEntity().getInventory().getContents(); - for (ItemStack stack : inv) { - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.getItemsToKeep().add(stack); - e.getDrops().remove(stack); - } - } - } - removeArmorStand(e.getEntity()); - } - } - - @EventHandler - public void onRespawn(PlayerRespawnEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - plugin.getScheduler().runDelayedOnEntity(player, () -> 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); - } - } - } - } - - @EventHandler - public void onClick(PlayerInteractEvent e) { - if (isRunning()) { - if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) { - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - new AcceptGUI(e.getPlayer()).open(); - } - } - } - - } - - @EventHandler - public void onDismountEntity(EntityDismountEvent e) { - if (isRunning()) { - if (e.getDismounted() instanceof Player player) { - if (!dismountAllowList.contains(player)) { - e.setCancelled(true); - } - } - } - } - - public void startUpdateTask(Player player) { - playerTasks.put(player.getUniqueId(), plugin.getScheduler().runOnEntityAtFixedRate(player, () -> tick(player), 1L, 1L)); - } - - public void stopUpdateTask() { - for (CancellableTask cancellableTask : playerTasks.values()) { - if (cancellableTask != null) { - cancellableTask.cancel(); - } - } - playerTasks.clear(); - } - - public void stopUpdateTask(Player player) { - CancellableTask cancellableTask = playerTasks.get(player.getUniqueId()); - cancellableTask.cancel(); - playerTasks.remove(player.getUniqueId()); - } - - private void tick(Player player) { - if (player.getGameMode() == GameMode.SPECTATOR || plugin.getVanish().isVanish(player)) { - return; - } - - Location location = player.getLocation(); - Block block = location.getBlock(); - if (block.getType() == Material.NETHER_PORTAL || block.getType() == Material.END_PORTAL || block.getType() == Material.END_GATEWAY) { - removeArmorStand(player); - } else { - if (player.getPassengers().isEmpty()) { - addArmorStand(player); - } - } - - if (!player.getPassengers().isEmpty()) { - for (Entity entity : player.getPassengers()) { - entity.setRotation(location.getYaw(), location.getPitch()); - } - if (location.getPitch() < -50) { - for (Entity entity : player.getPassengers()) { - player.hideEntity(plugin, entity); - } - } else { - for (Entity entity : player.getPassengers()) { - player.showEntity(plugin, entity); - } - } - } - } - - public void mountArmorStand(Player player) { - if (player.getPassengers().isEmpty()) { - ArmorStand stand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); - stand.setMarker(true); - stand.setInvisible(true); - stand.setInvulnerable(true); - stand.setCollidable(false); - stand.setPersistent(false); - stand.setRemoveWhenFarAway(true); - player.addPassenger(stand); - } - } - - public static void updateArmorStand(Player player, Material material) { - if (!player.getPassengers().isEmpty()) { - for (Entity entity : player.getPassengers()) { - if (entity instanceof ArmorStand stand) { - stand.getEquipment().setHelmet(new ItemStack(material)); - } - } - updateBossBar(); - } - } - - public static void updateItem(Player player) { - ArrayList itemList = playerMaterials.get(player.getUniqueId()); - if (itemList.isEmpty()) { - plugin.getTimer().stopTimer(); - setRunning(false); - ChatUtil.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); - } - - public static void selectItem(Player player, Material pickupItem) { - Material playerItem = itemByPlayerList.get(player.getUniqueId()); - if (pickupItem.equals(playerItem)) { - ArrayList itemList = playerMaterials.get(player.getUniqueId()); - itemList.remove(pickupItem); - playerMaterials.put(player.getUniqueId(), itemList); - plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); - ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + new ItemStack(pickupItem).getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); - CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); - updateItem(player); - - if (!itemList.isEmpty()) { - playerItem = itemByPlayerList.get(player.getUniqueId()); - for (ItemStack stack : player.getInventory().getContents()) { - if (stack != null && stack.getType().equals(playerItem)) { - selectItem(player, playerItem); - break; - } - } - } - } - } - - private static void updateBossBar() { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - Material playerItem = itemByPlayerList.get(p.getUniqueId()); - if (playerItem == null) { - return; - } - String bossBarTitle = ChatUtil.GREEN + ">> " + ChatUtil.BLUE + playerItem.toString().replace("_", " ") + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p.getUniqueId()))); - BossBar bossBar = bossBarMap.computeIfAbsent(p.getUniqueId(), player -> { - BossBar newBossBar = Bukkit.createBossBar(bossBarTitle, BarColor.GREEN, BarStyle.SOLID); - newBossBar.setVisible(true); - newBossBar.addPlayer(p); - return newBossBar; - }); - if (!bossBar.getPlayers().contains(p)) { - bossBar.addPlayer(p); - } - bossBar.setTitle(bossBarTitle); - } - } - - public void removeArmorStand(Player player) { - if (!player.getPassengers().isEmpty()) { - dismountAllowList.add(player); - for (Entity entity : player.getPassengers()) { - entity.remove(); - } - dismountAllowList.remove(player); - } - } - - public void addArmorStand(Player player) { - plugin.getScheduler().runDelayedOnEntity(player, () -> { - if (!player.isDead()) { - mountArmorStand(player); - if (itemByPlayerList.get(player.getUniqueId()) != null) { - updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); - } else { - playerMaterials.put(player.getUniqueId(), createMaterielList()); - updateItem(player); - } - } - }, 1L); - } - - public ItemStack createSkipItem() { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, skipItemCount); - 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); - meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); - meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - stack.setItemMeta(meta); - - return stack; - } - - public ArrayList createMaterielList() { - return new ArrayList<>(materials); - } - - 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; - - public AcceptGUI(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGUIPREFIX() + " >> Settings")); - } - - @Override - public void onItemClicked(InventoryClickEvent event) { - Player player = getPlayer(); - if (!mayAffectThisInventory(event)) { - return; - } - - 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); - } - 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; - } - this.getInventory().setItem(i, item); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java new file mode 100644 index 0000000..359ca87 --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/ForceQuestChallengeEvent.java @@ -0,0 +1,1051 @@ +package de.fanta.challenges.challenges.ChallengeEvents.forcequest; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.schedular.CancellableTask; +import de.fanta.challenges.scoreboard.ChallengePlayer; +import de.fanta.challenges.scoreboard.Scorable; +import de.fanta.challenges.scoreboard.ScoreManager; +import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.Config; +import de.fanta.challenges.utils.CubesideModUtils; +import de.fanta.challenges.utils.guiutils.AbstractWindow; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import de.iani.cubesideutils.StringUtil; +import de.iani.cubesideutils.bukkit.items.ItemGroups; +import org.bukkit.Bukkit; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; +import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; +import org.bukkit.block.Biome; +import org.bukkit.block.Block; +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; +import org.bukkit.entity.Player; +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.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.EntityDismountEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +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; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerGameModeChangeEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.CraftingInventory; +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.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.kitteh.vanish.event.VanishStatusChangeEvent; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Random; +import java.util.TreeMap; +import java.util.UUID; + +public class ForceQuestChallengeEvent implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + private static final Random random = new Random(); + + private static boolean running; + public static ItemStack skipItem; + public static int skipQuestCount = 3; + private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipQuest"); + + private static final ArrayList materials = new ArrayList<>(); + private static final ArrayList biomes = new ArrayList<>(); + private static final ArrayList entityTypes = new ArrayList<>(); + private static final ArrayList damageCauses = new ArrayList<>(); + private static final ArrayList potionEffectTypes = new ArrayList<>(); + + private static final HashMap itemByPlayerList = new HashMap<>(); + private static final HashMap biomeByPlayerList = new HashMap<>(); + private static final HashMap entityTypeByPlayerList = new HashMap<>(); + private static final HashMap damageCauseByPlayerList = new HashMap<>(); + private static final HashMap potionEffectTypeByPlayerList = new HashMap<>(); + private static final HashMap locationByPlayerList = new HashMap<>(); + private static final HashMap lastPlayerDamageCauseList = new HashMap<>(); + + private static final HashMap> playerMaterials = new HashMap<>(); + private static final HashMap> playerBiomes = new HashMap<>(); + private static final HashMap> playerEntityTypes = new HashMap<>(); + private static final HashMap> playerDamageCauses = new HashMap<>(); + private static final HashMap> playerPotionEffectTypes = new HashMap<>(); + + private static final ArrayList dismountAllowList = new ArrayList<>(); + + private static final HashMap bossBarMap = new HashMap<>(); + private final HashMap playerTasks = new HashMap<>(); + private static final HashMap playerQuest = new HashMap<>(); + + private final Collection initPlayers = new ArrayList<>(); + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + if (event.isRunning()) { + skipItem = createSkipItem(); + + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material) && !material.name().contains("smithing_template".toUpperCase()) && !material.name().contains("sherd".toUpperCase())) { + materials.add(material); + } + } + + for (Biome biome : Biome.values()) { + if (biome != Biome.CUSTOM) { + biomes.add(biome); + } + } + + for (EntityType entityType : EntityType.values()) { + if (entityType.isAlive() && entityType != EntityType.ZOMBIE_HORSE && entityType != EntityType.GIANT && entityType != EntityType.ILLUSIONER && entityType != EntityType.PLAYER) { + entityTypes.add(entityType); + } + } + + for (EntityDamageEvent.DamageCause damageCause : EntityDamageEvent.DamageCause.values()) { + if (damageCause != EntityDamageEvent.DamageCause.KILL && damageCause != EntityDamageEvent.DamageCause.WORLD_BORDER && damageCause != EntityDamageEvent.DamageCause.CUSTOM && damageCause != EntityDamageEvent.DamageCause.DRYOUT && damageCause != EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK && damageCause != EntityDamageEvent.DamageCause.MELTING && damageCause != EntityDamageEvent.DamageCause.SUICIDE) { + damageCauses.add(damageCause); + } + } + + for (PotionEffectType potionEffectType : PotionEffectType.values()) { + if (potionEffectType != PotionEffectType.LUCK && potionEffectType != PotionEffectType.UNLUCK) { + potionEffectTypes.add(potionEffectType); + } + } + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + initPlayer(pp); + } + + setRunning(true); + } else { + stopUpdateTask(); + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + removeArmorStand(pp); + pp.setGameMode(GameMode.SPECTATOR); + } + + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); + if (p.isOnline()) { + String[] lines = {"", "", "", " " + ChatUtil.BLUE + p.getName(), ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Aufgaben erledigt", ChatUtil.GREEN + " und hat damit gewonnen!", "", ""}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Aufgaben erledigt und hat damit gewonnen!", ChatUtil.BLUE); + } + } + + setRunning(false); + } + } + } + + private void initPlayer(Player player) { + ChallengePlayer cp = new ChallengePlayer(player.getUniqueId()); + if (!initPlayers.contains(player.getUniqueId())) { + plugin.getScoreManager().join(cp); + playerMaterials.put(player.getUniqueId(), new ArrayList<>(materials)); + playerBiomes.put(player.getUniqueId(), new ArrayList<>(biomes)); + playerEntityTypes.put(player.getUniqueId(), new ArrayList<>(entityTypes)); + playerDamageCauses.put(player.getUniqueId(), new ArrayList<>(damageCauses)); + playerPotionEffectTypes.put(player.getUniqueId(), new ArrayList<>(potionEffectTypes)); + + player.getInventory().setItem(8, skipItem); + initPlayers.add(player.getUniqueId()); + } + + if (!playerQuest.containsKey(player.getUniqueId())) { + createNewQuest(player); + } + + addArmorStand(player); + updateArmorStand(player); + startUpdateTask(player); + } + + private static void createNewQuest(Player player) { + QuestType questType = getRandomQuest(player); + playerQuest.put(player.getUniqueId(), questType); + + switch (questType) { + case ForceItem -> { + ArrayList itemList = playerMaterials.get(player.getUniqueId()); + Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + itemByPlayerList.put(player.getUniqueId(), item); + } + case ForceBiome -> { + ArrayList itemList = playerBiomes.get(player.getUniqueId()); + Biome biome = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + biomeByPlayerList.put(player.getUniqueId(), biome); + } + case ForceMob -> { + ArrayList itemList = playerEntityTypes.get(player.getUniqueId()); + EntityType entityType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + entityTypeByPlayerList.put(player.getUniqueId(), entityType); + } + case ForceEffect -> { + ArrayList itemList = playerPotionEffectTypes.get(player.getUniqueId()); + PotionEffectType potionEffectType = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + potionEffectTypeByPlayerList.put(player.getUniqueId(), potionEffectType); + } + case ForceDeath -> { + ArrayList itemList = playerDamageCauses.get(player.getUniqueId()); + EntityDamageEvent.DamageCause damageCause = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + damageCauseByPlayerList.put(player.getUniqueId(), damageCause); + } + case ForceLocation -> + locationByPlayerList.put(player.getUniqueId(), getRandomLocationAroundPlayer(player, 350)); + } + } + + private static QuestType getRandomQuest(Player player) { + TreeMap PROBABILITY_MAP; + int MAX_PROBABILITY; + + PROBABILITY_MAP = new TreeMap<>(Comparator.reverseOrder()); + MAX_PROBABILITY = 0; + + for (QuestType questType : QuestType.values()) { + PROBABILITY_MAP.put(MAX_PROBABILITY, questType); + MAX_PROBABILITY += questType.getProbability(); + } + + int result = random.nextInt(MAX_PROBABILITY); + + for (Map.Entry entry : PROBABILITY_MAP.entrySet()) { + if (entry.getKey() <= result) { + QuestType questType = entry.getValue(); + switch (questType) { + case ForceItem -> { + if (playerMaterials.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceBiome -> { + if (playerBiomes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceMob -> { + if (playerEntityTypes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceEffect -> { + if (playerPotionEffectTypes.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceDeath -> { + if (playerDamageCauses.get(player.getUniqueId()).isEmpty()) { + return getRandomQuest(player); + } + return entry.getValue(); + } + case ForceLocation -> { + return entry.getValue(); + } + } + } + } + + throw new IllegalStateException("Fehler bei Ermittlung eines zufälligen Quest Typs. Ermittelter wert: " + result + " | Maximaler Wert: " + MAX_PROBABILITY); + } + + public static Location getRandomLocationAroundPlayer(Player player, double radius) { + double angle = random.nextDouble() * 2 * Math.PI; + double distance = random.nextDouble() * radius; + + double xOffset = Math.cos(angle) * distance; + double zOffset = Math.sin(angle) * distance; + + Location playerLocation = player.getLocation(); + double newX = playerLocation.getX() + xOffset; + double newZ = playerLocation.getZ() + zOffset; + double newY = random.nextDouble(player.getWorld().getMinHeight() + 5, player.getWorld().getMaxHeight()); + + return new Location(player.getWorld(), newX, newY, newZ); + } + + @EventHandler + public void onGameModeSwitch(PlayerGameModeChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.getNewGameMode() == GameMode.SPECTATOR) { + removeArmorStand(player); + } else if (!plugin.getVanish().isVanish(player)) { + addArmorStand(player); + } + } + } + + @EventHandler + public void onToggleVanish(VanishStatusChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.isVanishing()) { + removeArmorStand(player); + } else if (player.getGameMode() != GameMode.SPECTATOR) { + if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player.getUniqueId()))) { + plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); + } + + addArmorStand(player); + + if (itemByPlayerList.get(player.getUniqueId()) == null) { + plugin.getScoreManager().join(new ChallengePlayer(player.getUniqueId())); + updateBossBar(); + player.getInventory().setItem(8, skipItem); + } + } + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + removeArmorStand(player); + stopUpdateTask(e.getPlayer()); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onPlayerJoin(PlayerJoinEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (plugin.getVanish().isVanish(player)) { + return; + } + + initPlayer(player); + } + } + + @EventHandler + public void onPickUpItem(PlayerAttemptPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + selectItem(player, itemStack.getType()); + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + selectItem(player, itemStack.getType()); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + selectItem(e.getPlayer(), itemStack.getType()); + } + } + + @EventHandler + public void onBlockPlace(BlockPlaceEvent e) { + if (isRunning()) { + ItemStack stack = e.getItemInHand(); + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onDropItem(PlayerDropItemEvent e) { + if (isRunning()) { + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + if (!isRunning()) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + @EventHandler + 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 onInventoryClick(InventoryClickEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCurrentItem(); + ItemStack stackInHand = e.getCursor(); + Player player = (Player) e.getWhoClicked(); + ItemMeta meta = null; + ItemMeta metaInHand = null; + + if (stack != null) { + meta = stack.getItemMeta(); + } + + if (stackInHand != null) { + metaInHand = stackInHand.getItemMeta(); + } + + if (e.getClick() == ClickType.NUMBER_KEY) { + int slot = e.getHotbarButton(); + if (slot >= 0 && slot < 9) { + if (!e.getWhoClicked().getInventory().equals(e.getInventory())) { + ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); + if (swap != null) { + ItemMeta swapItemMeta = swap.getItemMeta(); + if (swapItemMeta != null && swapItemMeta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + } + } + + if (meta != null && meta.getPersistentDataContainer().has(skipKey) || metaInHand != null && metaInHand.getPersistentDataContainer().has(skipKey)) { + switch (e.getAction()) { + case NOTHING, PICKUP_ALL, PICKUP_HALF, PICKUP_ONE, PICKUP_SOME, PLACE_ALL, PLACE_ONE, PLACE_SOME, SWAP_WITH_CURSOR, COLLECT_TO_CURSOR, HOTBAR_SWAP -> { + if (e.getClickedInventory() != player.getInventory()) { + e.setCancelled(true); + } + } + case MOVE_TO_OTHER_INVENTORY -> { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + default -> { + e.setCancelled(true); + return; + } + } + } + + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + selectItem((Player) e.getWhoClicked(), itemStack.getType()); + } + } + + @EventHandler + public void onItemDrag(InventoryDragEvent e) { + if (!isRunning()) { + return; + } + ItemStack stack = e.getCursor(); + ItemMeta stackMeta = null; + ItemStack oldStack = e.getOldCursor(); + ItemMeta oldStackMeta = null; + if (stack != null) { + if (stack.getItemMeta() != null) { + stackMeta = stack.getItemMeta(); + } + } + + if (oldStack.getItemMeta() != null) { + oldStackMeta = oldStack.getItemMeta(); + } + + if (stackMeta != null && stackMeta.getPersistentDataContainer().has(skipKey) || oldStackMeta != null && oldStackMeta.getPersistentDataContainer().has(skipKey)) { + if (!(e.getInventory() instanceof CraftingInventory)) { + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void onPlayerInteractEntity(PlayerArmorStandManipulateEvent e) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (isRunning()) { + ItemStack[] inv = e.getEntity().getInventory().getContents(); + for (ItemStack stack : inv) { + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.getItemsToKeep().add(stack); + e.getDrops().remove(stack); + } + } + } + removeArmorStand(e.getEntity()); + + + + Player player = e.getPlayer(); + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceDeath) { + EntityDamageEvent.DamageCause damageCause = lastPlayerDamageCauseList.get(player.getUniqueId()); + if (damageCause != null) { + selectDeath(player, damageCause); + } + } + } + } + + @EventHandler + public void onRespawn(PlayerRespawnEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + plugin.getScheduler().runDelayedOnEntity(player, () -> 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); + } + } + } + } + + @EventHandler + public void onClick(PlayerInteractEvent e) { + if (isRunning()) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + new AcceptGUI(e.getPlayer()).open(); + } + } + } + + } + + @EventHandler + public void onDismountEntity(EntityDismountEvent e) { + if (isRunning()) { + if (e.getDismounted() instanceof Player player) { + if (!dismountAllowList.contains(player)) { + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onMove(PlayerMoveEvent e) { + if (!isRunning()) { + return; + } + + Player player = e.getPlayer(); + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceLocation) { + selectLocation(player, player.getLocation()); + } + + if (questType == QuestType.ForceBiome) { + if (!e.getTo().equals(e.getFrom())) { + selectBiome(player, player.getWorld().getBiome(player.getLocation())); + } + } + } + + @EventHandler + public void onEntityDeath(EntityDeathEvent e) { + if (!isRunning()) { + return; + } + + Player player = e.getEntity().getKiller(); + if (player == null) { + return; + } + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceMob) { + selectMob(player, e.getEntity().getType()); + } + } + + @EventHandler + public void onEffect(EntityPotionEffectEvent e) { + if (!isRunning()) { + return; + } + + if (!(e.getEntity() instanceof Player player)) { + return; + } + + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceEffect) { + PotionEffect effect = e.getNewEffect(); + if (effect != null) { + selectEffect(player, effect.getType()); + } + } + } + + @EventHandler + public void onPlayerDamage(EntityDamageEvent e) { + if (!isRunning()) { + return; + } + + if (!(e.getEntity() instanceof Player player)) { + return; + } + + QuestType questType = playerQuest.get(player.getUniqueId()); + if (questType == QuestType.ForceDeath) { + lastPlayerDamageCauseList.put(player.getUniqueId(), e.getCause()); + } + } + + public void startUpdateTask(Player player) { + playerTasks.put(player.getUniqueId(), plugin.getScheduler().runOnEntityAtFixedRate(player, () -> tick(player), 1L, 1L)); + } + + public void stopUpdateTask() { + for (CancellableTask cancellableTask : playerTasks.values()) { + if (cancellableTask != null) { + cancellableTask.cancel(); + } + } + playerTasks.clear(); + } + + public void stopUpdateTask(Player player) { + CancellableTask cancellableTask = playerTasks.get(player.getUniqueId()); + cancellableTask.cancel(); + playerTasks.remove(player.getUniqueId()); + } + + private void tick(Player player) { + if (player.getGameMode() == GameMode.SPECTATOR || plugin.getVanish().isVanish(player)) { + return; + } + + Location location = player.getLocation(); + Block block = location.getBlock(); + if (block.getType() == Material.NETHER_PORTAL || block.getType() == Material.END_PORTAL || block.getType() == Material.END_GATEWAY) { + removeArmorStand(player); + } else { + if (player.getPassengers().isEmpty()) { + addArmorStand(player); + } + } + + if (!player.getPassengers().isEmpty()) { + for (Entity entity : player.getPassengers()) { + entity.setRotation(location.getYaw(), location.getPitch()); + } + if (location.getPitch() < -50) { + for (Entity entity : player.getPassengers()) { + player.hideEntity(plugin, entity); + } + } else { + for (Entity entity : player.getPassengers()) { + player.showEntity(plugin, entity); + } + } + } + } + + public static void mountArmorStand(Player player) { + if (player.getPassengers().isEmpty()) { + ArmorStand stand = (ArmorStand) player.getWorld().spawnEntity(player.getLocation(), EntityType.ARMOR_STAND); + stand.setMarker(true); + stand.setInvisible(true); + stand.setInvulnerable(true); + stand.setCollidable(false); + stand.setPersistent(false); + stand.setRemoveWhenFarAway(true); + player.addPassenger(stand); + } + } + + private static void updateArmorStand(Player player) { + QuestType questType = playerQuest.get(player.getUniqueId()); + ItemStack stack = new ItemStack(Material.BARRIER); + switch (questType) { + case ForceItem -> stack = new ItemStack(itemByPlayerList.get(player.getUniqueId())); + case ForceBiome -> stack = new ItemStack(Material.GRASS_BLOCK); + case ForceMob -> { + Material material = ItemGroups.getSpawnEggForEntity(entityTypeByPlayerList.get(player.getUniqueId())); + stack = material != null ? new ItemStack(material) : new ItemStack(Material.PIG_SPAWN_EGG); + } + case ForceEffect -> stack = new ItemStack(Material.LINGERING_POTION); + case ForceDeath -> stack = new ItemStack(Material.NETHERITE_AXE); + case ForceLocation -> stack = new ItemStack(Material.COMPASS); + } + + + if (!player.getPassengers().isEmpty()) { + for (Entity entity : player.getPassengers()) { + if (entity instanceof ArmorStand stand) { + stand.getEquipment().setHelmet(stack); + } + } + updateBossBar(); + } + } + + private static void selectItem(Player player, Material pickupItem) { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + if (pickupItem.equals(playerItem)) { + ArrayList itemList = playerMaterials.get(player.getUniqueId()); + itemList.remove(pickupItem); + playerMaterials.put(player.getUniqueId(), itemList); + ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(pickupItem.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void selectBiome(Player player, Biome biome) { + Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); + if (biome.equals(playerBiome)) { + ArrayList biomeList = playerBiomes.get(player.getUniqueId()); + biomeList.remove(biome); + playerBiomes.put(player.getUniqueId(), biomeList); + ChatUtil.sendNormalMessage(player, "Biom: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(biome.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void selectMob(Player player, EntityType entityType) { + EntityType playerEntityType = entityTypeByPlayerList.get(player.getUniqueId()); + if (entityType.equals(playerEntityType)) { + ArrayList entityTypeList = playerEntityTypes.get(player.getUniqueId()); + entityTypeList.remove(entityType); + playerEntityTypes.put(player.getUniqueId(), entityTypeList); + ChatUtil.sendNormalMessage(player, "Mob: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(entityType.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void selectEffect(Player player, PotionEffectType potionEffectType) { + PotionEffectType playerPotionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + if (potionEffectType.equals(playerPotionEffectType)) { + ArrayList potionEffectTypeList = playerPotionEffectTypes.get(player.getUniqueId()); + potionEffectTypeList.remove(potionEffectType); + playerPotionEffectTypes.put(player.getUniqueId(), potionEffectTypeList); + ChatUtil.sendNormalMessage(player, "Effect: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(potionEffectType.getKey().getKey(), true) + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void selectDeath(Player player, EntityDamageEvent.DamageCause damageCause) { + EntityDamageEvent.DamageCause playerDamageCause = damageCauseByPlayerList.get(player.getUniqueId()); + if (damageCause.equals(playerDamageCause)) { + ArrayList damageCauseList = playerDamageCauses.get(player.getUniqueId()); + damageCauseList.remove(damageCause); + playerDamageCauses.put(player.getUniqueId(), damageCauseList); + ChatUtil.sendNormalMessage(player, "Death: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(damageCause.name(), true) + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void selectLocation(Player player, Location location) { + Location playerLocation = locationByPlayerList.get(player.getUniqueId()); + if (location.clone().toCenterLocation().distance(playerLocation.clone().toCenterLocation()) <= 0.5) { + Block block = location.getBlock(); + String locationString = "X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); + ChatUtil.sendNormalMessage(player, "Location: " + ChatUtil.BLUE + locationString + ChatUtil.GREEN + " wurde Registriert"); + finishQuest(player); + } + } + + private static void finishQuest(Player player) { + plugin.getScoreManager().updateScore(new ChallengePlayer(player.getUniqueId()), 1); + CubesideModUtils.sendFlashScreenToCubesideMod(plugin, player, 50, ChatUtil.GREEN); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); + createNewQuest(player); + addArmorStand(player); + updateArmorStand(player); + updateBossBar(); + } + + private static void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + String bossBarTitle = "Es ist ein Fehler aufgetreten :("; + QuestType questType = playerQuest.get(player.getUniqueId()); + switch (questType) { + case ForceItem -> { + Material material = itemByPlayerList.get(player.getUniqueId()); + if (material != null) { + bossBarTitle = ChatUtil.GREEN + ">> ForceItem: " + StringUtil.capitalizeFirstLetter(material.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceBiome -> { + Biome biome = biomeByPlayerList.get(player.getUniqueId()); + if (biome != null) { + bossBarTitle = ChatUtil.GREEN + ">> ForceBiome: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(biome.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceMob -> { + EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); + if (entityType != null) { + bossBarTitle = ChatUtil.GREEN + ">> ForceMob: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(entityType.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceEffect -> { + PotionEffectType potionEffectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + if (potionEffectType != null) { + bossBarTitle = ChatUtil.GREEN + ">> ForceEffect: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(potionEffectType.getKey().getKey(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceDeath -> { + EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); + if (damageCause != null) { + bossBarTitle = ChatUtil.GREEN + ">> ForceDeath: " + ChatUtil.BLUE + StringUtil.capitalizeFirstLetter(damageCause.name(), true) + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + } + } + case ForceLocation -> { + Location location = locationByPlayerList.get(player.getUniqueId()); + if (location != null) { + Block block = location.getBlock(); + String locationString = "X: " + block.getX() + ", Y: " + block.getY() + ", Z: " + block.getZ(); + bossBarTitle = ChatUtil.GREEN + ">> ForceLocation: " + ChatUtil.BLUE + locationString + ChatUtil.GREEN + " <<" + " | " + ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(player.getUniqueId()))); + + } + } + } + + BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossPlayer -> { + BossBar newBossBar = Bukkit.createBossBar("", BarColor.GREEN, BarStyle.SOLID); + newBossBar.setVisible(true); + newBossBar.addPlayer(player); + return newBossBar; + }); + if (!bossBar.getPlayers().contains(player)) { + bossBar.addPlayer(player); + } + bossBar.setTitle(bossBarTitle); + } + } + + public void removeArmorStand(Player player) { + if (!player.getPassengers().isEmpty()) { + dismountAllowList.add(player); + for (Entity entity : player.getPassengers()) { + entity.remove(); + } + dismountAllowList.remove(player); + } + } + + public static void addArmorStand(Player player) { + plugin.getScheduler().runDelayedOnEntity(player, () -> { + if (!player.isDead()) { + mountArmorStand(player); + updateArmorStand(player); + } + }, 1L); + } + + public ItemStack createSkipItem() { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, skipQuestCount); + ItemMeta meta = stack.getItemMeta(); + List lorelist = new ArrayList<>(); + meta.setDisplayName(ChatUtil.GREEN + "Skip Quest"); + meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipQuest"); + lorelist.add(ChatUtil.GREEN + "Rechtsklick um die Aktuelle Quest zu Skippen."); + meta.setLore(lorelist); + meta.addEnchant(Enchantment.VANISHING_CURSE, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + stack.setItemMeta(meta); + + return stack; + } + + private static boolean isRunning() { + return running; + } + + private static void setRunning(boolean run) { + running = run; + } + + public ArrayList createMaterielList() { + return new ArrayList<>(materials); + } + + 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; + + public AcceptGUI(Player player) { + super(player, Bukkit.createInventory(player, InventoryType.HOPPER, plugin.getGUIPREFIX() + " >> Skip Quest?")); + } + + @Override + public void onItemClicked(InventoryClickEvent event) { + Player player = getPlayer(); + if (!mayAffectThisInventory(event)) { + return; + } + + event.setCancelled(true); + if (!getInventory().equals(event.getClickedInventory())) { + return; + } + + int slot = event.getSlot(); + if (slot == YES_INDEX) { + + QuestType questType = playerQuest.get(player.getUniqueId()); + switch (questType) { + case ForceItem -> { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + 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); + } + case ForceBiome -> { + Biome playerBiome = biomeByPlayerList.get(player.getUniqueId()); + selectBiome(player, playerBiome); + } + case ForceMob -> { + EntityType entityType = entityTypeByPlayerList.get(player.getUniqueId()); + selectMob(player, entityType); + } + case ForceEffect -> { + PotionEffectType effectType = potionEffectTypeByPlayerList.get(player.getUniqueId()); + selectEffect(player, effectType); + } + case ForceDeath -> { + EntityDamageEvent.DamageCause damageCause = damageCauseByPlayerList.get(player.getUniqueId()); + selectDeath(player, damageCause); + } + case ForceLocation -> { + Location location = locationByPlayerList.get(player.getUniqueId()); + selectLocation(player, location); + } + } + + + ItemStack skipStack = skipItem.clone(); + skipStack.setAmount(1); + player.getInventory().removeItem(skipStack); + player.closeInventory(); + } + 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; + } + this.getInventory().setItem(i, item); + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java new file mode 100644 index 0000000..e4e54d6 --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/forcequest/QuestType.java @@ -0,0 +1,20 @@ +package de.fanta.challenges.challenges.ChallengeEvents.forcequest; + +public enum QuestType { + ForceItem(45), + ForceBiome(25), + ForceMob(30), + ForceEffect(25), + ForceDeath(15), + ForceLocation(35); + + private final int probability; + + QuestType(int probability) { + this.probability = probability; + } + + public int getProbability() { + return probability; + } +} diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java index d5e0664..90484e7 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -73,10 +73,10 @@ } } case FORCE_ITEM_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forceitem")) { - item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.GREEN + "Force Item Event", true, ChatUtil.GREEN + "Farm so viele Blöcke wie möglich."); + if (Objects.equals(Config.getString("event.type"), "forcequest")) { + item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.GREEN + "Force Quest Event", true, ChatUtil.GREEN + "Erledige so viele Aufgaben wie möglich."); } else { - item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.RED + "Force Item Event", ChatUtil.GREEN + "Farm so viele Blöcke wie möglich."); + item = GUIUtils.createGuiItem(Material.DIAMOND_PICKAXE, ChatUtil.RED + "Force Quest Event", ChatUtil.GREEN + "Erledige so viele Aufgaben wie möglich."); } } case SAMMEL_FIEBER_INDEX -> { @@ -115,7 +115,7 @@ } } case FORCE_ITEM_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forceitem")) { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { item = GUIUtils.createGuiItem(Material.REPEATING_COMMAND_BLOCK, ChatUtil.GREEN + "Force Item Event Settings"); } else { item = GUIUtils.EMPTY_ICON; @@ -215,8 +215,8 @@ } } case FORCE_ITEM_INDEX -> { - if (!Objects.equals(Config.getString("event.type"), "forceitem")) { - Config.setValue("event.type", "forceitem"); + if (!Objects.equals(Config.getString("event.type"), "forcequest")) { + Config.setValue("event.type", "forcequest"); ChatUtil.sendTitleToAll("Event", "Force Item", ChatUtil.GREEN); } else { ChatUtil.sendErrorMessage(p, "Diese Event läuft bereits"); @@ -263,7 +263,7 @@ } } case FORCE_ITEM_SETTINGS_INDEX -> { - if (Objects.equals(Config.getString("event.type"), "forceitem")) { + if (Objects.equals(Config.getString("event.type"), "forcequest")) { new ForceItemSettingsGui(p).open(); } } diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java index 7c42aff..c8efdf1 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/ForceItemSettingsGui.java @@ -1,7 +1,7 @@ package de.fanta.challenges.guis.eventgui; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.ChallengeEvents.ForceItemChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.AbstractWindow; import de.fanta.challenges.utils.guiutils.GUIUtils; @@ -24,7 +24,7 @@ private static final int BACK_INDEX = 6; public ForceItemSettingsGui(Player player) { - super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGUIPREFIX() + " >> Force Item Settings")); + super(player, Bukkit.createInventory(player, InventoryType.DISPENSER, plugin.getGUIPREFIX() + " >> Force Quest Settings")); } @Override @@ -41,14 +41,14 @@ int slot = event.getSlot(); switch (slot) { case ADD_SKIP_INDEX -> { - if (ForceItemChallengeEvent.skipItemCount <= 63) { - ForceItemChallengeEvent.skipItemCount++; + if (ForceQuestChallengeEvent.skipQuestCount <= 63) { + ForceQuestChallengeEvent.skipQuestCount++; rebuildInventory(); } } case REMOVE_SKIP_INDEX -> { - if (ForceItemChallengeEvent.skipItemCount > 1) { - ForceItemChallengeEvent.skipItemCount--; + if (ForceQuestChallengeEvent.skipQuestCount > 1) { + ForceQuestChallengeEvent.skipQuestCount--; rebuildInventory(); } } @@ -67,9 +67,9 @@ case REMOVE_SKIP_INDEX -> item = CustomHeads.RAINBOW_ARROW_DOWN.getHead(ChatUtil.RED + "Remove Skip"); case SKIP_COUNT_INDEX -> { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceItemChallengeEvent.skipItemCount); + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, ForceQuestChallengeEvent.skipQuestCount); ItemMeta meta = stack.getItemMeta(); - meta.setDisplayName("" + ChatUtil.BLUE + ForceItemChallengeEvent.skipItemCount + "x " + ChatUtil.GREEN + "Skip Item"); + meta.setDisplayName("" + ChatUtil.BLUE + ForceQuestChallengeEvent.skipQuestCount + "x " + ChatUtil.GREEN + "Skip Item"); stack.setItemMeta(meta); item = stack; } diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 4ec12e9..e973ef4 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -7,7 +7,7 @@ import de.fanta.challenges.challenges.ChallengeEvents.BridgeRaceChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.DifferentItemsChallenge; -import de.fanta.challenges.challenges.ChallengeEvents.ForceItemChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.forcequest.ForceQuestChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.OreBattleChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; import de.fanta.challenges.challenges.ChallengeEvents.TimeChallengeEvent; @@ -31,7 +31,6 @@ import de.fanta.challenges.challenges.TiedTogetherChallenge; import de.fanta.challenges.challenges.WorldBorderLevelChallenge; import de.fanta.challenges.challenges.XPChallenge; -import de.fanta.challenges.events.TimerChangedEvent; import de.fanta.challenges.gravestones.GravestoneListener; import de.fanta.challenges.guis.coordsgui.CoordsDeleteGUI; import de.fanta.challenges.guis.coordsgui.CoordsGUI; @@ -90,7 +89,7 @@ pM.registerEvents(new BedrockWallChallenge(), plugin); pM.registerEvents(new SammelFieberChallengeEvent(), plugin); pM.registerEvents(new OreBattleChallengeEvent(), plugin); - pM.registerEvents(new ForceItemChallengeEvent(), plugin); + pM.registerEvents(new ForceQuestChallengeEvent(), plugin); pM.registerEvents(new AllAdvancementsChallenge(), plugin); pM.registerEvents(new MobRemoveWorldChallenge(), plugin); pM.registerEvents(new BridgeRaceChallengeEvent(), plugin);