diff --git a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java index f93cdcb..44540c8 100644 --- a/src/main/java/gent/zeus/mc13dtl/MC13DTL.java +++ b/src/main/java/gent/zeus/mc13dtl/MC13DTL.java @@ -2,7 +2,6 @@ package gent.zeus.mc13dtl; import gent.zeus.mc13dtl.group.GroupAddCommand; import gent.zeus.mc13dtl.group.GroupRemoveCommand; -import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitScheduler; @@ -13,13 +12,10 @@ import gent.zeus.mc13dtl.gamestate.GameStateHandler; import io.papermc.paper.command.brigadier.Commands; import io.papermc.paper.plugin.lifecycle.event.LifecycleEventManager; import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; public class MC13DTL extends JavaPlugin { public static MC13DTL instance; - public static ScoreboardManager sm; - public static Scoreboard scoreboard; + public static TeamScoreBoard board; @Override public void onEnable() { @@ -35,8 +31,7 @@ public class MC13DTL extends JavaPlugin { BukkitScheduler scheduler = this.getServer().getScheduler(); scheduler.runTaskTimer(this, new RandomEventRunner(), 0, 100); scheduler.runTask(this, () -> { - sm = Bukkit.getScoreboardManager(); - scoreboard = sm.getMainScoreboard(); + board = new TeamScoreBoard(); }); } } diff --git a/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java new file mode 100644 index 0000000..f0e3713 --- /dev/null +++ b/src/main/java/gent/zeus/mc13dtl/TeamScoreBoard.java @@ -0,0 +1,79 @@ +package gent.zeus.mc13dtl; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.*; + +import java.util.ArrayList; +import java.util.List; + +public class TeamScoreBoard { + + public ScoreboardManager sm; + public Scoreboard scoreboard; + + private Objective objective; + + public TeamScoreBoard() { + sm = Bukkit.getScoreboardManager(); + scoreboard = sm.getMainScoreboard(); + + objective = scoreboard.getObjective("scores"); + if (objective == null) { + objective = scoreboard.registerNewObjective("scores", Criteria.DUMMY, Component.text("Scores")); + } + + objective.setDisplaySlot(DisplaySlot.SIDEBAR); + } + + public void setScore(Team team, int score) { + Score score_obj = objective.getScore(team.getName()); + if (!score_obj.isScoreSet()) { + score_obj.customName(Component.text("Team " + team.getName()).color(team.color())); + } + score_obj.setScore(score); + } + + public int getScore(Team team) { + return objective.getScore(team.getName()).getScore(); + } + + public Team getTeam(Integer team_index) { + Team team = scoreboard.getTeam(team_index.toString()); + + if (team == null) { + team = MC13DTL.board.scoreboard.registerNewTeam(team_index.toString()); + List colors = new ArrayList<>(NamedTextColor.NAMES.values()); + team.color(colors.get(team_index % colors.size())); + team.prefix(Component.text("Team " + team_index.toString() + " ")); + team.setAllowFriendlyFire(false); + } + + return team; + } + + public void addToTeam(Player player, Team team) { + team.addPlayer(player); + team.addEntry(player.getUniqueId().toString()); + player.sendRichMessage("You have been added to team " + team.getName()); + MC13DTL.board.setScore(team, 0); + player.setGlowing(true); + } + + public void sendMessageToTeam(Team team, Component message) { + this.getPlayers(team).forEach(p -> p.sendMessage(message)); + } + + public List getPlayers(Team team) { + List players = new ArrayList<>(); + for (String entry : team.getEntries()) { + Player player = Bukkit.getPlayer(entry); + if (player != null) { + players.add(player); + } + } + return players; + } +} diff --git a/src/main/java/gent/zeus/mc13dtl/events/Event.java b/src/main/java/gent/zeus/mc13dtl/events/Event.java index bd4c21b..69ffb60 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/Event.java +++ b/src/main/java/gent/zeus/mc13dtl/events/Event.java @@ -1,10 +1,8 @@ package gent.zeus.mc13dtl.events; -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; @@ -13,64 +11,46 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scoreboard.Team; import gent.zeus.mc13dtl.MC13DTL; -import net.md_5.bungee.api.ChatColor; public abstract class Event implements Listener { - protected Team team; + protected Team team; - public Event(Team team) { - this.team = team; - for (Player player : getPlayers()) { - player.sendMessage(ChatColor.GRAY + "" + ChatColor.ITALIC + getMessage()); + public Event(Team team) { + this.team = team; + MC13DTL.board.sendMessageToTeam(team, Component.text(getMessage()).color(NamedTextColor.GRAY).decorate(TextDecoration.ITALIC)); + MC13DTL.instance.getServer().getPluginManager().registerEvents(this, MC13DTL.instance); + if (MC13DTL.board.getPlayers(team).isEmpty()) { + eventFailed(); + } } - MC13DTL.instance.getServer().getPluginManager().registerEvents(this, MC13DTL.instance); - if (getPlayers().size() == 0) { - eventFailed(); + + private void eventFinished() { + HandlerList.unregisterAll(this); } - } - private void eventFinished() { - HandlerList.unregisterAll(this); - } - - protected void eventSuccess() { - for (Player player : getPlayers()) { - player.sendMessage(ChatColor.GREEN + "Congratulations! You survived this event"); + protected void eventSuccess() { + MC13DTL.board.sendMessageToTeam(team, Component.text("Congratulations! You survived this event").color(NamedTextColor.GREEN)); + eventFinished(); } - eventFinished(); - } - protected void eventFailed() { - for (Player player : getPlayers()) { - player.sendMessage(ChatColor.RED + "Try harder next time..."); + protected void eventFailed() { + MC13DTL.board.sendMessageToTeam(team, Component.text("Try harder next time...").color(NamedTextColor.RED)); + eventFinished(); } - eventFinished(); - } - @EventHandler - public void onPlayerDeath(PlayerDeathEvent event) { - if (getPlayers().contains(event.getPlayer())) { - eventFailed(); + @EventHandler + public void onPlayerDeath(PlayerDeathEvent event) { + if (MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + eventFailed(); + } } - } - @EventHandler - public void onPlayerDeath(PlayerQuitEvent event) { - if (getPlayers().contains(event.getPlayer())) { - eventFailed(); + @EventHandler + public void onPlayerDeath(PlayerQuitEvent event) { + if (MC13DTL.board.getPlayers(team).contains(event.getPlayer())) { + eventFailed(); + } } - } - protected List getPlayers() { - List players = new ArrayList<>(); - for (String entry : team.getEntries()) { - Player player = Bukkit.getPlayer(entry); - if (player != null) { - players.add(player); - } - } - return players; - } - - protected abstract String getMessage(); + protected abstract String getMessage(); } diff --git a/src/main/java/gent/zeus/mc13dtl/events/RandomEventRunner.java b/src/main/java/gent/zeus/mc13dtl/events/RandomEventRunner.java index c3438de..d98b9ae 100644 --- a/src/main/java/gent/zeus/mc13dtl/events/RandomEventRunner.java +++ b/src/main/java/gent/zeus/mc13dtl/events/RandomEventRunner.java @@ -16,7 +16,7 @@ public class RandomEventRunner implements Runnable { long lastRunDay = world.getPersistentDataContainer().get(eventKey, PersistentDataType.LONG); long day = Bukkit.getWorld("world").getFullTime() / 24000; if (day > lastRunDay && Bukkit.getWorld("world").getTime() >= 14000) { - for (Team i : MC13DTL.scoreboard.getTeams()) { + for (Team i : MC13DTL.board.scoreboard.getTeams()) { RandomEventExecutor.executeRandomEvent(i); } world.getPersistentDataContainer().set(eventKey, PersistentDataType.LONG, day); diff --git a/src/main/java/gent/zeus/mc13dtl/group/GroupAddCommand.java b/src/main/java/gent/zeus/mc13dtl/group/GroupAddCommand.java index 21a1895..697b832 100644 --- a/src/main/java/gent/zeus/mc13dtl/group/GroupAddCommand.java +++ b/src/main/java/gent/zeus/mc13dtl/group/GroupAddCommand.java @@ -3,11 +3,6 @@ package gent.zeus.mc13dtl.group; import gent.zeus.mc13dtl.MC13DTL; import io.papermc.paper.command.brigadier.BasicCommand; import io.papermc.paper.command.brigadier.CommandSourceStack; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; - -import java.util.ArrayList; -import java.util.List; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -23,24 +18,8 @@ public class GroupAddCommand implements BasicCommand { Player player = Bukkit.getPlayerExact(args[0]); if (player != null) { Integer index = Integer.parseInt(args[1]); - - Team team = null; - try { - team = MC13DTL.scoreboard.registerNewTeam(index.toString()); - List colors = new ArrayList<>(NamedTextColor.NAMES.values()); - team.color(colors.get(index % colors.size())); - team.prefix(Component.text("Team " + index.toString() + " ")); - team.setAllowFriendlyFire(false); - } catch (IllegalArgumentException e) { - team = MC13DTL.scoreboard.getTeam(index.toString()); - } - - if (team != null) { - team.addPlayer(player); - team.addEntry(player.getUniqueId().toString()); - player.sendRichMessage("You have been added to team " + index.toString()); - player.setGlowing(true); - } + Team team = MC13DTL.board.getTeam(index); + MC13DTL.board.addToTeam(player, team); } else { commandSourceStack.getSender().sendMessage("Player " + args[0] + " does not exist."); } diff --git a/src/main/java/gent/zeus/mc13dtl/group/GroupRemoveCommand.java b/src/main/java/gent/zeus/mc13dtl/group/GroupRemoveCommand.java index 35a1c29..3f0805f 100644 --- a/src/main/java/gent/zeus/mc13dtl/group/GroupRemoveCommand.java +++ b/src/main/java/gent/zeus/mc13dtl/group/GroupRemoveCommand.java @@ -15,7 +15,7 @@ public class GroupRemoveCommand implements BasicCommand { if (args.length > 0) { Player player = Bukkit.getPlayerExact(args[0]); if (player != null) { - Team team = MC13DTL.scoreboard.getEntryTeam(player.getUniqueId().toString()); + Team team = MC13DTL.board.scoreboard.getEntryTeam(player.getUniqueId().toString()); if (team != null) { team.removeEntry(player.getName()); player.sendMessage("You have been removed from your team");