diff --git a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java index bcba487..3f98c1c 100644 --- a/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/BingoChallengeEvent.java @@ -3,12 +3,15 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.events.TimerChangedEvent; import de.fanta.challenges.guis.eventgui.EventItemsGui; +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.entity.Player; import org.bukkit.event.EventHandler; @@ -30,12 +33,33 @@ public class BingoChallengeEvent implements Listener { - private final Challenges plugin = Challenges.getPlugin(); - + private static final Map> playerMaterials = new HashMap<>(); private static boolean running; + private static boolean eventend = false; + private static List materials = new ArrayList<>(); - private static final Map> playerMaterials = new HashMap<>(); + 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 boolean isRunning() { + return running; + } + + public void setRunning(boolean run) { + running = run; + } @EventHandler public void onInventoryClick(InventoryClickEvent e) { @@ -96,7 +120,7 @@ } @EventHandler - public void onActivation(TimerChangedEvent event){ + public void onActivation(TimerChangedEvent event) { if (Objects.equals(plugin.getConfig().getString("event.type"), "bingo")) { if (event.isRunning()) { setMaterials(EventItemsGui.getEventItems()); @@ -107,52 +131,68 @@ } } - public void setMaterials(List mat) { - materials = mat; - } - - public static List getMaterials() { - return materials; - } - - public static Map> getPlayerMaterials() { - return playerMaterials; - } - - public static boolean isRunning() { - return running; - } - - public void setRunning(boolean run) { - running = run; - } - public void addDiscoveredItem(Player player, ItemStack itemStack) { UUID uuid = player.getUniqueId(); Material material = itemStack.getType(); if (materials.contains(material)) { - 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(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.getConfig().getBoolean("event.teams")) { + List items = new ArrayList<>(); + if (playerMaterials.get(uuid) != null) { + items = playerMaterials.get(uuid); + } + if (!items.contains(material)) { + items.add(material); - if(plugin.getScoreManager().getScore(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); + playerMaterials.put(uuid, items); + plugin.getScoreManager().updateScore(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(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); + 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 (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); + } + } + 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 ecb0214..b55881f 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java @@ -48,11 +48,15 @@ world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); } for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().removeItem(TeamUtils.selectiomItem()); + pp.getInventory().removeItem(TeamUtils.selctItem()); } plugin.getTimer().startTimer(); - Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(p, 0)); + if (!plugin.getConfig().getBoolean("event.teams")) { + Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateScore(p, 0)); + } else { + Bukkit.getOnlinePlayers().forEach(p -> plugin.getScoreManager().updateTeamScore(p, 0)); + } if (Objects.equals(plugin.getConfig().getString("event.type"), "bingo")) { for (Player p : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java b/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java index 459749c..db8e8d8 100644 --- a/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java +++ b/src/main/java/de/fanta/challenges/gravestones/GravestoneListener.java @@ -2,10 +2,10 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.utils.ChatUtil; -import org.bukkit.Bukkit; +import org.bukkit.GameRule; import org.bukkit.NamespacedKey; +import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.block.Sign; import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.ArmorStand; @@ -34,13 +34,24 @@ return; } + + Player p = e.getEntity(); + World world = p.getLocation().getWorld(); + if (world != null) { + if (world.getGameRuleValue(GameRule.KEEP_INVENTORY) == true) { + return; + } + } + if (p.getLocation().getBlockY() > p.getLocation().getWorld().getMinHeight() - 3) { - e.getDrops().clear(); - Block block = p.getLocation().subtract(0, 1, 0).getBlock(); - String inventoryString = GravestoneUtils.createInventoryString(p); - byte[] inventoryByte = GravestoneUtils.compressString(inventoryString); - GravestoneUtils.spawnAtBlock(block, p, inventoryByte); + if (!e.getDrops().isEmpty()) { + e.getDrops().clear(); + Block block = p.getLocation().subtract(0, 1, 0).getBlock(); + String inventoryString = GravestoneUtils.createInventoryString(p); + byte[] inventoryByte = GravestoneUtils.compressString(inventoryString); + GravestoneUtils.spawnAtBlock(block, p, inventoryByte); + } } } diff --git a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java index a6b83a6..9834d31 100644 --- a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java +++ b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java @@ -18,8 +18,6 @@ import java.util.Map; public class TeleportGUI implements Listener { - - public static final int INVENTORY_SIZE = 27; private static final Challenges plugin = Challenges.getPlugin(); private static final Map playerPerSlot = new HashMap<>(); private static final Map InventoryperPlayer = new HashMap<>(); @@ -61,7 +59,7 @@ } TELEPORT_UI.setItem(CLOSE_IDEX, GUIUtils.createGuiItem(Material.BARRIER, ChatUtil.RED + "Menü verlassen!")); - for (int i = 0; i < INVENTORY_SIZE; i++) { + for (int i = 0; i < TELEPORT_UI.getSize(); i++) { if (TELEPORT_UI.getItem(i) == null || TELEPORT_UI.getItem(i).getType() == Material.AIR) { TELEPORT_UI.setItem(i, GUIUtils.EMPTY_ICON); } 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 9560b17..34ea819 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -6,15 +6,12 @@ import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import java.util.Objects; @@ -113,14 +110,15 @@ GUIUtils.sendTitleToAll("Event", "Teams aktiviert", ChatUtil.GREEN); for (Player pp : Bukkit.getOnlinePlayers()) { plugin.getSBManager().removeScoreboard(pp); - pp.getInventory().setItem(8, TeamUtils.selectiomItem()); + pp.getInventory().setItem(8, TeamUtils.selctItem()); } plugin.getScoreManager().resetScores(); + plugin.getSBManager().updateEventScoreboard(); } else { GUIUtils.setConfig("event.teams", false); GUIUtils.sendTitleToAll("Event", "Teams deaktiviert", ChatUtil.RED); for (Player pp : Bukkit.getOnlinePlayers()) { - pp.getInventory().removeItem(TeamUtils.selectiomItem()); + pp.getInventory().removeItem(TeamUtils.selctItem()); } } } else { diff --git a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java index 0b3fdcd..86f9134 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java @@ -69,18 +69,15 @@ ArrayList lore = new ArrayList(); if (challengeTeam == null) { lore.add(""); - System.out.println("Test1"); } else { int slot = slotbyTeam.get(challengeTeam); ItemStack stack = TEAM_SELECT_UI.getItem(slot); ItemMeta meta = stack.getItemMeta(); for (OfflinePlayer pp : TeamUtils.getScoreboard().getTeam(challengeTeam.getName()).getPlayers()) { lore.add(ChatUtil.BLUE + pp.getName()); - System.out.println("Test2"); } meta.setLore(lore); stack.setItemMeta(meta); - System.out.println("Test3"); TEAM_SELECT_UI.setItem(slot, stack); } diff --git a/src/main/java/de/fanta/challenges/listeners/EntityListener.java b/src/main/java/de/fanta/challenges/listeners/EntityListener.java new file mode 100644 index 0000000..8b2088a --- /dev/null +++ b/src/main/java/de/fanta/challenges/listeners/EntityListener.java @@ -0,0 +1,18 @@ +package de.fanta.challenges.listeners; + +import de.fanta.challenges.Challenges; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntitySpawnEvent; + +public class EntityListener implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + @EventHandler + public void onMobSpawn(EntitySpawnEvent e) { + if (!plugin.getTimer().isRunning()) { + e.setCancelled(true); + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 60365e7..5adca87 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -27,6 +27,7 @@ pM.registerEvents(new InteractListener(), plugin); pM.registerEvents(new DamageListener(), plugin); pM.registerEvents(new DeathListener(), plugin); + pM.registerEvents(new EntityListener(), plugin); pM.registerEvents(new PlayerListener(), plugin); pM.registerEvents(new VoidListener(), plugin); pM.registerEvents(new TimerGui(), plugin); diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index dc43214..70391a2 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -34,7 +34,6 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.scoreboard.Team; import org.kitteh.vanish.event.VanishStatusChangeEvent; import org.spigotmc.event.player.PlayerSpawnLocationEvent; @@ -210,7 +209,7 @@ } } else { if (plugin.getServerType() != ServerType.ADVENTURE) { - plugin.getSBManager().setScoreboard(p); + plugin.getSBManager().setScoreboardtoPlayer(p); } if (plugin.getCurrentEditor() == null) { plugin.setCurrentEditor(p); @@ -258,7 +257,7 @@ for (String coloredlore : lorelist) { String lore = ChatColor.stripColor(coloredlore); if (lore.endsWith("I") || lore.endsWith("V") || lore.endsWith("X")) { - NBTItem nbti = new NBTItem(itemStack); + NBTItem nbti = new NBTItem(itemStack); //TODO Class not Found. Why??? ArgsParser argsParser = new ArgsParser(lore.split(" ")); @@ -266,12 +265,15 @@ int level = romanToDecimal(argsParser.getNext()); NBTCompoundList customEnchantments = nbti.getCompoundList("CustomEnchantments"); - customEnchantments.clear(); NBTListCompound customEnchantment = customEnchantments.addCompound(); - customEnchantment.setString("id", enchant); - customEnchantment.setInteger("lvl", level); - itemStack = nbti.getItem(); - e.getInventory().setItem(i, itemStack); + 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()); + } } } } @@ -283,21 +285,21 @@ @EventHandler public void onSwapItem(PlayerSwapHandItemsEvent e) { Player p = e.getPlayer(); - if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selectiomItem().getType()) { + if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selctItem().getType()) { e.setCancelled(true); } } @EventHandler public void onDrop(PlayerDropItemEvent e) { - if (e.getItemDrop().getItemStack().getType() == TeamUtils.selectiomItem().getType()) { + if (e.getItemDrop().getItemStack().getType() == TeamUtils.selctItem().getType()) { e.setCancelled(true); } } @EventHandler public void onItemMove(InventoryMoveItemEvent e) { - if (e.getItem().getType() == TeamUtils.selectiomItem().getType()) { + if (e.getItem().getType() == TeamUtils.selctItem().getType()) { e.setCancelled(true); } } @@ -305,7 +307,7 @@ @EventHandler public void onItemClick(PlayerInteractEvent e) { Player p = e.getPlayer(); - if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selectiomItem().getType()) { + if (p.getInventory().getItemInMainHand().getType() == TeamUtils.selctItem().getType()) { TeamSelectGUI.openTeamSelectGui(p); } } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 56e5265..26f0dee 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -44,7 +44,7 @@ e.setJoinMessage(null); if (plugin.getServerType() != ServerType.ADVENTURE) { if (!DeathrunChallengeEvent.getDeadPlayer().contains(p.getUniqueId().toString())) { - plugin.getSBManager().setScoreboard(p); + plugin.getSBManager().setScoreboardtoPlayer(p); plugin.getSBManager().updateEventScoreboard(); } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java index 433fe4d..a02146b 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -2,8 +2,11 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.ServerType; +import de.fanta.challenges.teams.ChallengeTeam; +import de.fanta.challenges.teams.TeamUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; @@ -34,7 +37,7 @@ updateTabHP(); } - public void setScoreboard(Player p) { + public void setScoreboardtoPlayer(Player p) { if (this.scoreboard == null) { if (plugin.getServerType() != ServerType.ADVENTURE) { initScoreboard(); @@ -46,6 +49,23 @@ p.setScoreboard(scoreboard); } + public void setScoreboardtoTeam(ChallengeTeam challengeTeam) { + if (this.scoreboard == null) { + if (plugin.getServerType() != ServerType.ADVENTURE) { + initScoreboard(); + } + } + + team.addEntry(challengeTeam.getChatColor() + challengeTeam.getName()); + + for (OfflinePlayer pp : TeamUtils.getPlayersInTeam(challengeTeam)) { + Player tempPlayer = Bukkit.getPlayer(pp.getUniqueId()); + if (tempPlayer != null && tempPlayer.isOnline()) { + tempPlayer.setScoreboard(scoreboard); + } + } + } + public void removeScoreboard(Player p) { if (team != null) { if (plugin.getServerType() != ServerType.ADVENTURE) { @@ -55,10 +75,9 @@ } } - public void addScoreboard(Player p) { - if (plugin.getServerType() != ServerType.ADVENTURE) { - team.addEntry(p.getName()); - p.setScoreboard(scoreboard); + public void removeAllFromScoreboard() { + for (String s : team.getEntries()) { + team.removeEntry(s); } } @@ -98,22 +117,34 @@ return; } if (plugin.getConfig().getBoolean("event.enabled")) { - this.team.setColor(ChatColor.BLUE); - this.team.setDisplayName("Event"); + if (!plugin.getConfig().getBoolean("event.teams")) { + this.team.setColor(ChatColor.BLUE); + this.team.setDisplayName("Event"); - if (this.event == null) { - event = this.scoreboard.registerNewObjective("event", "event", "§6Challenges"); - } - event.setDisplaySlot(DisplaySlot.SIDEBAR); - event.setDisplayName(team.getColor() + team.getPrefix() + team.getDisplayName()); - event.setRenderType(RenderType.INTEGER); - - for (String entry : team.getEntries()) { - if (!event.getScore(entry).isScoreSet()) { - event.getScore(entry).setScore(0); + if (this.event == null) { + event = this.scoreboard.registerNewObjective("event", "event", "§6Challenges"); } + event.setDisplaySlot(DisplaySlot.SIDEBAR); + event.setDisplayName(team.getColor() + team.getPrefix() + team.getDisplayName()); + event.setRenderType(RenderType.INTEGER); + + for (String entry : team.getEntries()) { + if (!event.getScore(entry).isScoreSet()) { + event.getScore(entry).setScore(0); + } + } + } else { + this.team.setColor(ChatColor.BLUE); + this.team.setDisplayName("Team Event"); + + event = TeamUtils.getTeamscoreboardObjective(); + + event.setDisplaySlot(DisplaySlot.SIDEBAR); + event.setDisplayName(team.getColor() + team.getPrefix() + team.getDisplayName()); + event.setRenderType(RenderType.INTEGER); } + } else { if (event != null) { event.unregister(); @@ -134,6 +165,17 @@ } } + void updateEventScore(ChallengeTeam team, int difference) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (this.event != null) { + Score score = event.getScore(team.getName()); + score.setScore(score.getScore() + difference); + } + } + + void setEventScore(Player player, int newScore) { if (plugin.getServerType() == ServerType.ADVENTURE) { return; @@ -143,6 +185,15 @@ score.setScore(newScore); } } + void setEventScore(ChallengeTeam team, int newScore) { + if (plugin.getServerType() == ServerType.ADVENTURE) { + return; + } + if (this.event != null) { + Score score = event.getScore(team.getName()); + score.setScore(newScore); + } + } public Scoreboard getScoreboard() { return scoreboard; diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java new file mode 100644 index 0000000..c0b34fd --- /dev/null +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreListener.java @@ -0,0 +1,6 @@ +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 1b2b106..9af073c 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -3,6 +3,8 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.challenges.SammelFieberChallengeEvent; import de.fanta.challenges.guis.eventgui.SammelFieberSettingsGui; +import de.fanta.challenges.teams.ChallengeTeam; +import de.fanta.challenges.teams.TeamUtils; import de.fanta.challenges.utils.ChatUtil; import de.iani.cubesideutils.HastebinUtil; import org.bukkit.entity.Player; @@ -38,15 +40,33 @@ this.plugin.getSBManager().updateEventScore(player, difference); } + public void updateTeamScore(Player player, int difference) { + int score = scores.getOrDefault(TeamUtils.getPlayerTeam(player).getName(), 0); + score += difference; + scores.put(TeamUtils.getPlayerTeam(player).getName(), score); + + this.plugin.getSBManager().updateEventScore(TeamUtils.getPlayerTeam(player), difference); + } + public void setScore(Player player, int score) { scores.put(player.getName(), score); this.plugin.getSBManager().setEventScore(player, score); } + public void setTeamScore(Player player, int score) { + scores.put(TeamUtils.getPlayerTeam(player).getName(), score); + this.plugin.getSBManager().setEventScore(TeamUtils.getPlayerTeam(player), score); + } + public int getScore(Player player) { return scores.getOrDefault(player.getName(), 0); } + public int getTeamScore(Player player) { + ChallengeTeam team = TeamUtils.getPlayerTeam(player); + return scores.getOrDefault(team.getName(), 0); + } + public int getPlayerPosition(Player player) { List indexes = scores.entrySet().stream().sorted(Map.Entry.comparingByValue((o1, o2) -> Integer.compare(o1, o2) * -1)).map(Map.Entry::getKey).toList(); return indexes.indexOf(player.getName()); diff --git a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java index 9f28261..70dfe57 100644 --- a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java +++ b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java @@ -11,6 +11,8 @@ private Location spawn; + private Location sfhopperlocation; + private ItemStack displayItem; private int score; @@ -53,6 +55,14 @@ this.spawn = spawn; } + public Location getSammelFieberHopperlocation() { + return sfhopperlocation; + } + + public void setSammelFieberHopperlocation(Location sfhopperlocation) { + this.sfhopperlocation = sfhopperlocation; + } + public ItemStack getDisplayItem() { return displayItem; } diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java index 2c8dc4a..91ef7bd 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamUtils.java +++ b/src/main/java/de/fanta/challenges/teams/TeamUtils.java @@ -6,6 +6,7 @@ import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -16,10 +17,12 @@ import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Team; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.Set; public class TeamUtils { @@ -33,7 +36,7 @@ private static Score[] scoreboardScores; - private static Objective scoreboardObjective; + private static Objective teamscoreboardObjective; private static HashMap playerTeams = new HashMap<>(); @@ -121,7 +124,7 @@ return teams; } - public static ItemStack selectiomItem() { + public static ItemStack selctItem() { ItemStack stack = new ItemStack(Material.LIME_BED); ItemMeta meta = stack.getItemMeta(); meta.setDisplayName(ChatUtil.GREEN + "Team Auswahl"); @@ -135,29 +138,40 @@ } public static ChallengeTeam getTeam(String name) { - int count = teams.length; + ChallengeTeam team = null; for (ChallengeTeam t : teams) { if (name.equalsIgnoreCase(t.getName())) { - return t; + team = t; } } - try { - int teamId = Integer.parseInt(name) - 1; - if (teamId >= 0 && teamId < count) { - return teams[teamId]; + return team; + } + + public static ChallengeTeam getPlayerTeam(OfflinePlayer player) { + ChallengeTeam team = null; + for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { + if (challengeTeam != null) { + for (OfflinePlayer pp : TeamUtils.getScoreboard().getTeam(challengeTeam.getName()).getPlayers()) { + if (pp == player) { + team = challengeTeam; + break; + } + } } - } catch (Exception e) { - // ignore } - return null; + return team; + } + + public static @NotNull Set getPlayersInTeam(ChallengeTeam team) { + return TeamUtils.getScoreboard().getTeam(team.getName()).getPlayers(); } public static void createScoreBoardTeams() { scoreboard = Challenges.getPlugin().getSBManager().getScoreboard(); - if (scoreboardObjective == null) { - scoreboardObjective = scoreboard.registerNewObjective("teams", "dummy", "Event"); - scoreboardObjective.setDisplayName("Event"); - scoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); + if (teamscoreboardObjective == null) { + teamscoreboardObjective = scoreboard.registerNewObjective("teams", "dummy", "Event"); + teamscoreboardObjective.setDisplayName("Event"); + teamscoreboardObjective.setDisplaySlot(DisplaySlot.SIDEBAR); } scoreboardTeams = new Team[teams.length]; scoreboardScores = new Score[teams.length + 1]; @@ -169,9 +183,9 @@ scoreboardTeams[i].setPrefix(t.getChatColor().toString()); scoreboardTeams[i].setColor(t.getChatColor()); scoreboardTeams[i].setAllowFriendlyFire(false); - scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.NEVER); + scoreboardTeams[i].setOption(Team.Option.COLLISION_RULE, Team.OptionStatus.FOR_OWN_TEAM); - scoreboardScores[i] = scoreboardObjective.getScore(t.getChatColor() + t.getName()); + scoreboardScores[i] = teamscoreboardObjective.getScore(t.getChatColor() + t.getName()); } } } @@ -202,10 +216,15 @@ scoreboard.getTeam(team.getName()).addPlayer(player); TeamSelectGUI.updateTeamSelectGui(); + Challenges.getPlugin().getSBManager().setScoreboardtoTeam(team); } } public static Scoreboard getScoreboard() { return scoreboard; } + + public static Objective getTeamscoreboardObjective() { + return teamscoreboardObjective; + } }