diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index b853c57..1262148 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -6,7 +6,7 @@ package de.fanta.challenges; import de.fanta.challenges.challenges.RandomDrops; -import de.fanta.challenges.challenges.ScoreBoardManager; +import de.fanta.challenges.scoreboard.ScoreBoardManager; import de.fanta.challenges.commands.CommandRegistration; import de.fanta.challenges.events.PlayerCountChangedEvent; import de.fanta.challenges.events.ServerStatusChangedEvent; @@ -26,6 +26,7 @@ import de.fanta.challenges.listeners.InventoryClickListener; import de.fanta.challenges.listeners.PlayerListener; import de.fanta.challenges.listeners.QuitJoinListener; +import de.fanta.challenges.scoreboard.ScoreManager; import de.fanta.challenges.utils.ChatUtil; import net.md_5.bungee.api.ChatColor; import org.bukkit.BanList; @@ -64,6 +65,7 @@ private BackpackGui backpack; private ScoreBoardManager sbManager; + private ScoreManager scoreManager; public RandomDrops rndDrops; @@ -85,6 +87,8 @@ this.timer = new Timer(this); this.rndDrops = new RandomDrops(); + this.scoreManager = new ScoreManager(this); + this.backpack = new BackpackGui(getConfig().getInt("backpack_size") * 9); new CommandRegistration(this).registerCommands(); @@ -111,7 +115,7 @@ this.backpack.loadInventoryFromConfig(); getLogger().info("Plugin loaded!"); - this.sbManager = new ScoreBoardManager(); + this.sbManager = new ScoreBoardManager(this); timer.setTime(getConfig().getInt("timertime")); @@ -140,8 +144,6 @@ Bukkit.getPluginManager().callEvent(new TimerChangedEvent(timer.isRunning())); Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size())); }, 200L); - - //ScoreBoardManager.createPlayerTeam(); //TODO Add Teams } @Override @@ -268,4 +270,8 @@ public File getBackpackConfigFile() { return backpackConfigFile; } + + public ScoreManager getScoreManager() { + return scoreManager; + } } diff --git a/src/main/java/de/fanta/challenges/challenges/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/challenges/ScoreBoardManager.java deleted file mode 100644 index 1d10914..0000000 --- a/src/main/java/de/fanta/challenges/challenges/ScoreBoardManager.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.fanta.challenges.challenges; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; -import org.bukkit.scoreboard.RenderType; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.scoreboard.Team; - -public class ScoreBoardManager { - - public void createHealthScoreboard(Player p) { - org.bukkit.scoreboard.ScoreboardManager manager = Bukkit.getScoreboardManager(); - Scoreboard sb = manager.getNewScoreboard(); - Objective TabHP = sb.registerNewObjective("§6Challenges", "health", "Challenges"); - TabHP.setDisplaySlot(DisplaySlot.PLAYER_LIST); - TabHP.setDisplayName("§cHP"); - TabHP.setRenderType(RenderType.HEARTS); - p.setScoreboard(sb); - } - - public void ScoreBoardEvent(Player p) { - ScoreboardManager manager = Bukkit.getScoreboardManager(); - Scoreboard board = manager.getNewScoreboard(); - Objective Event = board.registerNewObjective("§6Challenges", "Event", "Challenges"); - Team team = board.registerNewTeam("Event"); - team.addPlayer(p); - team.setColor(ChatColor.BLUE); - team.setPrefix(ChatColor.BLUE.toString()); - team.setDisplayName("Event"); - - Event.setDisplaySlot(DisplaySlot.SIDEBAR); - Event.setDisplayName(team.getPrefix() + team.getDisplayName()); - Event.setRenderType(RenderType.INTEGER); - - p.setScoreboard(board); - } - /*public void ScoreBoardTeam(Player p) { - Challenges.getPlugin().onEnable().team.addPlayer(p); - Team team = ; - this.team.setColor(ChatColor.GREEN); - team.setDisplayName("Player"); - team.setPrefix(ChatColor.GREEN.toString()); - p.setScoreboard(this.board); - }*/ - - public static void createPlayerTeam() { - ScoreboardManager manager = Bukkit.getScoreboardManager(); - Scoreboard board = manager.getNewScoreboard(); - Team team = board.registerNewTeam("Player"); - } -} diff --git a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java index 339b69e..9aea66c 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventToggleCommand.java @@ -28,19 +28,18 @@ return true; } if (enable) { - GUIUtils.setConfig("event", true); - GUIUtils.sendTitleToAll("Event", "Event-Modus aktiviert", ChatColor.GREEN); - for (Player p : Bukkit.getOnlinePlayers()) { - //plugin.getSBManager().ScoreBoardEvent(p); + if (!plugin.getConfig().getBoolean("event")) { + GUIUtils.setConfig("event", true); + GUIUtils.sendTitleToAll("Event", "Event-Modus aktiviert", ChatColor.GREEN); + } else { + ChatUtil.sendErrorMessage(sender, "Das Event läuft bereits!"); + return true; } } else { GUIUtils.setConfig("event", false); GUIUtils.sendTitleToAll("Event", "Event-Modus deaktiviert", ChatColor.RED); - for (Player p : Bukkit.getOnlinePlayers()) { - //plugin.getSBManager().ScoreBoardTeam(p); - } } - + plugin.getSBManager().updateEventScoreboard(); return true; } } diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java index 2bb2cb3..ab06a11 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/OtherSettingsGui.java @@ -21,6 +21,7 @@ private static final int BACKPACK_INDEX = 10; private static final int DMG_INCHAT_INDEX = 11; private static final int TNT_DEATH_INDEX = 12; + private static final int TAB_HP_INDEX = 13; private static final int BACKPACK_ADD_INDEX = 1; private static final int BACKPACK_REMOVE_INDEX = 19; @@ -45,10 +46,19 @@ } else { OTHER_SETTINGS_GUI.setItem(DMG_INCHAT_INDEX, GUIUtils.createGuiItem(Material.PAPER, ChatColor.RED + "Schaden im Chat anzeigen deaktiviert")); } - if (plugin.getConfig().getBoolean("tntdeath")) { - OTHER_SETTINGS_GUI.setItem(TNT_DEATH_INDEX, GUIUtils.createGuiItem(Material.TNT, ChatColor.GREEN + "Sterben durch TNT aktiviert", true, ChatColor.GREEN + "Tötet dich mit TNT bei der \"nicht springen, schleichen und jumpen\" Challenge")); + if (p.hasPermission("challenges.event")) { + if (plugin.getConfig().getBoolean("tntdeath")) { + OTHER_SETTINGS_GUI.setItem(TNT_DEATH_INDEX, GUIUtils.createGuiItem(Material.TNT, ChatColor.GREEN + "Sterben durch TNT aktiviert", true, ChatColor.GREEN + "Tötet dich mit TNT bei der \"nicht springen, schleichen und jumpen\" Challenge")); + } else { + OTHER_SETTINGS_GUI.setItem(TNT_DEATH_INDEX, GUIUtils.createGuiItem(Material.TNT, ChatColor.RED + "Sterben durch TNT deaktiviert", ChatColor.RED + "Tötet dich mit TNT bei der \"nicht springen, schleichen und jumpen\" Challenge")); + } } else { - OTHER_SETTINGS_GUI.setItem(TNT_DEATH_INDEX, GUIUtils.createGuiItem(Material.TNT, ChatColor.RED + "Sterben durch TNT deaktiviert", ChatColor.RED + "Tötet dich mit TNT bei der \"nicht springen, schleichen und jumpen\" Challenge")); + OTHER_SETTINGS_GUI.setItem(TNT_DEATH_INDEX, GUIUtils.EMPTY_ICON); + } + if (plugin.getConfig().getBoolean("tabhp")) { + OTHER_SETTINGS_GUI.setItem(TAB_HP_INDEX, GUIUtils.createGuiItem(Material.HEART_OF_THE_SEA, ChatColor.GREEN + "Herzen in der Tablist anzeigen aktiviert", true)); + } else { + OTHER_SETTINGS_GUI.setItem(TAB_HP_INDEX, GUIUtils.createGuiItem(Material.HEART_OF_THE_SEA, ChatColor.RED + "Herzen in der Tablist anzeigen deaktiviert")); } OTHER_SETTINGS_GUI.setItem(BACK_INDEX, GUIUtils.createGuiItem(Material.ARROW, ChatColor.GREEN + "Zurück")); @@ -87,14 +97,26 @@ } break; case TNT_DEATH_INDEX: - if (plugin.getConfig().getBoolean("tntdeath")) { - GUIUtils.sendTitleToAll("Einstellungen", "Sterben durch TNT deaktiviert", ChatColor.RED); - GUIUtils.setConfig("tntdeath", false); - } else { - GUIUtils.sendTitleToAll("Einstellungen", "Sterben durch TNT aktiviert", ChatColor.GREEN); - GUIUtils.setConfig("tntdeath", true); + if (e.getCurrentItem() != null && e.getCurrentItem().getType() == Material.TNT) { + if (plugin.getConfig().getBoolean("tntdeath")) { + GUIUtils.sendTitleToAll("Einstellungen", "Sterben durch TNT deaktiviert", ChatColor.RED); + GUIUtils.setConfig("tntdeath", false); + } else { + GUIUtils.sendTitleToAll("Einstellungen", "Sterben durch TNT aktiviert", ChatColor.GREEN); + GUIUtils.setConfig("tntdeath", true); + } } break; + case TAB_HP_INDEX: + if (plugin.getConfig().getBoolean("tabhp")) { + GUIUtils.sendTitleToAll("Einstellungen", "Herzen in der Tablist anzeigen deaktiviert", ChatColor.RED); + GUIUtils.setConfig("tabhp", false); + } else { + GUIUtils.sendTitleToAll("Einstellungen", "Herzen in der Tablist anzeigen aktiviert", ChatColor.GREEN); + GUIUtils.setConfig("tabhp", true); + } + plugin.getSBManager().updateTabHP(); + break; } createOtherSettingsGUI(p); switch (slot) { diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index c9c3fd3..29eedb1 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -1,6 +1,7 @@ package de.fanta.challenges.listeners; import de.fanta.challenges.Challenges; +import de.fanta.challenges.commands.event.EventToggleCommand; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityTargetLivingEntityEvent; diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 0310fb6..42c2e8d 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -26,8 +26,7 @@ @EventHandler public void onPlayerJoin(PlayerJoinEvent e) { - Player p = e.getPlayer(); - //plugin.getSBManager().ScoreBoardTeam(p); + Player p = e.getPlayer();; if (resetTaskId > 0) { Bukkit.getScheduler().cancelTask(resetTaskId); resetTaskId = -1; @@ -41,9 +40,8 @@ Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; p.setHealth(rp.getHealth()); } - if (this.plugin.getConfig().getBoolean("tabhp")) { - this.plugin.getSBManager().createHealthScoreboard(p); - } + + this.plugin.getSBManager().setScoreboard(p); if (plugin.getCurrentEditor() == null) { Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java new file mode 100644 index 0000000..96d5fb9 --- /dev/null +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreBoardManager.java @@ -0,0 +1,104 @@ +package de.fanta.challenges.scoreboard; + +import de.fanta.challenges.Challenges; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.entity.Strider; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.RenderType; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; +import org.bukkit.scoreboard.Team; + +public class ScoreBoardManager { + + private final Challenges plugin; + private Scoreboard scoreboard; + private Team team; + + private Objective event; + private Objective tabHP; + + public ScoreBoardManager(Challenges plugin) { + this.plugin = plugin; + } + + private void initScoreboard() { // only possible after first world has loaded + this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + this.team = scoreboard.registerNewTeam("Player"); + + this.team.setColor(ChatColor.GREEN); + + updateTabHP(); + } + + public void setScoreboard(Player p) { + if (this.scoreboard == null) { + initScoreboard(); + } + + team.addEntry(p.getName()); + + p.setScoreboard(scoreboard); + } + + public void updateTabHP() { + if (plugin.getConfig().getBoolean("tabhp")) { + if (this.tabHP == null) { + tabHP = scoreboard.registerNewObjective("hp", "health", "§6Challenges"); + } + tabHP.setDisplaySlot(DisplaySlot.PLAYER_LIST); + tabHP.setDisplayName("§cHP"); + tabHP.setRenderType(RenderType.HEARTS); + + for (String entry : team.getEntries()) { + Player player = Bukkit.getPlayer(entry); + if (player != null) { + tabHP.getScore(entry).setScore((int) player.getHealth()); + } + } + + } else { + if (tabHP != null) { + tabHP.unregister(); + tabHP = null; + } + } + } + + public void updateEventScoreboard() { + if (plugin.getConfig().getBoolean("event")) { + 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()) { + event.getScore(entry).setScore(0); + } + + } else { + if (event != null) { + event.unregister(); + event = null; + } + this.team.setColor(ChatColor.GREEN); + this.team.setDisplayName("Player"); + } + } + + void updateEventScore(Player player, int difference) { + if (this.event != null) { + Score score = event.getScore(player.getName()); + score.setScore(score.getScore() + difference); + } + } +} diff --git a/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java new file mode 100644 index 0000000..d06c435 --- /dev/null +++ b/src/main/java/de/fanta/challenges/scoreboard/ScoreManager.java @@ -0,0 +1,39 @@ +package de.fanta.challenges.scoreboard; + +import de.fanta.challenges.Challenges; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class ScoreManager { + + private final Challenges plugin; + private final Map scores; + + public ScoreManager(Challenges plugin) { + this.plugin = plugin; + this.scores = new HashMap<>(); + } + + public void updateScore(Player player, int difference) { + int score = scores.getOrDefault(player.getUniqueId(), 0); + score += difference; + scores.put(player.getUniqueId(), score); + + this.plugin.getSBManager().updateEventScore(player, difference); + } + + public int getScore(Player player) { + return scores.getOrDefault(player.getUniqueId(), -1); + } + + public void saveScores() { + // TODO wenn man will, scores in Datei schreiben + } + + public Map getScores() { + return scores; + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 613c861..ba20b36 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -7,7 +7,7 @@ sharedmg: false respawn: true onelife: false -dmginchat: false +dmginchat: true deathonsprint: false deathonjump: false xpdeath: false