diff --git a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java index 3f98c1c..ed54d3b 100644 --- a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java @@ -13,6 +13,9 @@ 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; @@ -21,6 +24,7 @@ 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; @@ -39,6 +43,7 @@ private static boolean eventend = false; private static List materials = new ArrayList<>(); + private static 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() { @@ -124,6 +129,10 @@ 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); + } setRunning(true); } else { setRunning(false); @@ -131,6 +140,14 @@ } } + @EventHandler + public void onJoin(PlayerJoinEvent e) { + if (isRunning()) { + bossBar.setVisible(true); + bossBar.addPlayer(e.getPlayer()); + } + } + public void addDiscoveredItem(Player player, ItemStack itemStack) { UUID uuid = player.getUniqueId(); Material material = itemStack.getType(); @@ -160,32 +177,39 @@ } } 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()); } - playerMaterials.put(onlinePlayer.getUniqueId(), items); - plugin.getScoreManager().updateTeamScore(onlinePlayer, 1); - ChatUtil.sendNormalMessage(onlinePlayer, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); - onlinePlayer.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + if (!items.contains(material)) { + items.add(material); + playerMaterials.put(onlinePlayer.getUniqueId(), items); + if (!scoreset) { + plugin.getScoreManager().updateTeamScore(onlinePlayer, 1); + scoreset = true; + } + ChatUtil.sendNormalMessage(onlinePlayer, "Item: " + ChatUtil.BLUE + itemStack.getI18NDisplayName() + ChatUtil.GREEN + " wurde Registriert"); + onlinePlayer.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); - if (plugin.getScoreManager().getTeamScore(onlinePlayer) == materials.size()) { - if (eventend) { - return; - } - eventend = true; - plugin.getTimer().stopTimer(); - GUIUtils.sendTitleToAll("Event", 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); + if (plugin.getScoreManager().getTeamScore(onlinePlayer) == materials.size()) { + if (eventend) { + return; } - } - for (Player allplayers : Bukkit.getOnlinePlayers()) { - allplayers.setGameMode(GameMode.SPECTATOR); + 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/commands/event/EventStartCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java index b55881f..768379a 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java @@ -55,16 +55,9 @@ if (!plugin.getConfig().getBoolean("event.teams")) { Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(p, 0)); } else { + TeamUtils.setAllPlayerWithoutTeamToTeam(); Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateTeamScore(p, 0)); } - - if (Objects.equals(plugin.getConfig().getString("event.type"), "bingo")) { - for (Player p : Bukkit.getOnlinePlayers()) { - BossBar bossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Nutze " + ChatUtil.BLUE + "/bingo" + ChatUtil.GREEN + " um die Items zu sehen", BarColor.GREEN, BarStyle.SOLID); - bossBar.setVisible(true); - bossBar.addPlayer(p); - } - } } }, 10, 20); diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 5adca87..c2ba5f3 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -14,6 +14,7 @@ import de.fanta.challenges.guis.settingsgui.OtherSettingsGui; import de.fanta.challenges.guis.settingsgui.ServerSettingsGui; import de.fanta.challenges.guis.settingsgui.SettingsGui; +import de.fanta.challenges.teams.TeamListener; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; @@ -46,6 +47,8 @@ pM.registerEvents(new GravestoneListener(), plugin); + pM.registerEvents(new TeamListener(), plugin); + pM.registerEvents(new ChallengeGoals(), plugin); pM.registerEvents(new RandomEffectChallenge(), plugin); diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index 70391a2..d720764 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -3,8 +3,6 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; import de.fanta.challenges.events.PlayerCountChangedEvent; -import de.fanta.challenges.guis.eventgui.TeamSelectGUI; -import de.fanta.challenges.teams.TeamUtils; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.commands.ArgsParser; import de.tr7zw.changeme.nbtapi.NBTCompoundList; @@ -22,17 +20,14 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerAttemptPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerLevelChangeEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; import org.kitteh.vanish.event.VanishStatusChangeEvent; import org.spigotmc.event.player.PlayerSpawnLocationEvent; @@ -266,13 +261,11 @@ NBTCompoundList customEnchantments = nbti.getCompoundList("CustomEnchantments"); NBTListCompound customEnchantment = customEnchantments.addCompound(); - System.out.println(customEnchantment.getKeys()); if (!customEnchantment.getKeys().contains(enchant)) { customEnchantment.setString("id", enchant); customEnchantment.setInteger("lvl", level); itemStack = nbti.getItem(); e.getInventory().setItem(i, itemStack); - System.out.println("Add Enchant " + enchant + " " + level + " to item from " + e.getPlayer().getName()); } } } @@ -280,37 +273,6 @@ } } } - - - @EventHandler - public void onSwapItem(PlayerSwapHandItemsEvent e) { - Player p = e.getPlayer(); - if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selctItem().getType()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onDrop(PlayerDropItemEvent e) { - if (e.getItemDrop().getItemStack().getType() == TeamUtils.selctItem().getType()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemMove(InventoryMoveItemEvent e) { - if (e.getItem().getType() == TeamUtils.selctItem().getType()) { - e.setCancelled(true); - } - } - - @EventHandler - public void onItemClick(PlayerInteractEvent e) { - Player p = e.getPlayer(); - if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selctItem().getType()) { - TeamSelectGUI.openTeamSelectGui(p); - } - } /*@EventHandler public void move(PlayerMoveEvent e) { Player p = e.getPlayer(); diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java index a02146b..23c9d96 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -170,7 +170,7 @@ return; } if (this.event != null) { - Score score = event.getScore(team.getName()); + Score score = event.getScore(team.getChatColor() + team.getName()); score.setScore(score.getScore() + difference); } } @@ -190,7 +190,7 @@ return; } if (this.event != null) { - Score score = event.getScore(team.getName()); + Score score = event.getScore(team.getChatColor() + team.getName()); score.setScore(newScore); } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java deleted file mode 100644 index c0b34fd..0000000 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java +++ /dev/null @@ -1,6 +0,0 @@ -package de.fanta.challenges.scoreboard; - -import org.bukkit.event.Listener; - -public class ScoreListener implements Listener { -} diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java index 9af073c..9928a72 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -9,6 +9,7 @@ import de.iani.cubesideutils.HastebinUtil; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import org.bukkit.scoreboard.Team; import javax.annotation.Nullable; import java.text.SimpleDateFormat; @@ -101,10 +102,24 @@ if (this.scores.isEmpty()) { sb.append(" Das Event hatte keine Teilnehmer!\n"); } else { - Set> sorted = this.scores.entrySet().stream().sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue()) * -1).collect(Collectors.toCollection(LinkedHashSet::new)); - int i = 1; - for (Map.Entry entry : sorted) { - sb.append(i++).append(". ").append(entry.getKey()).append(" ").append(entry.getValue()).append("\n"); + if (plugin.getConfig().getBoolean("event.teams")) { + Set> sorted = this.scores.entrySet().stream().sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue()) * -1).collect(Collectors.toCollection(LinkedHashSet::new)); + int i = 1; + for (Map.Entry entry : sorted) { + ChallengeTeam challengeTeam = TeamUtils.getTeam(entry.getKey()); + if (challengeTeam != null) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null) { + sb.append(i++).append(". ").append(entry.getKey()).append(" (").append(team.getEntries().toString().replace("[", "").replace("]", "")).append(")").append(" ").append(entry.getValue()).append("\n"); + } + } + } + } else { + Set> sorted = this.scores.entrySet().stream().sorted((o1, o2) -> o1.getValue().compareTo(o2.getValue()) * -1).collect(Collectors.toCollection(LinkedHashSet::new)); + int i = 1; + for (Map.Entry entry : sorted) { + sb.append(i++).append(". ").append(entry.getKey()).append(" ").append(entry.getValue()).append("\n"); + } } } HastebinUtil.paste(sb.toString(), new HastebinUtil.PasteCompletedListener() { diff --git a/src/main/java/de/fanta/challenges/teams/TeamListener.java b/src/main/java/de/fanta/challenges/teams/TeamListener.java new file mode 100644 index 0000000..aa72a6d --- /dev/null +++ b/src/main/java/de/fanta/challenges/teams/TeamListener.java @@ -0,0 +1,113 @@ +package de.fanta.challenges.teams; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.guis.eventgui.TeamSelectGUI; +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.BlockPlaceEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerSwapHandItemsEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class TeamListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onSwapItem(PlayerSwapHandItemsEvent e) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDrop(PlayerDropItemEvent e) { + ItemStack stack = e.getItemDrop().getItemStack(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemMove(InventoryMoveItemEvent e) { + ItemStack stack = e.getItem(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onItemClick(PlayerInteractEvent e) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + TeamSelectGUI.openTeamSelectGui(p); + } + } + + @EventHandler + public void onPlace(BlockPlaceEvent e) { + Player p = e.getPlayer(); + ItemStack stack = p.getInventory().getItemInMainHand(); + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + + @EventHandler + public void onDrag(InventoryDragEvent e) { + ItemStack stack = e.getCursor(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onClick(InventoryClickEvent e) { + ItemStack stack = e.getCurrentItem(); + if (stack != null) { + ItemMeta meta = stack.getItemMeta(); + if (meta != null && meta.getPersistentDataContainer().has(TeamUtils.getSelectKey())) { + e.setCancelled(true); + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onJoin(PlayerJoinEvent e) { + Inventory inventory = e.getPlayer().getInventory(); + if (plugin.getConfig().getBoolean("event.teams") && !plugin.getTimer().isRunning()) { + inventory.setItem(8, TeamUtils.selctItem()); + } else { + inventory.removeItem(TeamUtils.selctItem()); + } + + if (plugin.getConfig().getBoolean("event.teams") && plugin.getTimer().isRunning()) { + if (!plugin.getVanish().isVanish(e.getPlayer())) { + if (TeamUtils.getPlayerTeam(e.getPlayer()) == null) { + TeamUtils.setAllPlayerWithoutTeamToTeam(); + plugin.getScoreManager().updateTeamScore(e.getPlayer(), 0); + } + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java index 91ef7bd..08604ab 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamUtils.java +++ b/src/main/java/de/fanta/challenges/teams/TeamUtils.java @@ -3,15 +3,18 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.guis.eventgui.TeamSelectGUI; import de.fanta.challenges.utils.ChatUtil; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.persistence.PersistentDataType; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Score; @@ -40,6 +43,8 @@ private static HashMap playerTeams = new HashMap<>(); + private static NamespacedKey selectKey = new NamespacedKey(Challenges.getPlugin(), "selectitem"); + private static ChallengeTeam createDefaultTeam(int nr) { if (nr == 0) { return new ChallengeTeam("Schwarz", ChatColor.BLACK, createDisplayItem(Color.fromRGB(0, 0, 0), ChatColor.BLACK, "Schwarz")); @@ -128,8 +133,10 @@ ItemStack stack = new ItemStack(Material.LIME_BED); ItemMeta meta = stack.getItemMeta(); meta.setDisplayName(ChatUtil.GREEN + "Team Auswahl"); + meta.getPersistentDataContainer().set(selectKey, PersistentDataType.STRING, "SelectTool"); stack.setItemMeta(meta); + return stack; } @@ -220,6 +227,36 @@ } } + public static void setAllPlayerWithoutTeamToTeam() { + ArrayList playersWithoutTeam = new ArrayList<>(); + for (Player pp : Bukkit.getOnlinePlayers()) { + if (getPlayerTeam(pp) == null) { + playersWithoutTeam.add(pp); + } + } + + int emptyteamsize = 0; + for (ChallengeTeam challengeTeam : getTeams()) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null && team.getEntries().isEmpty()) { + emptyteamsize++; + } + } + + if (playersWithoutTeam.size() > emptyteamsize) { + setTeamCount(getTeams().length + playersWithoutTeam.size() - emptyteamsize); + } + + if (!playersWithoutTeam.isEmpty()) { + for (ChallengeTeam challengeTeam : getTeams()) { + Team team = TeamUtils.getScoreboard().getTeam(challengeTeam.getName()); + if (team != null && team.getEntries().isEmpty()) { + selectTeam(playersWithoutTeam.get(0), challengeTeam); + } + } + } + } + public static Scoreboard getScoreboard() { return scoreboard; } @@ -227,4 +264,8 @@ public static Objective getTeamscoreboardObjective() { return teamscoreboardObjective; } + + public static NamespacedKey getSelectKey() { + return selectKey; + } }