diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java index 8ad4146..9ddb221 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/FightSystem.java @@ -102,6 +102,7 @@ public class FightSystem extends JavaPlugin { new RankedJoinListener(); new GameplayListener(); new PersonalKitCreator(); + new ScoreboardListener(); if(Core.getVersion() > 8) new VersionDependentListener(); diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/listener/ScoreboardListener.java b/FightSystem_Main/src/de/steamwar/fightsystem/listener/ScoreboardListener.java new file mode 100644 index 0000000..49722fd --- /dev/null +++ b/FightSystem_Main/src/de/steamwar/fightsystem/listener/ScoreboardListener.java @@ -0,0 +1,26 @@ +package de.steamwar.fightsystem.listener; + +import de.steamwar.fightsystem.states.FightState; +import de.steamwar.fightsystem.utils.FightScoreboard; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.EnumSet; + +public class ScoreboardListener extends BasicListener { + + public ScoreboardListener() { + super(EnumSet.allOf(FightState.class)); + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + FightScoreboard.showScoreboard(event.getPlayer()); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + FightScoreboard.removeScoreboard(event.getPlayer()); + } +} diff --git a/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightScoreboard.java b/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightScoreboard.java index 81f3935..8ceb2be 100644 --- a/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightScoreboard.java +++ b/FightSystem_Main/src/de/steamwar/fightsystem/utils/FightScoreboard.java @@ -27,111 +27,111 @@ import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.RecordSystem; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.winconditions.*; +import de.steamwar.scoreboard.SWScoreboard; +import de.steamwar.scoreboard.ScoreboardCallback; import org.bukkit.Bukkit; -import org.bukkit.scoreboard.DisplaySlot; -import org.bukkit.scoreboard.Objective; +import org.bukkit.entity.Player; import org.bukkit.scoreboard.Scoreboard; import java.util.EnumSet; -import java.util.Objects; +import java.util.HashMap; import java.util.Set; public class FightScoreboard { - private FightScoreboard(){} - private static final Set fullScoreboard = EnumSet.of(FightState.RUNNING, FightState.SPECTATE); - private static final Scoreboard scoreboard = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard(); - private static final Objective objective; private static int index = 0; - - static{ - if(scoreboard.getObjective("AAA") == null) - //noinspection deprecation - objective = scoreboard.registerNewObjective("AAA", "BBB"); - else - objective = scoreboard.getObjective("AAA"); - } + private static String title = ""; + private static HashMap scores; public static void init(){ - Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), () -> { - objective.unregister(); - //noinspection deprecation - scoreboard.registerNewObjective("AAA", "BBB"); - objective.setDisplaySlot(DisplaySlot.SIDEBAR); - - FightTeam fightTeam = getIndexDisplay(); - if(fightTeam != null) - teamScoreboard(fightTeam); - else - generalScoreboard(); - - Bukkit.getOnlinePlayers().forEach(player -> player.setScoreboard(scoreboard)); - }, 0, 200); + Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), FightScoreboard::nextIndexDisplay, 0, 200); } public static Scoreboard getScoreboard() { - return scoreboard; + return Bukkit.getScoreboardManager().getMainScoreboard(); + } + + public static void showScoreboard(Player p) { + SWScoreboard.createScoreboard(p, new ScoreboardCallback() { + @Override + public HashMap getData() { + return scores; + } + + @Override + public String getTitle() { + return title; + } + }); + } + + public static void removeScoreboard(Player p) { + SWScoreboard.removeScoreboard(p); } private static void teamScoreboard(FightTeam fightTeam){ - objective.setDisplayName(fightTeam.getColoredName()); + title = fightTeam.getColoredName(); if(Config.recording()) - RecordSystem.scoreboardTitle(fightTeam.getColoredName()); + RecordSystem.scoreboardTitle(title); fightTeam.getPlayers().forEach(fp -> { if(fp.isLiving()) - setScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth())); + addScore(fightTeam.getPrefix() + fp.getPlayer().getName(), (int) Math.ceil(fp.getPlayer().getHealth())); }); } private static void generalScoreboard(){ - objective.setDisplayName("§eKampf"); + title = "§6Kampf"; if(Config.recording()) - RecordSystem.scoreboardTitle("§eKampf"); + RecordSystem.scoreboardTitle(title); if (Config.Timeout || Config.Points || Config.HeartRatioTimeout) { int fightTime = FightSystem.getFightTime(); if (fightTime >= 60) - setScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 4); + addScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s", 4); else - setScore("§7Zeit: §a" + fightTime + "s", 4); + addScore("§7Zeit: §a" + fightTime + "s", 4); } - setScore("§7TPS: §e" + TPSWatcher.getTPS(), 3); + addScore("§7TPS: §e" + TPSWatcher.getTPS(), 3); if(fullScoreboard.contains(FightSystem.getFightState())){ if (Config.PercentSystem){ - setScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%", 1); - setScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%", 0); + addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%", 1); + addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%", 0); }else if(Config.WaterTechKO){ - setScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(),1); - setScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0); + addScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater(), 1); + addScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater(), 0); }else if(Config.RelativePercent){ - setScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1); - setScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0); + addScore(Fight.getRedTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getRed().getPrintablePercent() + "%", 1); + addScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + WinconditionRelativePercent.getBlue().getPrintablePercent() + "%", 0); }else if(Config.Points){ - setScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1); - setScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0); + addScore(Fight.getRedTeam().getPrefix() + "Punkte: " + WinconditionPoints.getRed().getPoints(), 1); + addScore(Fight.getBlueTeam().getPrefix() + "Punkte: " + WinconditionPoints.getBlue().getPoints(), 0); }else if(Config.PumpkinTechKO){ - setScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1); - setScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0); + addScore(Fight.getRedTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamRedPumpkins(), 1); + addScore(Fight.getBlueTeam().getPrefix() + "Kanonen: " + WinconditionPumpkinTechKO.getTeamBluePumpkins(), 0); } } } - private static void setScore(String key, int value){ - objective.getScore(key).setScore(value); - if(Config.recording()) - RecordSystem.scoreboardData(key, value); - } - - private static FightTeam getIndexDisplay() { + private static void nextIndexDisplay() { index++; + if(index > 2) + index = 0; + FightTeam team = null; if(index == 1) - return Fight.redTeam; + team = Fight.redTeam; if(index == 2) - return Fight.blueTeam; - index = 0; - return null; + team = Fight.blueTeam; + if(team != null) + teamScoreboard(team); + else + generalScoreboard(); } + private static void addScore(String string, int i) { + if(Config.recording()) + RecordSystem.scoreboardData(string, i); + scores.put(string, i); + } }