diff --git a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java deleted file mode 100644 index 69981c5..0000000 --- a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java +++ /dev/null @@ -1,254 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.guis.eventgui.EventItemsGui; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.guiutils.GUIUtils; -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.Sound; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.player.PlayerAttemptPickupItemEvent; -import org.bukkit.event.player.PlayerBucketEmptyEvent; -import org.bukkit.event.player.PlayerBucketEntityEvent; -import org.bukkit.event.player.PlayerBucketFillEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -public class BingoChallengeEvent implements Listener { - - private static final Map> playerMaterials = new HashMap<>(); - - private static final Map> teamMaterials = new HashMap<>(); - private static boolean running; - - private static boolean eventend = false; - - private static List materials = new ArrayList<>(); - private static final BossBar bossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Nutze " + ChatUtil.BLUE + "/bingo" + ChatUtil.GREEN + " um die Items zu sehen", BarColor.GREEN, BarStyle.SOLID); - private final Challenges plugin = Challenges.getPlugin(); - - public static List getMaterials() { - return materials; - } - - public void setMaterials(List mat) { - materials = mat; - } - - public static Map> getPlayerMaterials() { - return playerMaterials; - } - - public static Map> getTeamMaterials() { - return playerMaterials; - } - - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - @EventHandler - public void onInventoryClick(InventoryClickEvent e) { - Player player = (Player) e.getWhoClicked(); - Inventory playerInv = EventItemsGui.getPlayerInvs().get(player.getUniqueId()); - if (e.getClickedInventory() == null) { - return; - } - if (!isRunning()) { - return; - } - if (playerInv != null && playerInv.equals(e.getClickedInventory())) { - return; - } - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onPickUpItem(PlayerAttemptPickupItemEvent e) { - ItemStack itemStack = e.getItem().getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - addDiscoveredItem(player, itemStack); - } - } - - @EventHandler - public void onBucketFill(PlayerBucketFillEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onBucketChatchFish(PlayerBucketEntityEvent e) { - ItemStack itemStack = e.getEntityBucket(); - if (isRunning()) { - addDiscoveredItem(e.getPlayer(), itemStack); - } - } - - @EventHandler - public void onBucketEmpty(PlayerBucketEmptyEvent e) { - ItemStack itemStack = e.getItemStack(); - Player player = e.getPlayer(); - if (isRunning()) { - if (itemStack != null) { - addDiscoveredItem(player, itemStack); - } - } - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "bingo")) { - if (event.isRunning()) { - setMaterials(EventItemsGui.getEventItems()); - for (Player p : Bukkit.getOnlinePlayers()) { - bossBar.setVisible(true); - bossBar.addPlayer(p); - } - - if (!plugin.getConfig().getBoolean("event.teams")) { - for (Player p : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(p)); - } - } else { - for (ChallengeTeam team : TeamUtils.getTeams()) { - if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { - plugin.getScoreManager().join(team); - } - } - } - setRunning(true); - } else { - setRunning(false); - } - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - if (isRunning()) { - bossBar.setVisible(true); - bossBar.addPlayer(e.getPlayer()); - - if (plugin.getConfig().getBoolean("event.teams")) { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - playerMaterials.remove(e.getPlayer().getUniqueId()); - playerMaterials.put(e.getPlayer().getUniqueId(), teamMaterials.get(team)); - plugin.getScoreManager().join(team); - } - } else { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); - } - } - } - - public void addDiscoveredItem(Player player, ItemStack itemStack) { - UUID uuid = player.getUniqueId(); - Material material = itemStack.getType(); - if (materials.contains(material)) { - if (!plugin.getConfig().getBoolean("event.teams")) { - List items = new ArrayList<>(); - if (playerMaterials.get(uuid) != null) { - items = playerMaterials.get(uuid); - } - if (!items.contains(material)) { - items.add(material); - - playerMaterials.put(uuid, items); - plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); - ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - - if (plugin.getScoreManager().getScore(new ChallengePlayer(player)) == materials.size()) { - plugin.getTimer().stopTimer(); - GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); - String[] lines = {"", "", "", " " + ChatUtil.BLUE + player.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; - ChatSkull.sendAll(player, lines); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.setGameMode(GameMode.SPECTATOR); - } - } - } - } else { - ChallengeTeam team = TeamUtils.getPlayerTeam(player); - boolean scoreset = false; - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) { - if (pp instanceof Player onlinePlayer) { - List items = new ArrayList<>(); - if (playerMaterials.get(onlinePlayer.getUniqueId()) != null) { - items = playerMaterials.get(onlinePlayer.getUniqueId()); - } - if (!items.contains(material)) { - items.add(material); - playerMaterials.put(onlinePlayer.getUniqueId(), items); - teamMaterials.put(team, items); - if (!scoreset) { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(onlinePlayer), 1); - scoreset = true; - } - ChatUtil.sendNormalMessage(onlinePlayer, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); - onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - - if (plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(onlinePlayer)) == materials.size()) { - if (eventend) { - return; - } - eventend = true; - plugin.getTimer().stopTimer(); - GUIUtils.sendTitleToAll("Event", ChatUtil.GREEN + "Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); - for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { - if (offlinePlayer instanceof Player onPlayer) { - String[] lines = {"", "", "", " " + ChatUtil.BLUE + onPlayer.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; - ChatSkull.sendAll(onPlayer, lines); - } - } - for (Player allplayers : Bukkit.getOnlinePlayers()) { - allplayers.setGameMode(GameMode.SPECTATOR); - } - } - } - } - } - } - } - } -} - - diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java new file mode 100644 index 0000000..363a85c --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BingoChallengeEvent.java @@ -0,0 +1,254 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.guis.eventgui.EventItemsGui; +import de.fanta.challenges.scoreboard.ChallengePlayer; +import de.fanta.challenges.teams.ChallengeTeam; +import de.fanta.challenges.teams.TeamUtils; +import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.Sound; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerAttemptPickupItemEvent; +import org.bukkit.event.player.PlayerBucketEmptyEvent; +import org.bukkit.event.player.PlayerBucketEntityEvent; +import org.bukkit.event.player.PlayerBucketFillEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +public class BingoChallengeEvent implements Listener { + + private static final Map> playerMaterials = new HashMap<>(); + + private static final Map> teamMaterials = new HashMap<>(); + private static boolean running; + + private static boolean eventend = false; + + private static List materials = new ArrayList<>(); + private static final BossBar bossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Nutze " + ChatUtil.BLUE + "/bingo" + ChatUtil.GREEN + " um die Items zu sehen", BarColor.GREEN, BarStyle.SOLID); + private final Challenges plugin = Challenges.getPlugin(); + + public static List getMaterials() { + return materials; + } + + public void setMaterials(List mat) { + materials = mat; + } + + public static Map> getPlayerMaterials() { + return playerMaterials; + } + + public static Map> getTeamMaterials() { + return playerMaterials; + } + + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + Player player = (Player) e.getWhoClicked(); + Inventory playerInv = EventItemsGui.getPlayerInvs().get(player.getUniqueId()); + if (e.getClickedInventory() == null) { + return; + } + if (!isRunning()) { + return; + } + if (playerInv != null && playerInv.equals(e.getClickedInventory())) { + return; + } + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onPickUpItem(PlayerAttemptPickupItemEvent e) { + ItemStack itemStack = e.getItem().getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + addDiscoveredItem(player, itemStack); + } + } + + @EventHandler + public void onBucketFill(PlayerBucketFillEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onBucketChatchFish(PlayerBucketEntityEvent e) { + ItemStack itemStack = e.getEntityBucket(); + if (isRunning()) { + addDiscoveredItem(e.getPlayer(), itemStack); + } + } + + @EventHandler + public void onBucketEmpty(PlayerBucketEmptyEvent e) { + ItemStack itemStack = e.getItemStack(); + Player player = e.getPlayer(); + if (isRunning()) { + if (itemStack != null) { + addDiscoveredItem(player, itemStack); + } + } + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "bingo")) { + if (event.isRunning()) { + setMaterials(EventItemsGui.getEventItems()); + for (Player p : Bukkit.getOnlinePlayers()) { + bossBar.setVisible(true); + bossBar.addPlayer(p); + } + + if (!plugin.getConfig().getBoolean("event.teams")) { + for (Player p : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(p)); + } + } else { + for (ChallengeTeam team : TeamUtils.getTeams()) { + if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { + plugin.getScoreManager().join(team); + } + } + } + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + bossBar.setVisible(true); + bossBar.addPlayer(e.getPlayer()); + + if (plugin.getConfig().getBoolean("event.teams")) { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + playerMaterials.remove(e.getPlayer().getUniqueId()); + playerMaterials.put(e.getPlayer().getUniqueId(), teamMaterials.get(team)); + plugin.getScoreManager().join(team); + } + } else { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); + } + } + } + + public void addDiscoveredItem(Player player, ItemStack itemStack) { + UUID uuid = player.getUniqueId(); + Material material = itemStack.getType(); + if (materials.contains(material)) { + if (!plugin.getConfig().getBoolean("event.teams")) { + List items = new ArrayList<>(); + if (playerMaterials.get(uuid) != null) { + items = playerMaterials.get(uuid); + } + if (!items.contains(material)) { + items.add(material); + + playerMaterials.put(uuid, items); + plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); + ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + + if (plugin.getScoreManager().getScore(new ChallengePlayer(player)) == materials.size()) { + plugin.getTimer().stopTimer(); + GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); + String[] lines = {"", "", "", " " + ChatUtil.BLUE + player.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; + ChatSkull.sendAll(player, lines); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.setGameMode(GameMode.SPECTATOR); + } + } + } + } else { + ChallengeTeam team = TeamUtils.getPlayerTeam(player); + boolean scoreset = false; + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) { + if (pp instanceof Player onlinePlayer) { + List items = new ArrayList<>(); + if (playerMaterials.get(onlinePlayer.getUniqueId()) != null) { + items = playerMaterials.get(onlinePlayer.getUniqueId()); + } + if (!items.contains(material)) { + items.add(material); + playerMaterials.put(onlinePlayer.getUniqueId(), items); + teamMaterials.put(team, items); + if (!scoreset) { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(onlinePlayer), 1); + scoreset = true; + } + ChatUtil.sendNormalMessage(onlinePlayer, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); + onlinePlayer.playSound(onlinePlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + + if (plugin.getScoreManager().getScore(TeamUtils.getPlayerTeam(onlinePlayer)) == materials.size()) { + if (eventend) { + return; + } + eventend = true; + plugin.getTimer().stopTimer(); + GUIUtils.sendTitleToAll("Event", ChatUtil.GREEN + "Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); + for (OfflinePlayer offlinePlayer : TeamUtils.getPlayersInTeam(team)) { + if (offlinePlayer instanceof Player onPlayer) { + String[] lines = {"", "", "", " " + ChatUtil.BLUE + onPlayer.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; + ChatSkull.sendAll(onPlayer, lines); + } + } + for (Player allplayers : Bukkit.getOnlinePlayers()) { + allplayers.setGameMode(GameMode.SPECTATOR); + } + } + } + } + } + } + } + } +} + + diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java new file mode 100644 index 0000000..64d019b --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -0,0 +1,230 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +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 org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.GameRule; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPortalEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + +public class DeathrunChallengeEvent implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + private static final List deadPlayer = new ArrayList<>(); + private final Map bossBarMap = new HashMap<>(); + + public static Location spawnLocation; + private final Map> currentBarrier = new HashMap<>(); + private static final Material barrierBlock = Material.GLASS; + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player p = e.getPlayer(); + World world = p.getWorld(); + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() != GameMode.SPECTATOR) { + if (!deadPlayer.contains(p.getUniqueId().toString())) { + if (!e.getTo().equals(e.getFrom())) { + int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); + ScoreManager scoreManager = plugin.getScoreManager(); + scoreManager.setScore(new ChallengePlayer(p), distance); + + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke", BarColor.GREEN, BarStyle.SOLID); + newBossBar.setVisible(true); + newBossBar.addPlayer(p); + return newBossBar; + }); + + bossBar.setTitle(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke"); + + } + + Location playerLoc = p.getLocation(); + double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); + double distanceToCenter = Math.abs(posRelatedToCenter); + + List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); + + int BARRIER_POS = 15; + int BARRIER_SIZE = 6; + if (distanceToCenter >= BARRIER_POS) { //Outside border + p.damage(0.5); + } else if (distanceToCenter >= BARRIER_POS - 4) { //Inside border + //Send barrier + double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); + Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); + + resetBarrier(p, world, barrierLocations); + for (int y = 0; y < BARRIER_SIZE; y++) { + for (int x = 0; x < BARRIER_SIZE; x++) { + Location blockLoc = loc.clone().add(x, y, 0); + if (!world.getBlockAt(blockLoc).isSolid()) { + barrierLocations.add(blockLoc); + p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); + } + } + } + } else if (!barrierLocations.isEmpty()) { //Away from border + resetBarrier(p, world, barrierLocations); + } + + if (playerLoc.getY() > world.getMaxHeight() - 1) { + p.damage(1); + } + } + } + } + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + p.setWalkSpeed((float) (p.getHealth() / 100f)); + }, 1L); + } + } + } + + @EventHandler + public void onDeath(PlayerDeathEvent e) { + Player p = e.getEntity(); + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { + deadPlayer.add(p.getUniqueId().toString()); + plugin.getSBManager().removeScoreboard(p); + if (plugin.getSBManager().countScoreboardPlayers() == 0) { + plugin.getTimer().stopTimer(); + ChatUtil.sendBrodcastMessage("Das Event wurde beendet, da alle Spieler gestorben sind!"); + } + } + } + + @EventHandler + public void onPortalUse(PlayerPortalEvent e) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { + e.setCancelled(true); + } + } + + @EventHandler + public void onTimerChange(TimerChangedEvent e) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { + if (!e.isRunning()) { + 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 + " ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und hat damit gewonnen!", ChatUtil.BLUE); + } + } + } else { + World world = Bukkit.getWorld("world"); + world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers()); + for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp)); + Location spawn = world.getSpawnLocation(); + spawn.setYaw(-90f); + pp.teleport(spawn); + } + } + } + } + + @EventHandler + public void onBarrierBreak(BlockBreakEvent e) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { + Block block = e.getBlock(); + Location loc = block.getLocation(); + int x = loc.getBlockX(); + int z = loc.getBlockZ(); + int spawnX = spawnLocation.getBlockX(); + int spawnZ = spawnLocation.getBlockZ(); + + int distanceX = spawnX - x; + + if (distanceX > -15 && (Math.abs(distanceX) >= 15 || Math.abs(spawnZ - z) >= 15)) { + ChatUtil.sendWarningMessage(e.getPlayer(), "Niemand hat die Absicht, eine Mauer zu errichten!"); + e.setCancelled(true); + } + } + } + + + public static void load() { + World world = Bukkit.getWorld("world"); + spawnLocation = world.getSpawnLocation(); + + int height = world.getMaxHeight() - world.getMinHeight(); + int width = 30; + + Location loc = spawnLocation.clone().subtract(15, 0, 15); + loc.setY(world.getMinHeight()); + for (int y = 0; y < height; y++) { + for (int z = 0; z < width; z++) { + Block block = loc.clone().add(0, y, z).getBlock(); + if (!block.isSolid()) { + block.setType(barrierBlock); + } + } + } + mexico(15, world); + mexico(-15, world); + + } + + private void resetBarrier(Player p, World world, List locations) { + for (Location location : locations) { + p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); + } + locations.clear(); + } + + private static void mexico(int startPos, World world) { + int height = world.getMaxHeight() - world.getMinHeight(); + int width = 30; + Location loc = spawnLocation.clone().add(-15, 0, startPos); + loc.setY(world.getMinHeight()); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + Block block = loc.clone().add(x, y, 0).getBlock(); + if (!block.isSolid()) { + block.setType(barrierBlock); + } + } + } + } + + public static List getDeadPlayer() { + return deadPlayer; + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java new file mode 100644 index 0000000..8d1397d --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/ForceItemChallengeEvent.java @@ -0,0 +1,566 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +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.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.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.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +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.ItemStack; +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 final Challenges plugin = Challenges.getPlugin(); + + private static boolean isRunning() { + return running; + } + + private void setRunning(boolean run) { + running = run; + } + + private static final ArrayList materials = new ArrayList<>(); + + private static final HashMap entityList = new HashMap<>(); + + private static final HashMap itemByPlayerList = new HashMap<>(); + + private static final HashMap> playerMaterials = new HashMap<>(); + + private final Map bossBarMap = new HashMap<>(); + + private int taskId = -1; + + private final Random random = new Random(); + + private ItemStack skipItem; + + private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipItem"); + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "forceitem")) { + if (event.isRunning()) { + skipItem = createSkipItem(); + + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material)) { + materials.add(material); + } + } + + startUpdateTask(); + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pp)); + addArmorStand(pp); + pp.getInventory().setItem(8, skipItem); + } + + setRunning(true); + } else { + stopUpdateTask(); + + for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + 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 { + addArmorStand(player); + } + } + } + + @EventHandler + public void onToggleVanish(VanishStatusChangeEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + if (e.isVanishing()) { + removeArmorStand(player); + } else { + if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player))) { + plugin.getScoreManager().join(new ChallengePlayer(player)); + } + + addArmorStand(player); + + if (itemByPlayerList.get(player.getUniqueId()) == null) { + plugin.getScoreManager().join(new ChallengePlayer(player)); + updateBossBar(); + player.getInventory().setItem(8, skipItem); + } + } + } + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + if (isRunning()) { + Player player = e.getPlayer(); + removeArmorStand(player); + plugin.getScoreManager().leave(new ChallengePlayer(player)); + } + } + + @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)); + + addArmorStand(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(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + + if (e.getClick() == ClickType.NUMBER_KEY) { + int slot = e.getHotbarButton(); + if (slot >= 0 && slot < 9) { + ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); + if (swap != null) { + ItemMeta meta = swap.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + } + + if (e.getAction() == InventoryAction.HOTBAR_SWAP || e.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) { + ItemStack otherSlot = (e.getClick() == ClickType.SWAP_OFFHAND) ? e.getWhoClicked().getInventory().getItemInOffHand() : e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); + if (otherSlot != null) { + ItemMeta otherSlotMeta = otherSlot.getItemMeta(); + if (otherSlotMeta != null && otherSlotMeta.getPersistentDataContainer().has(skipKey)) { + e.setCancelled(true); + } + } + } + + ItemStack itemStack = e.getCurrentItem(); + if (itemStack != null && itemStack.getType() != Material.AIR) { + selectItem((Player) e.getWhoClicked(), itemStack.getType()); + } + } + + @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(); + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> addArmorStand(player), 1L); + } + } + + @EventHandler + public void onClick(PlayerInteractEvent e) { + if (isRunning()) { + if (e.getAction() != Action.RIGHT_CLICK_AIR) { + return; + } + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + Material playerItem = itemByPlayerList.get(p.getUniqueId()); + if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { + ItemStack skipStack = skipItem.clone(); + skipStack.setAmount(1); + p.getInventory().removeItem(skipStack); + List stackList = new ArrayList<>(); + stackList.add(new ItemStack(playerItem)); + Collection droplist = p.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); + for (ItemStack itemStack : droplist) { + p.getLocation().getWorld().dropItem(p.getLocation(), itemStack); + } + selectItem(p, playerItem); + } + } + + } + + @EventHandler + public void onDismountEntity(EntityDismountEvent e) { + if (isRunning()) { + Entity dismountedEntity = e.getEntity(); + if (entityListContainsEntity(dismountedEntity)) { + e.setCancelled(true); + } + } + } + + public void startUpdateTask() { + taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::tick, 1L, 1L); + } + + public void stopUpdateTask() { + plugin.getServer().getScheduler().cancelTask(taskId); + } + + private void tick() { + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (player.getGameMode() == GameMode.SPECTATOR) { + return; + } + + if (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 (!entityListContainsUUID(player.getUniqueId())) { + 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); + entityListRemove(player.getUniqueId()); + entityListAdd(player.getUniqueId(), stand); + player.addPassenger(stand); + } + } + + public void updateArmorStand(Player player, Material material) { + if (entityListContainsUUID(player.getUniqueId())) { + ArmorStand stand = (ArmorStand) entityListGetEntity(player.getUniqueId()); + stand.getEquipment().setHelmet(new ItemStack(material)); + + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + stand.setInvisible(false); + stand.setInvisible(true); + }, 5L); + + updateBossBar(); + } + } + + public void updateItem(Player player) { + ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); + if (itemList.isEmpty()) { + plugin.getTimer().stopTimer(); + setRunning(false); + GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); + String[] lines = {"", "", "", " " + ChatUtil.BLUE + player.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; + ChatSkull.sendAll(player, lines); + ChatUtil.sendNormalMessage(player, "Du hast alle Items gesammelt und damit gewonnen!"); + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.setGameMode(GameMode.SPECTATOR); + } + return; + } + + Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); + itemByPlayerList.put(player.getUniqueId(), item); + updateArmorStand(player, item); + } + + public void selectItem(Player player, Material pickupItem) { + Material playerItem = itemByPlayerList.get(player.getUniqueId()); + if (pickupItem.equals(playerItem)) { + ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); + itemList.remove(pickupItem); + playerMaterials.put(player.getUniqueId(), itemList); + plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); + ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + new ItemStack(pickupItem).getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); + updateItem(player); + } + } + + public void updateBossBar() { + ScoreManager scoreManager = plugin.getScoreManager(); + for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + Material playerItem = itemByPlayerList.get(player.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(player))); + BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossbarPlayer -> { + BossBar newBossBar = Bukkit.createBossBar(bossBarTitle, BarColor.GREEN, BarStyle.SOLID); + newBossBar.setVisible(true); + newBossBar.addPlayer(player); + return newBossBar; + }); + bossBar.setTitle(bossBarTitle); + } + } + + public void entityListAdd(UUID uuid, Entity entity) { + entityList.put(uuid, entity); + } + + public void entityListRemove(UUID uuid) { + entityList.remove(uuid); + } + + public boolean entityListContainsUUID(UUID uuid) { + return entityList.containsKey(uuid); + } + + public boolean entityListContainsEntity(Entity entity) { + return entityList.containsValue(entity); + } + + public Entity entityListGetEntity(UUID uuid) { + return entityList.get(uuid); + } + + public void removeArmorStand(Player player) { + if (entityListContainsUUID(player.getUniqueId())) { + entityListGetEntity(player.getUniqueId()).remove(); + entityListRemove(player.getUniqueId()); + } + } + + public void addArmorStand(Player player) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + if (!player.isDead()) { + mountArmorStand(player); + if (itemByPlayerList.get(player.getUniqueId()) != null) { + updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); + } else { + updateItem(player); + } + } + }, 1L); + + } + + public ItemStack createSkipItem() { + ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, 3); + ItemMeta meta = stack.getItemMeta(); + List lorelist = new ArrayList<>(); + meta.setDisplayName(ChatUtil.GREEN + "Skip Item"); + meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipItem"); + lorelist.add(ChatUtil.GREEN + "Rechtsklick um das Aktuelle Item zu Skippen."); + lorelist.add(ChatUtil.GREEN + "Geskippte Items bekommst du 1x ins Inventar."); + meta.setLore(lorelist); + stack.setItemMeta(meta); + + return stack; + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattle.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattle.java new file mode 100644 index 0000000..7764986 --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/OreBattle.java @@ -0,0 +1,173 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.scoreboard.ChallengePlayer; +import de.fanta.challenges.scoreboard.Scorable; +import de.fanta.challenges.teams.ChallengeTeam; +import de.fanta.challenges.teams.TeamUtils; +import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.HashMap; +import java.util.Objects; + +public class OreBattle implements Listener { + private static final HashMap blocklist = new HashMap<>(); + private static boolean running; + private final Challenges plugin = Challenges.getPlugin(); + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "orebattle")) { + if (event.isRunning()) { + blocklist.put(Material.EMERALD_ORE, 100); + blocklist.put(Material.DEEPSLATE_EMERALD_ORE, 100); + blocklist.put(Material.DIAMOND_ORE, 72); + blocklist.put(Material.DEEPSLATE_DIAMOND_ORE, 45); + blocklist.put(Material.GOLD_ORE, 2); + blocklist.put(Material.DEEPSLATE_GOLD_ORE, 11); + blocklist.put(Material.IRON_ORE, 4); + blocklist.put(Material.DEEPSLATE_IRON_ORE, 15); + blocklist.put(Material.COPPER_ORE, 1); + blocklist.put(Material.DEEPSLATE_COPPER_ORE, 36); + blocklist.put(Material.REDSTONE_ORE, 43); + blocklist.put(Material.DEEPSLATE_REDSTONE_ORE, 7); + blocklist.put(Material.COAL_ORE, 1); + blocklist.put(Material.DEEPSLATE_COAL_ORE, 93); + blocklist.put(Material.LAPIS_ORE, 33); + blocklist.put(Material.DEEPSLATE_LAPIS_ORE, 22); + + for (Player pp : Bukkit.getOnlinePlayers()) { + ItemStack pickaxe = new ItemStack(Material.NETHERITE_PICKAXE, 1); + ItemMeta pickaxeMeta = pickaxe.getItemMeta(); + + pickaxeMeta.addEnchant(Enchantment.DIG_SPEED, 2, true); + pickaxeMeta.setUnbreakable(true); + + pickaxe.setItemMeta(pickaxeMeta); + if (!plugin.getConfig().getBoolean("event.teams")) { + for (Player player : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(player)); + } + + if (TeamUtils.getPlayerTeam(pp) != null) { + pp.getInventory().addItem(new ItemStack(Material.NETHERITE_SWORD)); + pp.getInventory().addItem(pickaxe); + pp.getInventory().addItem(new ItemStack(Material.COOKED_BEEF, 32)); + } + } else { + for (ChallengeTeam team : TeamUtils.getTeams()) { + if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { + plugin.getScoreManager().join(team); + } + } + + if (pp.getGameMode() == GameMode.SURVIVAL) { + pp.getInventory().addItem(new ItemStack(Material.NETHERITE_SWORD)); + pp.getInventory().addItem(pickaxe); + pp.getInventory().addItem(new ItemStack(Material.COOKED_BEEF, 32)); + } + } + } + + + setRunning(true); + } else { + setRunning(false); + if (!plugin.getConfig().getBoolean("event.teams")) { + 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) + " Punkte und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; + ChatSkull.sendAll((Player) p, lines); + } else { + ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und hat damit gewonnen!", ChatUtil.BLUE); + } + GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN); + } + + + } else { + for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { + ChallengeTeam team = TeamUtils.getTeam(scorable.getName()); + if (team != null) { + GUIUtils.sendTitleToAll("Event", "Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN); + String[] lines = {"", "", "", " " + ChatUtil.BLUE + "Team " + team.getChatColor() + team.getName(), ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) + if (pp.isOnline()) { + ChatSkull.sendAll((Player) pp, lines); + } + } + } + + + } + } + } + } + + @EventHandler + public void onBreakBlock(BlockBreakEvent e) { + if (isRunning()) { + if (blocklist.containsKey(e.getBlock().getType())) { + if (!plugin.getConfig().getBoolean("event.teams")) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer()), blocklist.get(e.getBlock().getType())); + } else { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), blocklist.get(e.getBlock().getType())); + } + ChatUtil.sendTitleToPlayer(e.getPlayer(), "", ChatUtil.BLUE + new ItemStack(e.getBlock().getType()).getI18NDisplayName() + ChatUtil.GREEN + " +" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN, 3, 20, 3, false); + } + } + } + + @EventHandler + public void onPlaceBlock(BlockPlaceEvent e) { + if (isRunning()) { + if (blocklist.containsKey(e.getBlock().getType())) { + if (!plugin.getConfig().getBoolean("event.teams")) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer()), -blocklist.get(e.getBlock().getType())); + } else { + plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), -blocklist.get(e.getBlock().getType())); + } + ChatUtil.sendTitleToPlayer(e.getPlayer(), "", ChatUtil.BLUE + new ItemStack(e.getBlock().getType()).getI18NDisplayName() + ChatUtil.RED + " -" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN, 3, 20, 3, false); + } + } + } + + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + if (plugin.getConfig().getBoolean("event.teams")) { + ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); + if (team != null) { + plugin.getScoreManager().join(team); + } + } else { + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java new file mode 100644 index 0000000..9e7405f --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/SammelFieberChallengeEvent.java @@ -0,0 +1,210 @@ +package de.fanta.challenges.challenges.ChallengeEvents; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; +import de.fanta.challenges.scoreboard.ChallengePlayer; +import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; +import org.bukkit.event.player.PlayerAttemptPickupItemEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.Objects; + +public class SammelFieberChallengeEvent implements Listener { + + public static BossBar bossBar; + public static Location hopperloc; + private static Material material; + private static boolean running; + private static int count; + private final Challenges plugin = Challenges.getPlugin(); + + public static Location getHopperLocation() { + return hopperloc; + } + + public static void setHopperLocation(Location loc) { + SammelFieberChallengeEvent.hopperloc = loc; + } + + public static Material getMaterial() { + return material; + } + + public void setMaterial(Material mat) { + material = mat; + } + + public static boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } + + public static int getCount() { + return count; + } + + @EventHandler + public void onActivation(TimerChangedEvent event) { + if (Objects.equals(plugin.getConfig().getString("event.type"), "sammelfieber")) { + if (event.isRunning()) { + Material material = SammelFieberSettingsGui.getEventItem(); + if (material != Material.AIR && getHopperLocation() != null) { + setMaterial(material); + bossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Es wurden " + ChatUtil.BLUE + count + " " + new ItemStack(getMaterial()).getI18NDisplayName() + ChatUtil.GREEN + " abgegeben. Das sind " + ChatUtil.BLUE + count * SammelFieberSettingsGui.MONEY + " Cubes", BarColor.GREEN, BarStyle.SOLID); + bossBar.setVisible(true); + for (Player pl : Bukkit.getOnlinePlayers()) { + plugin.getScoreManager().join(new ChallengePlayer(pl)); + bossBar.addPlayer(pl); + } + } else { + ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Du musst erst ein Item und Hopper festlegen."); + plugin.getTimer().stopTimer(); + return; + } + setRunning(true); + } else { + setRunning(false); + } + } + } + + @EventHandler + public void onHoppergetItem(InventoryPickupItemEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getInventory().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (!getHopperLocation().equals(blockloc)) { + return; + } + + ItemStack stack = e.getItem().getItemStack(); + + if (stack.getType() != getMaterial()) { + e.setCancelled(true); + return; + } + + ItemMeta meta = stack.getItemMeta(); + + if (meta != null && meta.hasDisplayName()) { + Player player = Bukkit.getPlayer(meta.getDisplayName()); + count = count + stack.getAmount(); + plugin.getScoreManager().updateScore(new ChallengePlayer(player), stack.getAmount()); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + bossBar.setTitle(ChatUtil.GREEN + "Es wurden " + ChatUtil.BLUE + count + " " + new ItemStack(getMaterial()).getI18NDisplayName() + ChatUtil.GREEN + " abgegeben. Das sind " + ChatUtil.BLUE + count * SammelFieberSettingsGui.MONEY + " Cubes"); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> e.getInventory().clear(), 1); + } + + @EventHandler + public void onHopperMoveItem(InventoryMoveItemEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getSource().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockloc)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onInteract(PlayerInteractEvent e) { + if (!isRunning()) { + return; + } + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + Location loc = e.getClickedBlock().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockloc)) { + e.setCancelled(true); + } + } + + } + + @EventHandler + public void onBlockBreak(BlockBreakEvent e) { + if (!isRunning()) { + return; + } + + Location loc = e.getBlock().getLocation(); + Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + if (getHopperLocation().equals(blockloc)) { + e.setCancelled(true); + } + } + + @EventHandler + public void onPlayerDropItem(PlayerDropItemEvent e) { + if (!isRunning()) { + return; + } + + ItemStack stack = e.getItemDrop().getItemStack(); + + if (stack.getType() != getMaterial()) { + return; + } + + ItemMeta meta = stack.getItemMeta(); + meta.setDisplayName(e.getPlayer().getName()); + stack.setItemMeta(meta); + } + + @EventHandler + public void onPlayerPickUpItem(PlayerAttemptPickupItemEvent e) { + if (!isRunning()) { + return; + } + + ItemStack stack = e.getItem().getItemStack(); + + if (stack.getType() != getMaterial()) { + return; + } + + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.hasDisplayName()) { + meta.setDisplayName(""); + stack.setItemMeta(meta); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + if (!isRunning()) { + return; + } + plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); + bossBar.addPlayer(e.getPlayer()); + } + +} diff --git a/src/main/java/de/fanta/challenges/challenges/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/DeathrunChallengeEvent.java deleted file mode 100644 index b1b8574..0000000 --- a/src/main/java/de/fanta/challenges/challenges/DeathrunChallengeEvent.java +++ /dev/null @@ -1,230 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -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 org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.GameRule; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.World; -import org.bukkit.block.Block; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerPortalEvent; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.UUID; - -public class DeathrunChallengeEvent implements Listener { - - private final Challenges plugin = Challenges.getPlugin(); - - private static final List deadPlayer = new ArrayList<>(); - private final Map bossBarMap = new HashMap<>(); - - public static Location spawnLocation; - private final Map> currentBarrier = new HashMap<>(); - private static final Material barrierBlock = Material.GLASS; - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player p = e.getPlayer(); - World world = p.getWorld(); - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() != GameMode.SPECTATOR) { - if (!deadPlayer.contains(p.getUniqueId().toString())) { - if (!e.getTo().equals(e.getFrom())) { - int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); - ScoreManager scoreManager = plugin.getScoreManager(); - scoreManager.setScore(new ChallengePlayer(p), distance); - - BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { - BossBar newBossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke", BarColor.GREEN, BarStyle.SOLID); - newBossBar.setVisible(true); - newBossBar.addPlayer(p); - return newBossBar; - }); - - bossBar.setTitle(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke"); - - } - - Location playerLoc = p.getLocation(); - double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); - double distanceToCenter = Math.abs(posRelatedToCenter); - - List barrierLocations = currentBarrier.computeIfAbsent(p.getUniqueId(), uuid -> new ArrayList<>()); - - int BARRIER_POS = 15; - int BARRIER_SIZE = 6; - if (distanceToCenter >= BARRIER_POS) { //Outside border - p.damage(0.5); - } else if (distanceToCenter >= BARRIER_POS - 4) { //Inside border - //Send barrier - double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); - Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); - - resetBarrier(p, world, barrierLocations); - for (int y = 0; y < BARRIER_SIZE; y++) { - for (int x = 0; x < BARRIER_SIZE; x++) { - Location blockLoc = loc.clone().add(x, y, 0); - if (!world.getBlockAt(blockLoc).isSolid()) { - barrierLocations.add(blockLoc); - p.sendBlockChange(blockLoc, Bukkit.createBlockData(barrierBlock)); - } - } - } - } else if (!barrierLocations.isEmpty()) { //Away from border - resetBarrier(p, world, barrierLocations); - } - - if (playerLoc.getY() > world.getMaxHeight() - 1) { - p.damage(1); - } - } - } - } - - @EventHandler - public void onDamage(EntityDamageEvent e) { - if (e.getEntity() instanceof Player p) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - p.setWalkSpeed((float) (p.getHealth() / 100f)); - }, 1L); - } - } - } - - @EventHandler - public void onDeath(PlayerDeathEvent e) { - Player p = e.getEntity(); - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { - deadPlayer.add(p.getUniqueId().toString()); - plugin.getSBManager().removeScoreboard(p); - if (plugin.getSBManager().countScoreboardPlayers() == 0) { - plugin.getTimer().stopTimer(); - ChatUtil.sendBrodcastMessage("Das Event wurde beendet, da alle Spieler gestorben sind!"); - } - } - } - - @EventHandler - public void onPortalUse(PlayerPortalEvent e) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { - e.setCancelled(true); - } - } - - @EventHandler - public void onTimerChange(TimerChangedEvent e) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { - if (!e.isRunning()) { - 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 + " ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " ist " + plugin.getScoreManager().getScore(scorable) + " Blöcke gelaufen und hat damit gewonnen!", ChatUtil.BLUE); - } - } - } else { - World world = Bukkit.getWorld("world"); - world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers()); - for (Player pp : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp)); - Location spawn = world.getSpawnLocation(); - spawn.setYaw(-90f); - pp.teleport(spawn); - } - } - } - } - - @EventHandler - public void onBarrierBreak(BlockBreakEvent e) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { - Block block = e.getBlock(); - Location loc = block.getLocation(); - int x = loc.getBlockX(); - int z = loc.getBlockZ(); - int spawnX = spawnLocation.getBlockX(); - int spawnZ = spawnLocation.getBlockZ(); - - int distanceX = spawnX - x; - - if (distanceX > -15 && (Math.abs(distanceX) >= 15 || Math.abs(spawnZ - z) >= 15)) { - ChatUtil.sendWarningMessage(e.getPlayer(), "Niemand hat die Absicht, eine Mauer zu errichten!"); - e.setCancelled(true); - } - } - } - - - public static void load() { - World world = Bukkit.getWorld("world"); - spawnLocation = world.getSpawnLocation(); - - int height = world.getMaxHeight() - world.getMinHeight(); - int width = 30; - - Location loc = spawnLocation.clone().subtract(15, 0, 15); - loc.setY(world.getMinHeight()); - for (int y = 0; y < height; y++) { - for (int z = 0; z < width; z++) { - Block block = loc.clone().add(0, y, z).getBlock(); - if (!block.isSolid()) { - block.setType(barrierBlock); - } - } - } - mexico(15, world); - mexico(-15, world); - - } - - private void resetBarrier(Player p, World world, List locations) { - for (Location location : locations) { - p.sendBlockChange(location, world.getBlockAt(location).getBlockData()); - } - locations.clear(); - } - - private static void mexico(int startPos, World world) { - int height = world.getMaxHeight() - world.getMinHeight(); - int width = 30; - Location loc = spawnLocation.clone().add(-15, 0, startPos); - loc.setY(world.getMinHeight()); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - Block block = loc.clone().add(x, y, 0).getBlock(); - if (!block.isSolid()) { - block.setType(barrierBlock); - } - } - } - } - - public static List getDeadPlayer() { - return deadPlayer; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java deleted file mode 100644 index bb7f003..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ForceItemChallengeEvent.java +++ /dev/null @@ -1,566 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -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.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.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.InventoryAction; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -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.ItemStack; -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 final Challenges plugin = Challenges.getPlugin(); - - private static boolean isRunning() { - return running; - } - - private void setRunning(boolean run) { - running = run; - } - - private static final ArrayList materials = new ArrayList<>(); - - private static final HashMap entityList = new HashMap<>(); - - private static final HashMap itemByPlayerList = new HashMap<>(); - - private static final HashMap> playerMaterials = new HashMap<>(); - - private final Map bossBarMap = new HashMap<>(); - - private int taskId = -1; - - private final Random random = new Random(); - - private ItemStack skipItem; - - private final NamespacedKey skipKey = new NamespacedKey(plugin, "SkipItem"); - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "forceitem")) { - if (event.isRunning()) { - skipItem = createSkipItem(); - - for (Material material : Material.values()) { - if (material.isItem() && !material.isAir() && !plugin.getNotAvailableMaterials().contains(material)) { - materials.add(material); - } - } - - startUpdateTask(); - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pp)); - addArmorStand(pp); - pp.getInventory().setItem(8, skipItem); - } - - setRunning(true); - } else { - stopUpdateTask(); - - for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - 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 { - addArmorStand(player); - } - } - } - - @EventHandler - public void onToggleVanish(VanishStatusChangeEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - if (e.isVanishing()) { - removeArmorStand(player); - } else { - if (plugin.getScoreManager().getScores().containsKey(new ChallengePlayer(player))) { - plugin.getScoreManager().join(new ChallengePlayer(player)); - } - - addArmorStand(player); - - if (itemByPlayerList.get(player.getUniqueId()) == null) { - plugin.getScoreManager().join(new ChallengePlayer(player)); - updateBossBar(); - player.getInventory().setItem(8, skipItem); - } - } - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent e) { - if (isRunning()) { - Player player = e.getPlayer(); - removeArmorStand(player); - plugin.getScoreManager().leave(new ChallengePlayer(player)); - } - } - - @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)); - - addArmorStand(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(); - if (stack != null) { - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - - if (e.getClick() == ClickType.NUMBER_KEY) { - int slot = e.getHotbarButton(); - if (slot >= 0 && slot < 9) { - ItemStack swap = e.getWhoClicked().getInventory().getItem(slot); - if (swap != null) { - ItemMeta meta = swap.getItemMeta(); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - } - - if (e.getAction() == InventoryAction.HOTBAR_SWAP || e.getAction() == InventoryAction.HOTBAR_MOVE_AND_READD) { - ItemStack otherSlot = (e.getClick() == ClickType.SWAP_OFFHAND) ? e.getWhoClicked().getInventory().getItemInOffHand() : e.getWhoClicked().getInventory().getItem(e.getHotbarButton()); - if (otherSlot != null) { - ItemMeta otherSlotMeta = otherSlot.getItemMeta(); - if (otherSlotMeta != null && otherSlotMeta.getPersistentDataContainer().has(skipKey)) { - e.setCancelled(true); - } - } - } - - ItemStack itemStack = e.getCurrentItem(); - if (itemStack != null && itemStack.getType() != Material.AIR) { - selectItem((Player) e.getWhoClicked(), itemStack.getType()); - } - } - - @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(); - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> addArmorStand(player), 1L); - } - } - - @EventHandler - public void onClick(PlayerInteractEvent e) { - if (isRunning()) { - if (e.getAction() != Action.RIGHT_CLICK_AIR) { - return; - } - Player p = e.getPlayer(); - ItemStack stack = p.getInventory().getItemInMainHand(); - ItemMeta meta = stack.getItemMeta(); - Material playerItem = itemByPlayerList.get(p.getUniqueId()); - if (meta != null && meta.getPersistentDataContainer().has(skipKey)) { - ItemStack skipStack = skipItem.clone(); - skipStack.setAmount(1); - p.getInventory().removeItem(skipStack); - List stackList = new ArrayList<>(); - stackList.add(new ItemStack(playerItem)); - Collection droplist = p.getInventory().addItem(stackList.toArray(new ItemStack[0])).values(); - for (ItemStack itemStack : droplist) { - p.getLocation().getWorld().dropItem(p.getLocation(), itemStack); - } - selectItem(p, playerItem); - } - } - - } - - @EventHandler - public void onDismountEntity(EntityDismountEvent e) { - if (isRunning()) { - Entity dismountedEntity = e.getEntity(); - if (entityListContainsEntity(dismountedEntity)) { - e.setCancelled(true); - } - } - } - - public void startUpdateTask() { - taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::tick, 1L, 1L); - } - - public void stopUpdateTask() { - plugin.getServer().getScheduler().cancelTask(taskId); - } - - private void tick() { - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - if (player.getGameMode() == GameMode.SPECTATOR) { - return; - } - - if (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 (!entityListContainsUUID(player.getUniqueId())) { - 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); - entityListRemove(player.getUniqueId()); - entityListAdd(player.getUniqueId(), stand); - player.addPassenger(stand); - } - } - - public void updateArmorStand(Player player, Material material) { - if (entityListContainsUUID(player.getUniqueId())) { - ArmorStand stand = (ArmorStand) entityListGetEntity(player.getUniqueId()); - stand.getEquipment().setHelmet(new ItemStack(material)); - - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - stand.setInvisible(false); - stand.setInvisible(true); - }, 5L); - - updateBossBar(); - } - } - - public void updateItem(Player player) { - ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); - if (itemList.isEmpty()) { - plugin.getTimer().stopTimer(); - setRunning(false); - GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + player.getName() + ChatUtil.GREEN + " hat alle Items gefunden!", ChatUtil.BLUE); - String[] lines = {"", "", "", " " + ChatUtil.BLUE + player.getName(), ChatUtil.GREEN + " hat alle Items gefunden!", "", "", ""}; - ChatSkull.sendAll(player, lines); - ChatUtil.sendNormalMessage(player, "Du hast alle Items gesammelt und damit gewonnen!"); - for (Player pp : Bukkit.getOnlinePlayers()) { - pp.setGameMode(GameMode.SPECTATOR); - } - return; - } - - Material item = itemList.get(random.nextInt((itemList.size() - 1) + 1)); - itemByPlayerList.put(player.getUniqueId(), item); - updateArmorStand(player, item); - } - - public void selectItem(Player player, Material pickupItem) { - Material playerItem = itemByPlayerList.get(player.getUniqueId()); - if (pickupItem.equals(playerItem)) { - ArrayList itemList = playerMaterials.getOrDefault(player.getUniqueId(), materials); - itemList.remove(pickupItem); - playerMaterials.put(player.getUniqueId(), itemList); - plugin.getScoreManager().updateScore(new ChallengePlayer(player), 1); - ChatUtil.sendNormalMessage(player, "Item: " + ChatUtil.BLUE + new ItemStack(pickupItem).getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 1.0F); - updateItem(player); - } - } - - public void updateBossBar() { - ScoreManager scoreManager = plugin.getScoreManager(); - for (Player player : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { - Material playerItem = itemByPlayerList.get(player.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(player))); - BossBar bossBar = bossBarMap.computeIfAbsent(player.getUniqueId(), bossbarPlayer -> { - BossBar newBossBar = Bukkit.createBossBar(bossBarTitle, BarColor.GREEN, BarStyle.SOLID); - newBossBar.setVisible(true); - newBossBar.addPlayer(player); - return newBossBar; - }); - bossBar.setTitle(bossBarTitle); - } - } - - public void entityListAdd(UUID uuid, Entity entity) { - entityList.put(uuid, entity); - } - - public void entityListRemove(UUID uuid) { - entityList.remove(uuid); - } - - public boolean entityListContainsUUID(UUID uuid) { - return entityList.containsKey(uuid); - } - - public boolean entityListContainsEntity(Entity entity) { - return entityList.containsValue(entity); - } - - public Entity entityListGetEntity(UUID uuid) { - return entityList.get(uuid); - } - - public void removeArmorStand(Player player) { - if (entityListContainsUUID(player.getUniqueId())) { - entityListGetEntity(player.getUniqueId()).remove(); - entityListRemove(player.getUniqueId()); - } - } - - public void addArmorStand(Player player) { - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (!player.isDead()) { - mountArmorStand(player); - if (itemByPlayerList.get(player.getUniqueId()) != null) { - updateArmorStand(player, itemByPlayerList.get(player.getUniqueId())); - } else { - updateItem(player); - } - } - }, 1L); - - } - - public ItemStack createSkipItem() { - ItemStack stack = new ItemStack(Material.STRUCTURE_VOID, 3); - ItemMeta meta = stack.getItemMeta(); - List lorelist = new ArrayList<>(); - meta.setDisplayName(ChatUtil.GREEN + "Skip Item"); - meta.getPersistentDataContainer().set(skipKey, PersistentDataType.STRING, "SkipItem"); - lorelist.add(ChatUtil.GREEN + "Rechtsklick um das Aktuelle Item zu Skippen."); - lorelist.add(ChatUtil.GREEN + "Geskippte Items bekommst du 1x ins Inventar."); - meta.setLore(lorelist); - stack.setItemMeta(meta); - - return stack; - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/OreBattle.java b/src/main/java/de/fanta/challenges/challenges/OreBattle.java deleted file mode 100644 index ba179eb..0000000 --- a/src/main/java/de/fanta/challenges/challenges/OreBattle.java +++ /dev/null @@ -1,175 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.scoreboard.Scorable; -import de.fanta.challenges.teams.ChallengeTeam; -import de.fanta.challenges.teams.TeamUtils; -import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; -import de.fanta.challenges.utils.ChatUtil; -import de.fanta.challenges.utils.guiutils.GUIUtils; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -public class OreBattle implements Listener { - private static final HashMap blocklist = new HashMap<>(); - private static boolean running; - private final Challenges plugin = Challenges.getPlugin(); - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "orebattle")) { - if (event.isRunning()) { - blocklist.put(Material.EMERALD_ORE, 100); - blocklist.put(Material.DEEPSLATE_EMERALD_ORE, 100); - blocklist.put(Material.DIAMOND_ORE, 72); - blocklist.put(Material.DEEPSLATE_DIAMOND_ORE, 45); - blocklist.put(Material.GOLD_ORE, 2); - blocklist.put(Material.DEEPSLATE_GOLD_ORE, 11); - blocklist.put(Material.IRON_ORE, 4); - blocklist.put(Material.DEEPSLATE_IRON_ORE, 15); - blocklist.put(Material.COPPER_ORE, 1); - blocklist.put(Material.DEEPSLATE_COPPER_ORE, 36); - blocklist.put(Material.REDSTONE_ORE, 43); - blocklist.put(Material.DEEPSLATE_REDSTONE_ORE, 7); - blocklist.put(Material.COAL_ORE, 1); - blocklist.put(Material.DEEPSLATE_COAL_ORE, 93); - blocklist.put(Material.LAPIS_ORE, 33); - blocklist.put(Material.DEEPSLATE_LAPIS_ORE, 22); - - for (Player pp : Bukkit.getOnlinePlayers()) { - ItemStack pickaxe = new ItemStack(Material.NETHERITE_PICKAXE, 1); - ItemMeta pickaxeMeta = pickaxe.getItemMeta(); - - pickaxeMeta.addEnchant(Enchantment.DIG_SPEED, 2, true); - pickaxeMeta.setUnbreakable(true); - - pickaxe.setItemMeta(pickaxeMeta); - if (!plugin.getConfig().getBoolean("event.teams")) { - for (Player player : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(player)); - } - - if (TeamUtils.getPlayerTeam(pp) != null) { - pp.getInventory().addItem(new ItemStack(Material.NETHERITE_SWORD)); - pp.getInventory().addItem(pickaxe); - pp.getInventory().addItem(new ItemStack(Material.COOKED_BEEF, 32)); - } - } else { - for (ChallengeTeam team : TeamUtils.getTeams()) { - if (team != null && !TeamUtils.getPlayersInTeam(team).isEmpty()) { - plugin.getScoreManager().join(team); - } - } - - if (pp.getGameMode() == GameMode.SURVIVAL) { - pp.getInventory().addItem(new ItemStack(Material.NETHERITE_SWORD)); - pp.getInventory().addItem(pickaxe); - pp.getInventory().addItem(new ItemStack(Material.COOKED_BEEF, 32)); - } - } - } - - - setRunning(true); - } else { - setRunning(false); - if (!plugin.getConfig().getBoolean("event.teams")) { - 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) + " Punkte und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; - ChatSkull.sendAll((Player) p, lines); - } else { - ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + scorable.getName() + ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und hat damit gewonnen!", ChatUtil.BLUE); - } - GUIUtils.sendTitleToAll("Event", ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN); - } - - - } else { - for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { - ChallengeTeam team = TeamUtils.getTeam(scorable.getName()); - if (team != null) { - GUIUtils.sendTitleToAll("Event", "Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + " gewinnt mit " + ChatUtil.BLUE + plugin.getScoreManager().getScore(scorable) + ChatUtil.GREEN + " Punkten", ChatUtil.GREEN); - String[] lines = {"", "", "", " " + ChatUtil.BLUE + "Team " + team.getChatColor() + team.getName(), ChatUtil.GREEN + " hat " + plugin.getScoreManager().getScore(scorable) + " Punkte und", ChatUtil.GREEN + " hat damit gewonnen!", "", ""}; - for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(team)) - if (pp.isOnline()) { - ChatSkull.sendAll((Player) pp, lines); - } - } - } - - - } - } - } - } - - @EventHandler - public void onBreakBlock(BlockBreakEvent e) { - if (isRunning()) { - if (blocklist.containsKey(e.getBlock().getType())) { - if (!plugin.getConfig().getBoolean("event.teams")) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer()), blocklist.get(e.getBlock().getType())); - } else { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), blocklist.get(e.getBlock().getType())); - } - ChatUtil.sendTitleToPlayer(e.getPlayer(), "", ChatUtil.BLUE + new ItemStack(e.getBlock().getType()).getI18NDisplayName() + ChatUtil.GREEN + " +" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN, 3, 20, 3, false); - } - } - } - - @EventHandler - public void onPlaceBlock(BlockPlaceEvent e) { - if (isRunning()) { - if (blocklist.containsKey(e.getBlock().getType())) { - if (!plugin.getConfig().getBoolean("event.teams")) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer()), -blocklist.get(e.getBlock().getType())); - } else { - plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), -blocklist.get(e.getBlock().getType())); - } - ChatUtil.sendTitleToPlayer(e.getPlayer(), "", ChatUtil.BLUE + new ItemStack(e.getBlock().getType()).getI18NDisplayName() + ChatUtil.RED + " -" + blocklist.get(e.getBlock().getType()), ChatUtil.GREEN, 3, 20, 3, false); - } - } - } - - @EventHandler - public void onJoin(PlayerJoinEvent e) { - if (isRunning()) { - if (plugin.getConfig().getBoolean("event.teams")) { - ChallengeTeam team = TeamUtils.getPlayerTeam(e.getPlayer()); - if (team != null) { - plugin.getScoreManager().join(team); - } - } else { - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); - } - } - } -} diff --git a/src/main/java/de/fanta/challenges/challenges/SammelFieberChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/SammelFieberChallengeEvent.java deleted file mode 100644 index e07b373..0000000 --- a/src/main/java/de/fanta/challenges/challenges/SammelFieberChallengeEvent.java +++ /dev/null @@ -1,210 +0,0 @@ -package de.fanta.challenges.challenges; - -import de.fanta.challenges.Challenges; -import de.fanta.challenges.events.TimerChangedEvent; -import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; -import de.fanta.challenges.scoreboard.ChallengePlayer; -import de.fanta.challenges.utils.ChatUtil; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; -import org.bukkit.event.inventory.InventoryPickupItemEvent; -import org.bukkit.event.player.PlayerAttemptPickupItemEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.Objects; - -public class SammelFieberChallengeEvent implements Listener { - - public static BossBar bossBar; - public static Location hopperloc; - private static Material material; - private static boolean running; - private static int count; - private final Challenges plugin = Challenges.getPlugin(); - - public static Location getHopperLocation() { - return hopperloc; - } - - public static void setHopperLocation(Location loc) { - SammelFieberChallengeEvent.hopperloc = loc; - } - - public static Material getMaterial() { - return material; - } - - public void setMaterial(Material mat) { - material = mat; - } - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - - public static int getCount() { - return count; - } - - @EventHandler - public void onActivation(TimerChangedEvent event) { - if (Objects.equals(plugin.getConfig().getString("event.type"), "sammelfieber")) { - if (event.isRunning()) { - Material material = SammelFieberSettingsGui.getEventItem(); - if (material != Material.AIR && getHopperLocation() != null) { - setMaterial(material); - bossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Es wurden " + ChatUtil.BLUE + count + " " + new ItemStack(getMaterial()).getI18NDisplayName() + ChatUtil.GREEN + " abgegeben. Das sind " + ChatUtil.BLUE + count * SammelFieberSettingsGui.MONEY + " Cubes", BarColor.GREEN, BarStyle.SOLID); - bossBar.setVisible(true); - for (Player pl : Bukkit.getOnlinePlayers()) { - plugin.getScoreManager().join(new ChallengePlayer(pl)); - bossBar.addPlayer(pl); - } - } else { - ChatUtil.sendErrorMessage(plugin.getCurrentEditor(), "Du musst erst ein Item und Hopper festlegen."); - plugin.getTimer().stopTimer(); - return; - } - setRunning(true); - } else { - setRunning(false); - } - } - } - - @EventHandler - public void onHoppergetItem(InventoryPickupItemEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getInventory().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (!getHopperLocation().equals(blockloc)) { - return; - } - - ItemStack stack = e.getItem().getItemStack(); - - if (stack.getType() != getMaterial()) { - e.setCancelled(true); - return; - } - - ItemMeta meta = stack.getItemMeta(); - - if (meta != null && meta.hasDisplayName()) { - Player player = Bukkit.getPlayer(meta.getDisplayName()); - count = count + stack.getAmount(); - plugin.getScoreManager().updateScore(new ChallengePlayer(player), stack.getAmount()); - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - bossBar.setTitle(ChatUtil.GREEN + "Es wurden " + ChatUtil.BLUE + count + " " + new ItemStack(getMaterial()).getI18NDisplayName() + ChatUtil.GREEN + " abgegeben. Das sind " + ChatUtil.BLUE + count * SammelFieberSettingsGui.MONEY + " Cubes"); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> e.getInventory().clear(), 1); - } - - @EventHandler - public void onHopperMoveItem(InventoryMoveItemEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getSource().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockloc)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onInteract(PlayerInteractEvent e) { - if (!isRunning()) { - return; - } - if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { - Location loc = e.getClickedBlock().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockloc)) { - e.setCancelled(true); - } - } - - } - - @EventHandler - public void onBlockBreak(BlockBreakEvent e) { - if (!isRunning()) { - return; - } - - Location loc = e.getBlock().getLocation(); - Location blockloc = new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - if (getHopperLocation().equals(blockloc)) { - e.setCancelled(true); - } - } - - @EventHandler - public void onPlayerDropItem(PlayerDropItemEvent e) { - if (!isRunning()) { - return; - } - - ItemStack stack = e.getItemDrop().getItemStack(); - - if (stack.getType() != getMaterial()) { - return; - } - - ItemMeta meta = stack.getItemMeta(); - meta.setDisplayName(e.getPlayer().getName()); - stack.setItemMeta(meta); - } - - @EventHandler - public void onPlayerPickUpItem(PlayerAttemptPickupItemEvent e) { - if (!isRunning()) { - return; - } - - ItemStack stack = e.getItem().getItemStack(); - - if (stack.getType() != getMaterial()) { - return; - } - - ItemMeta meta = stack.getItemMeta(); - if (meta != null && meta.hasDisplayName()) { - meta.setDisplayName(""); - stack.setItemMeta(meta); - } - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent e) { - if (!isRunning()) { - return; - } - plugin.getScoreManager().join(new ChallengePlayer(e.getPlayer())); - bossBar.addPlayer(e.getPlayer()); - } - -} diff --git a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java b/src/main/java/de/fanta/challenges/commands/BackpackCommand.java index 837203c..bad4445 100644 --- a/src/main/java/de/fanta/challenges/commands/BackpackCommand.java +++ b/src/main/java/de/fanta/challenges/commands/BackpackCommand.java @@ -1,7 +1,6 @@ package de.fanta.challenges.commands; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.BingoChallengeEvent; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; 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 ecd7835..6e23472 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -1,7 +1,7 @@ package de.fanta.challenges.guis.eventgui; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.DeathrunChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/EventItemsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/EventItemsGui.java index 67c1e43..0fb6461 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventItemsGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventItemsGui.java @@ -1,6 +1,6 @@ package de.fanta.challenges.guis.eventgui; -import de.fanta.challenges.challenges.BingoChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; import de.fanta.challenges.Challenges; import org.bukkit.Bukkit; import org.bukkit.Material; diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java b/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java index 90a6633..4065e17 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/SammelFieberSettingsGui.java @@ -1,7 +1,7 @@ package de.fanta.challenges.guis.eventgui; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.SammelFieberChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import de.iani.cubesideutils.bukkit.items.CustomHeads; @@ -19,8 +19,6 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; -import java.util.Objects; - public class SammelFieberSettingsGui implements Listener { public static final int INVENTORY_SIZE = 9; diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 63b62b2..9c37019 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -1,7 +1,29 @@ package de.fanta.challenges.listeners; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.*; +import de.fanta.challenges.challenges.BedrockWallChallenge; +import de.fanta.challenges.challenges.ChallengeEvents.BingoChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.ForceItemChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.OreBattle; +import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; +import de.fanta.challenges.challenges.ChallengeGoals; +import de.fanta.challenges.challenges.ClearInventoryByDamageChallenge; +import de.fanta.challenges.challenges.CraftingTableChallenge; +import de.fanta.challenges.challenges.FloorIsLavaChallenge; +import de.fanta.challenges.challenges.IceRunnerChallenge; +import de.fanta.challenges.challenges.NoFallDamageChallenge; +import de.fanta.challenges.challenges.NoJumpChallenge; +import de.fanta.challenges.challenges.NoSneakChallenge; +import de.fanta.challenges.challenges.NoSprintChallenge; +import de.fanta.challenges.challenges.NoTradingChallenge; +import de.fanta.challenges.challenges.RandomDropsChallenge; +import de.fanta.challenges.challenges.RandomEffectChallenge; +import de.fanta.challenges.challenges.RandomMobChallenge; +import de.fanta.challenges.challenges.ShareDamageChallenge; +import de.fanta.challenges.challenges.TiedTogetherChallenge; +import de.fanta.challenges.challenges.WorldBorderLevelChallenge; +import de.fanta.challenges.challenges.XPChallenge; import de.fanta.challenges.gravestones.GravestoneListener; import de.fanta.challenges.guis.CheckItemsGUI; import de.fanta.challenges.guis.coordsgui.CoordsDeleteGUI; diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 64b4554..d06f153 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -2,7 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; -import de.fanta.challenges.challenges.DeathrunChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.DeathrunChallengeEvent; import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.events.ServerStatusChangedEvent; import de.fanta.challenges.scoreboard.ChallengePlayer; diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java index 505c336..9d59651 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -1,7 +1,7 @@ package de.fanta.challenges.scoreboard; import de.fanta.challenges.Challenges; -import de.fanta.challenges.challenges.SammelFieberChallengeEvent; +import de.fanta.challenges.challenges.ChallengeEvents.SammelFieberChallengeEvent; import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; import de.fanta.challenges.teams.ChallengeTeam; import de.fanta.challenges.teams.TeamUtils; @@ -17,8 +17,6 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects;