diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index a90e4b4..f2e2834 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -166,11 +166,10 @@ if (temp.isDirectory()) { FileUtils.moveDirectory(temp, texturepackdownload); } else { - System.out.println("Ordner nicht da!"); + Bukkit.getLogger().info("Ordner nicht da!"); } texturepacklink = "https://fantacs.de/AdventureMap-TexturePacks/" + texturepackid + "/" + texturepackid + ".zip"; - System.out.println(texturepacklink); } catch (IOException e) { e.printStackTrace(); } @@ -378,7 +377,6 @@ public void startResetTask() { resetTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); - System.out.println("Reset in 3 Minuten"); } public void stopResetTask() { @@ -389,7 +387,6 @@ public void delteTexturePack() { File texturepackdownload = new File("/home/web/fanta/AdventureMap-TexturePacks/" + texturepackid + "/"); if (texturepackdownload.isDirectory()) { - System.out.println("Delete File " + texturepackdownload.getAbsolutePath()); texturepackdownload.delete(); } } 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 ca112fa..9560b17 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/EventGui.java @@ -112,8 +112,10 @@ GUIUtils.setConfig("event.teams", true); GUIUtils.sendTitleToAll("Event", "Teams aktiviert", ChatUtil.GREEN); for (Player pp : Bukkit.getOnlinePlayers()) { + plugin.getSBManager().removeScoreboard(pp); pp.getInventory().setItem(8, TeamUtils.selectiomItem()); } + plugin.getScoreManager().resetScores(); } else { GUIUtils.setConfig("event.teams", false); GUIUtils.sendTitleToAll("Event", "Teams deaktiviert", ChatUtil.RED); 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 e3dca51..0b3fdcd 100644 --- a/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java +++ b/src/main/java/de/fanta/challenges/guis/eventgui/TeamSelectGUI.java @@ -7,12 +7,16 @@ import de.fanta.challenges.utils.guiutils.GUIUtils; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; 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.ArrayList; import java.util.HashMap; import java.util.Map; @@ -20,12 +24,12 @@ private static final Challenges plugin = Challenges.getPlugin(); private static final Map teamperSlot = new HashMap<>(); + private static final Map slotbyTeam = new HashMap<>(); private static int CLOSE_IDEX; private static Inventory TEAM_SELECT_UI; public static void buildTeamSelectInventory() { TEAM_SELECT_UI = Bukkit.createInventory(null, 9 * (TeamUtils.getTeams().length / 7 + ((TeamUtils.getTeams().length % 7 > 0) ? 1 : 0)) + 18, plugin.getGUIPREFIX() + " >> Select Team..."); - System.out.println(TEAM_SELECT_UI.getSize()); CLOSE_IDEX = TEAM_SELECT_UI.getSize() - 9; int row = 0; int cat = 0; @@ -39,6 +43,7 @@ TEAM_SELECT_UI.setItem(slot, team.getDisplayItem()); teamperSlot.put(slot, team); + slotbyTeam.put(team, slot); if (cat < 6) { cat++; continue; @@ -59,6 +64,29 @@ p.openInventory(TEAM_SELECT_UI); } + public static void updateTeamSelectGui() { + for (ChallengeTeam challengeTeam : TeamUtils.getTeams()) { + 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); + } + } + } + @EventHandler public void onInventoryClick(InventoryClickEvent e) { int slot = e.getRawSlot(); @@ -67,7 +95,7 @@ if (e.getInventory() == TEAM_SELECT_UI) { if (team != null) { if (e.isLeftClick()) { - ChatUtil.sendNormalMessage(p, "Du bist nun in Team " + team.getName() + "!"); + TeamUtils.selectTeam(p, team); p.closeInventory(); } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java index a16b852..433fe4d 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -143,4 +143,8 @@ score.setScore(newScore); } } + + public Scoreboard getScoreboard() { + return scoreboard; + } } diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java index d528f84..1b2b106 100644 --- a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -90,7 +90,6 @@ HastebinUtil.paste(sb.toString(), new HastebinUtil.PasteCompletedListener() { @Override public void onSuccess(String url) { - System.out.println(); ChatUtil.sendNormalMessage(player, "Event Log gepastet: " + url); plugin.getLogger().log(Level.SEVERE, "Event Log gepastet: " + url); plugin.getScoreManager().resetScores(); diff --git a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java index 9e895f6..9f28261 100644 --- a/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java +++ b/src/main/java/de/fanta/challenges/teams/ChallengeTeam.java @@ -56,4 +56,8 @@ public ItemStack getDisplayItem() { return displayItem; } + + public void setDisplayItem(ItemStack displayItem) { + this.displayItem = displayItem; + } } diff --git a/src/main/java/de/fanta/challenges/teams/TeamUtils.java b/src/main/java/de/fanta/challenges/teams/TeamUtils.java index 7cdab0d..2c8dc4a 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamUtils.java +++ b/src/main/java/de/fanta/challenges/teams/TeamUtils.java @@ -1,13 +1,25 @@ package de.fanta.challenges.teams; +import de.fanta.challenges.Challenges; import de.fanta.challenges.guis.eventgui.TeamSelectGUI; import de.fanta.challenges.utils.ChatUtil; import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Material; +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.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; public class TeamUtils { @@ -15,56 +27,64 @@ private static int teamsize; - private static int maxplayers; + private static Team[] scoreboardTeams; + + private static Scoreboard scoreboard; + + private static Score[] scoreboardScores; + + private static Objective scoreboardObjective; + + private static HashMap playerTeams = new HashMap<>(); private static ChallengeTeam createDefaultTeam(int nr) { if (nr == 0) { - return new ChallengeTeam("Schwarz", ChatColor.BLACK, createDisplayItem(Color.fromRGB(0,0,0), "Schwarz")); + return new ChallengeTeam("Schwarz", ChatColor.BLACK, createDisplayItem(Color.fromRGB(0, 0, 0), ChatColor.BLACK, "Schwarz")); } if (nr == 1) { - return new ChallengeTeam("Dunkel-Blau", ChatColor.DARK_BLUE, createDisplayItem(Color.fromRGB(0,0,170), "Dunkel-Blau")); + return new ChallengeTeam("Dunkel-Blau", ChatColor.DARK_BLUE, createDisplayItem(Color.fromRGB(0, 0, 170), ChatColor.DARK_BLUE, "Dunkel-Blau")); } if (nr == 2) { - return new ChallengeTeam("Dunkel-Grün", ChatColor.DARK_GREEN, createDisplayItem(Color.fromRGB(0,170,0), "Dunkel-Grün")); + return new ChallengeTeam("Dunkel-Grün", ChatColor.DARK_GREEN, createDisplayItem(Color.fromRGB(0, 170, 0), ChatColor.DARK_GREEN, "Dunkel-Grün")); } if (nr == 3) { - return new ChallengeTeam("Türkis", ChatColor.DARK_AQUA, createDisplayItem(Color.fromRGB(0,170,170), "Türkis")); + return new ChallengeTeam("Türkis", ChatColor.DARK_AQUA, createDisplayItem(Color.fromRGB(0, 170, 170), ChatColor.DARK_AQUA, "Türkis")); } if (nr == 4) { - return new ChallengeTeam("Dunkel-Rot", ChatColor.DARK_RED, createDisplayItem(Color.fromRGB(170,0,0), "Dunkel-Rot")); + return new ChallengeTeam("Dunkel-Rot", ChatColor.DARK_RED, createDisplayItem(Color.fromRGB(170, 0, 0), ChatColor.DARK_RED, "Dunkel-Rot")); } if (nr == 5) { - return new ChallengeTeam("Lila", ChatColor.DARK_PURPLE, createDisplayItem(Color.fromRGB(170,170,0), "Lila")); + return new ChallengeTeam("Lila", ChatColor.DARK_PURPLE, createDisplayItem(Color.fromRGB(170, 0, 170), ChatColor.DARK_PURPLE, "Lila")); } if (nr == 6) { - return new ChallengeTeam("Gold", ChatColor.GOLD, createDisplayItem(Color.fromRGB(255,170,0), "Gold")); + return new ChallengeTeam("Gold", ChatColor.GOLD, createDisplayItem(Color.fromRGB(255, 170, 0), ChatColor.GOLD, "Gold")); } if (nr == 7) { - return new ChallengeTeam("Grau", ChatColor.GRAY, createDisplayItem(Color.fromRGB(170,170,170), "Grau")); + return new ChallengeTeam("Grau", ChatColor.GRAY, createDisplayItem(Color.fromRGB(170, 170, 170), ChatColor.GRAY, "Grau")); } if (nr == 8) { - return new ChallengeTeam("Dunkel-Grau", ChatColor.DARK_GRAY, createDisplayItem(Color.fromRGB(85,85,85), "Dunkel-Grau")); + return new ChallengeTeam("Dunkel-Grau", ChatColor.DARK_GRAY, createDisplayItem(Color.fromRGB(85, 85, 85), ChatColor.DARK_GRAY, "Dunkel-Grau")); } if (nr == 9) { - return new ChallengeTeam("Blau", ChatColor.BLUE, createDisplayItem(Color.fromRGB(85,85,255), "Blau")); + return new ChallengeTeam("Blau", ChatColor.BLUE, createDisplayItem(Color.fromRGB(85, 85, 255), ChatColor.BLUE, "Blau")); } if (nr == 10) { - return new ChallengeTeam("Grün", ChatColor.GREEN, createDisplayItem(Color.fromRGB(85,255,85), "Grün")); + return new ChallengeTeam("Grün", ChatColor.GREEN, createDisplayItem(Color.fromRGB(85, 255, 85), ChatColor.GREEN, "Grün")); } if (nr == 11) { - return new ChallengeTeam("Hell-Blau", ChatColor.AQUA, createDisplayItem(Color.fromRGB(85,255,255), "Hell-Blau")); + return new ChallengeTeam("Hell-Blau", ChatColor.AQUA, createDisplayItem(Color.fromRGB(85, 255, 255), ChatColor.AQUA, "Hell-Blau")); } if (nr == 12) { - return new ChallengeTeam("Rot", ChatColor.RED, createDisplayItem(Color.fromRGB(255,85,85), "Rot")); + return new ChallengeTeam("Rot", ChatColor.RED, createDisplayItem(Color.fromRGB(255, 85, 85), ChatColor.RED, "Rot")); } if (nr == 13) { - return new ChallengeTeam("Pink", ChatColor.LIGHT_PURPLE, createDisplayItem(Color.fromRGB(255,85,255), "Pink")); + return new ChallengeTeam("Pink", ChatColor.LIGHT_PURPLE, createDisplayItem(Color.fromRGB(255, 85, 255), ChatColor.LIGHT_PURPLE, "Pink")); } if (nr == 14) { - return new ChallengeTeam("Gelb", ChatColor.YELLOW, createDisplayItem(Color.fromRGB(255,255,85), "Gelb")); + return new ChallengeTeam("Gelb", ChatColor.YELLOW, createDisplayItem(Color.fromRGB(255, 255, 85), ChatColor.YELLOW, "Gelb")); } - return new ChallengeTeam("Team_" + nr, ChatColor.WHITE, createDisplayItem(Color.WHITE, "Team " + nr)); + return new ChallengeTeam("Team_" + nr, ChatColor.WHITE, createDisplayItem(Color.WHITE, ChatColor.WHITE, "Team " + nr)); } public static void setTeamCount(int teamcount) { @@ -73,14 +93,17 @@ for (int i = 0; i < teamcount; i++) { teams[i] = (oldTeams != null && oldTeams.length > i && oldTeams[i] != null) ? oldTeams[i] : createDefaultTeam(i); } + createScoreBoardTeams(); TeamSelectGUI.buildTeamSelectInventory(); + TeamSelectGUI.updateTeamSelectGui(); } - private static ItemStack createDisplayItem(Color color, String teamName) { + private static ItemStack createDisplayItem(Color color, ChatColor chatColor, String teamName) { ItemStack displayItem = new ItemStack(Material.LEATHER_HELMET, 1); LeatherArmorMeta meta = (LeatherArmorMeta) displayItem.getItemMeta(); meta.setColor(color); - meta.setDisplayName(teamName); + meta.setDisplayName(chatColor + teamName); + meta.addItemFlags(ItemFlag.HIDE_DYE); displayItem.setItemMeta(meta); return displayItem; } @@ -94,14 +117,6 @@ teamsize = size; } - public static void setMaxplayers(int size) { - maxplayers = size; - } - - public static int getMaxplayers() { - return maxplayers; - } - public static ChallengeTeam[] getTeams() { return teams; } @@ -114,4 +129,83 @@ return stack; } + + public static ChallengeTeam getTeam(int nr) { + return nr >= 0 && nr < teams.length ? teams[nr] : null; + } + + public static ChallengeTeam getTeam(String name) { + int count = teams.length; + for (ChallengeTeam t : teams) { + if (name.equalsIgnoreCase(t.getName())) { + return t; + } + } + try { + int teamId = Integer.parseInt(name) - 1; + if (teamId >= 0 && teamId < count) { + return teams[teamId]; + } + } catch (Exception e) { + // ignore + } + return null; + } + + 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); + } + scoreboardTeams = new Team[teams.length]; + scoreboardScores = new Score[teams.length + 1]; + for (int i = 0; i < teams.length; i++) { + ChallengeTeam t = getTeam(i); + if (scoreboardTeams[i] == null) { + if (scoreboard.getTeam(t.getName()) == null) { + scoreboardTeams[i] = scoreboard.registerNewTeam(t.getName()); + 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); + + scoreboardScores[i] = scoreboardObjective.getScore(t.getChatColor() + t.getName()); + } + } + } + } + + public static void selectTeam(Player player, ChallengeTeam team) { + ChallengeTeam oldteam = playerTeams.get(player); + if (playerTeams != null) { + if (team != null && !Challenges.getPlugin().getConfig().getBoolean("event.teams")) { + ChatUtil.sendErrorMessage(player, "In dieser Arena können keine Teams gewählt werden!"); + return; + } + if (team != null && oldteam == team) { + ChatUtil.sendNormalMessage(player, "Du bist bereits in Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + "."); + return; + } + int count = Collections.frequency(new ArrayList<>(playerTeams.values()), team); + if (team != null && count >= teamsize) { + ChatUtil.sendNormalMessage(player, "Das Team " + team.getChatColor() + team.getName() + ChatUtil.GREEN + " ist voll."); + return; + } + playerTeams.put(player, team); + ChatUtil.sendNormalMessage(player, "Du bist nun in Team " + team.getChatColor() + team.getName()); + + if (oldteam != null) { + scoreboard.getTeam(oldteam.getName()).removePlayer(player); + } + scoreboard.getTeam(team.getName()).addPlayer(player); + + TeamSelectGUI.updateTeamSelectGui(); + } + } + + public static Scoreboard getScoreboard() { + return scoreboard; + } } diff --git a/src/main/java/de/fanta/challenges/utils/ChatUtil.java b/src/main/java/de/fanta/challenges/utils/ChatUtil.java index 747b376..1dfae39 100644 --- a/src/main/java/de/fanta/challenges/utils/ChatUtil.java +++ b/src/main/java/de/fanta/challenges/utils/ChatUtil.java @@ -4,7 +4,6 @@ import de.iani.cubesideutils.bukkit.ChatUtilBukkit; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; -import org.bukkit.Color; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player;