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);