package in.twizmwaz.cardinal.module.modules.scoreboard;
import in.twizmwaz.cardinal.GameHandler;
import in.twizmwaz.cardinal.event.*;
import in.twizmwaz.cardinal.event.objective.ObjectiveCompleteEvent;
import in.twizmwaz.cardinal.event.objective.ObjectiveProximityEvent;
import in.twizmwaz.cardinal.event.objective.ObjectiveTouchEvent;
import in.twizmwaz.cardinal.module.GameObjective;
import in.twizmwaz.cardinal.module.Module;
import in.twizmwaz.cardinal.module.modules.blitz.Blitz;
import in.twizmwaz.cardinal.module.modules.cores.CoreObjective;
import in.twizmwaz.cardinal.module.modules.destroyable.DestroyableObjective;
import in.twizmwaz.cardinal.module.modules.hill.HillObjective;
import in.twizmwaz.cardinal.module.modules.score.ScoreModule;
import in.twizmwaz.cardinal.module.modules.team.TeamModule;
import in.twizmwaz.cardinal.module.modules.wools.WoolObjective;
import in.twizmwaz.cardinal.util.ScoreboardUtils;
import in.twizmwaz.cardinal.util.StringUtils;
import in.twizmwaz.cardinal.util.TeamUtils;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import java.util.ArrayList;
import java.util.List;
public class ScoreboardModule implements Module {
private TeamModule team;
private Scoreboard scoreboard;
public ScoreboardModule(final TeamModule team) {
this.team = team;
this.scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
for (TeamModule teams : TeamUtils.getTeams()) {
Team prefixTeam = scoreboard.registerNewTeam(teams.getId());
prefixTeam.setPrefix(teams.getColor() + "");
scoreboard.registerNewTeam(teams.getId() + "-t");
}
for (GameObjective objective : GameHandler.getGameHandler().getMatch().getModules().getModules(GameObjective.class)) {
scoreboard.registerNewTeam(objective.getScoreboardHandler().getNumber() + "-o");
}
if (ScoreModule.matchHasScoring()) {
for (ScoreModule score : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreModule.class)) {
scoreboard.registerNewTeam(score.getTeam().getId() + "-s");
}
}
if (Blitz.matchIsBlitz()) {
for (TeamModule teams : TeamUtils.getTeams()) {
if (!teams.isObserver()) {
scoreboard.registerNewTeam(teams.getId() + "-b");
}
}
}
}
public TeamModule getTeam() {
return team;
}
public Scoreboard getScoreboard() {
return scoreboard;
}
@Override
public void unload() {
HandlerList.unregisterAll(this);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerChangeTeam(PlayerChangeTeamEvent event) {
if (!event.isCancelled()) {
if (event.getNewTeam() == this.team) {
event.getPlayer().setScoreboard(this.scoreboard);
}
for (TeamModule team : TeamUtils.getTeams()) {
remove(team, event.getPlayer());
}
add(event.getNewTeam(), event.getPlayer());
if (Blitz.matchIsBlitz()) {
if (event.getOldTeam() != null && !event.getOldTeam().isObserver()) {
TeamModule team = event.getOldTeam();
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-b");
for (String entry : scoreboardTeam.getEntries()) {
setScore(scoreboard.getObjective("scoreboard"), entry, team.size());
}
}
if (event.getNewTeam() != null && !event.getNewTeam().isObserver()) {
TeamModule team = event.getNewTeam();
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-b");
for (String entry : scoreboardTeam.getEntries()) {
setScore(scoreboard.getObjective("scoreboard"), entry, team.size());
}
}
}
}
}
public static void add(TeamModule team, Player player) {
for (ScoreboardModule scoreboard : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreboardModule.class)) {
scoreboard.getScoreboard().getTeam(team.getId()).addPlayer(player);
}
}
public static void remove(TeamModule team, Player player) {
for (ScoreboardModule scoreboard : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreboardModule.class)) {
scoreboard.getScoreboard().getTeam(team.getId()).removePlayer(player);
}
}
@EventHandler
public void onCycleComplete(CycleCompleteEvent event) {
create();
}
@EventHandler
public void onObjectiveProximity(ObjectiveProximityEvent event) {
if (getSlots() < 16) {
Team scoreboardTeam = scoreboard.getTeam(event.getObjective().getScoreboardHandler().getNumber() + "-o");
String prefix = event.getObjective().getScoreboardHandler().getPrefix(this.team).length() > 16 ? event.getObjective().getScoreboardHandler().getPrefix(this.team).substring(0, 16) : event.getObjective().getScoreboardHandler().getPrefix(this.team);
scoreboardTeam.setPrefix(prefix);
} else {
if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).contains(event.getObjective())) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(this.team) + " ";
}
if (scoreboardTeam != null) {
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
}
}
}
}
}
}
@EventHandler
public void onTimeLimitChange(TimeLimitChangeEvent event) {
for (GameObjective objective : GameHandler.getGameHandler().getMatch().getModules().getModules(GameObjective.class)) {
if (getSlots() < 16) {
Team scoreboardTeam = scoreboard.getTeam(objective.getScoreboardHandler().getNumber() + "-o");
String prefix = objective.getScoreboardHandler().getPrefix(this.team).length() > 16 ? objective.getScoreboardHandler().getPrefix(this.team).substring(0, 16) : objective.getScoreboardHandler().getPrefix(this.team);
scoreboardTeam.setPrefix(prefix);
} else {
if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).contains(objective)) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(this.team) + " ";
}
if (scoreboardTeam != null) {
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
}
}
}
}
}
}
}
@EventHandler
public void onObjectiveTouch(ObjectiveTouchEvent event) {
if (getSlots() < 16) {
Team scoreboardTeam = scoreboard.getTeam(event.getObjective().getScoreboardHandler().getNumber() + "-o");
String prefix = event.getObjective().getScoreboardHandler().getPrefix(this.team).length() > 16 ? event.getObjective().getScoreboardHandler().getPrefix(this.team).substring(0, 16) : event.getObjective().getScoreboardHandler().getPrefix(this.team);
scoreboardTeam.setPrefix(prefix);
} else {
if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).contains(event.getObjective())) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(this.team) + " ";
}
if (scoreboardTeam != null) {
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
}
}
}
}
}
}
@EventHandler
public void onObjectiveComplete(ObjectiveCompleteEvent event) {
if (getSlots() < 16) {
Team scoreboardTeam = scoreboard.getTeam(event.getObjective().getScoreboardHandler().getNumber() + "-o");
String prefix = event.getObjective().getScoreboardHandler().getPrefix(this.team).length() > 16 ? event.getObjective().getScoreboardHandler().getPrefix(this.team).substring(0, 16) : event.getObjective().getScoreboardHandler().getPrefix(this.team);
scoreboardTeam.setPrefix(prefix);
} else {
if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).contains(event.getObjective())) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(this.team) + " ";
}
if (scoreboardTeam != null) {
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
}
}
}
}
}
}
@EventHandler
public void onTeamNameChange(TeamNameChangeEvent event) {
if (event.getTeam() == team) {
Team scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-t");
scoreboardTeam.setPrefix(event.getTeam().getColor() + "" + ChatColor.ITALIC + StringUtils.trimTo(event.getTeam().getName(), 0, 12));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 12, 28));
if (ScoreModule.matchHasScoring()) {
scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-s");
scoreboardTeam.setPrefix(event.getTeam().getColor() + StringUtils.trimTo(event.getTeam().getName(), 0, 14));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 14, 30));
}
if (Blitz.matchIsBlitz()) {
scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-b");
scoreboardTeam.setPrefix(event.getTeam().getColor() + StringUtils.trimTo(event.getTeam().getName(), 0, 14));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 14, 30));
}
} else {
Team scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-t");
scoreboardTeam.setPrefix(event.getTeam().getColor() + StringUtils.trimTo(event.getTeam().getName(), 0, 14));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 14, 30));
if (ScoreModule.matchHasScoring()) {
scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-s");
scoreboardTeam.setPrefix(event.getTeam().getColor() + StringUtils.trimTo(event.getTeam().getName(), 0, 14));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 14, 30));
}
if (Blitz.matchIsBlitz()) {
scoreboardTeam = scoreboard.getTeam(event.getTeam().getId() + "-b");
scoreboardTeam.setPrefix(event.getTeam().getColor() + StringUtils.trimTo(event.getTeam().getName(), 0, 14));
scoreboardTeam.setSuffix(StringUtils.trimTo(event.getTeam().getName(), 14, 30));
}
}
}
@EventHandler
public void onScoreUpdate(ScoreUpdateEvent event) {
TeamModule team = event.getScoreModule().getTeam();
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-s");
for (String entry : scoreboardTeam.getEntries()) {
setScore(scoreboard.getObjective("scoreboard"), entry, event.getScoreModule().getScore());
}
}
public void create() {
Objective objective = scoreboard.registerNewObjective("scoreboard", "dummy");
objective.setDisplayName(getDisplayTitle());
int slot = 0;
int hills = (getSpecificObjective() != null && getSpecificObjective().equals(HillObjective.class)) && !ScoreModule.matchHasScoring() ? 0 : -1;
List<String> used = new ArrayList<>();
if (getSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && team != this.team) {
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
Team scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
String raw = ChatColor.RESET + WordUtils.capitalizeFully(obj.getName().replaceAll("_", " "));
while (used.contains(raw)) {
raw = ChatColor.RESET + raw;
}
String prefix = obj.getScoreboardHandler().getPrefix(this.team).length() > 16 ? obj.getScoreboardHandler().getPrefix(this.team).substring(0, 16) : obj.getScoreboardHandler().getPrefix(this.team);
String name = StringUtils.trimTo(raw, 0, 16);
scoreboardTeam.setPrefix(prefix);
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(raw, 16, 32));
setScore(objective, name, slot);
used.add(raw);
slot ++;
}
if (TeamUtils.getShownObjectives(team).size() > 0) {
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-t");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, slot);
used.add(name);
slot++;
if (slot < getObjectiveSlots()) {
String blank = getNextBlankSlot(used);
setScore(objective, blank, slot);
used.add(blank);
slot ++;
}
}
}
}
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
Team scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
String raw = ChatColor.RESET + WordUtils.capitalizeFully(obj.getName().replaceAll("_", " "));
while (used.contains(raw)) {
raw = ChatColor.RESET + raw;
}
String prefix = obj.getScoreboardHandler().getPrefix(team).length() > 16 ? obj.getScoreboardHandler().getPrefix(team).substring(0, 16) : obj.getScoreboardHandler().getPrefix(team);
String name = StringUtils.trimTo(raw, 0, 16);
scoreboardTeam.setPrefix(prefix);
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(raw, 16, 32));
setScore(objective, name, slot);
used.add(raw);
slot++;
}
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-t");
String name = ChatColor.ITALIC + "";
while (used.contains(name)) {
name = ChatColor.ITALIC + name;
}
scoreboardTeam.setPrefix(team.getColor() + "" + ChatColor.ITALIC + StringUtils.trimTo(team.getName(), 0, 12));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 12, 28));
setScore(objective, name, slot);
used.add(name);
slot++;
if (slot < getObjectiveSlots()) {
String blank = getNextBlankSlot(used);
setScore(objective, blank, slot);
used.add(blank);
slot ++;
}
}
if (ScoreModule.matchHasScoring()) {
for (ScoreModule score : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreModule.class)) {
TeamModule team = score.getTeam();
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-s");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, score.getScore());
used.add(name);
}
}
if (ScoreModule.matchHasMax()) {
setScore(objective, ChatColor.RED + "---- MAX ----", ScoreModule.max());
}
if (Blitz.matchIsBlitz()) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver()) {
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-b");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, team.size());
used.add(name);
}
}
}
if (ScoreboardUtils.getHills().size() > 0) {
if (ScoreboardUtils.getHills().size() == getSlots()) {
for (HillObjective obj : ScoreboardUtils.getHills()) {
Team scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
String raw = ChatColor.RESET + WordUtils.capitalizeFully(obj.getName().replaceAll("_", " "));
while (used.contains(raw)) {
raw = ChatColor.RESET + raw;
}
String prefix = obj.getScoreboardHandler().getPrefix(team).length() > 16 ? obj.getScoreboardHandler().getPrefix(team).substring(0, 16) : obj.getScoreboardHandler().getPrefix(team);
String name = StringUtils.trimTo(raw, 0, 16);
scoreboardTeam.setPrefix(prefix);
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(raw, 16, 32));
setScore(objective, name, slot);
used.add(raw);
slot++;
}
} else {
String blank = getNextBlankSlot(used);
setScore(objective, blank, hills);
used.add(blank);
hills --;
for (HillObjective obj : ScoreboardUtils.getHills()) {
Team scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
String raw = ChatColor.RESET + WordUtils.capitalizeFully(obj.getName().replaceAll("_", " "));
while (used.contains(raw)) {
raw = ChatColor.RESET + raw;
}
String prefix = obj.getScoreboardHandler().getPrefix(team).length() > 16 ? obj.getScoreboardHandler().getPrefix(team).substring(0, 16) : obj.getScoreboardHandler().getPrefix(team);
String name = StringUtils.trimTo(raw, 0, 16);
scoreboardTeam.setPrefix(prefix);
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(raw, 16, 32));
setScore(objective, name, hills);
used.add(raw);
hills --;
}
}
}
} else {
if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && team != this.team && TeamUtils.getShownObjectives(team).size() > 0) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(team) + " ";
}
if (scoreboardTeam != null) {
String name = ChatColor.RESET + "";
while (used.contains(name)) {
name = ChatColor.RESET + name;
}
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
setScore(objective, name, slot);
used.add(name);
slot ++;
}
scoreboardTeam = scoreboard.getTeam(team.getId() + "-t");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, slot);
used.add(name);
slot++;
if (slot < getObjectiveSlots()) {
String blank = getNextBlankSlot(used);
setScore(objective, blank, slot);
used.add(blank);
slot ++;
}
}
}
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
Team scoreboardTeam = null;
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
compact += obj.getScoreboardHandler().getPrefix(team) + " ";
}
if (scoreboardTeam != null) {
String name = ChatColor.RESET + "";
while (used.contains(name)) {
name = ChatColor.RESET + name;
}
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
setScore(objective, name, slot);
used.add(name);
slot ++;
}
scoreboardTeam = scoreboard.getTeam(team.getId() + "-t");
String name = ChatColor.ITALIC + "";
while (used.contains(name)) {
name = ChatColor.ITALIC + name;
}
scoreboardTeam.setPrefix(team.getColor() + "" + ChatColor.ITALIC + StringUtils.trimTo(team.getName(), 0, 12));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 12, 28));
setScore(objective, name, slot);
used.add(name);
slot++;
if (slot < getObjectiveSlots()) {
String blank = getNextBlankSlot(used);
setScore(objective, blank, slot);
used.add(blank);
slot ++;
}
}
if (ScoreModule.matchHasScoring()) {
for (ScoreModule score : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreModule.class)) {
TeamModule team = score.getTeam();
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-s");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, score.getScore());
used.add(name);
}
}
if (ScoreModule.matchHasMax()) {
setScore(objective, ChatColor.RED + "---- MAX ----", ScoreModule.max());
}
if (Blitz.matchIsBlitz()) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver()) {
Team scoreboardTeam = scoreboard.getTeam(team.getId() + "-b");
String name = team.getColor() + "";
while (used.contains(name)) {
name = team.getColor() + name;
}
scoreboardTeam.setPrefix(team.getColor() + StringUtils.trimTo(team.getName(), 0, 14));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(team.getName(), 14, 30));
setScore(objective, name, team.size());
used.add(name);
}
}
}
if (ScoreboardUtils.getHills().size() > 0) {
if (ScoreboardUtils.getHills().size() == getSlots()) {
Team scoreboardTeam = null;
for (HillObjective obj : ScoreboardUtils.getHills()) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (HillObjective obj : ScoreboardUtils.getHills()) {
compact += obj.getScoreboardHandler().getPrefix(team) + " ";
}
if (scoreboardTeam != null) {
String name = ChatColor.RESET + "";
while (used.contains(name)) {
name = ChatColor.RESET + name;
}
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
setScore(objective, name, slot);
used.add(name);
}
} else {
String blank = getNextBlankSlot(used);
setScore(objective, blank, hills);
used.add(blank);
hills --;
Team scoreboardTeam = null;
for (HillObjective obj : ScoreboardUtils.getHills()) {
scoreboardTeam = scoreboard.getTeam(obj.getScoreboardHandler().getNumber() + "-o");
break;
}
String compact = "";
for (HillObjective obj : ScoreboardUtils.getHills()) {
compact += obj.getScoreboardHandler().getPrefix(team) + " ";
}
if (scoreboardTeam != null) {
String name = ChatColor.RESET + "";
while (used.contains(name)) {
name = ChatColor.RESET + name;
}
while (compact.length() > 32) {
compact = StringUtils.removeLastWord(compact);
}
scoreboardTeam.setPrefix(StringUtils.trimTo(compact, 0, 16));
scoreboardTeam.add(name);
scoreboardTeam.setSuffix(StringUtils.trimTo(compact, 16, 32));
setScore(objective, name, hills);
used.add(name);
}
}
}
}
}
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
}
public String getNextBlankSlot(List<String> used) {
String blank = " ";
while (used.contains(blank)) {
blank += " ";
}
return blank;
}
public void setScore(Objective objective, String string, int score) {
if (score == 0) {
objective.getScore(string).setScore(1);
}
objective.getScore(string).setScore(score);
}
public int getSlots() {
int slots = 0;
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
slots += 2;
slots += TeamUtils.getShownObjectives(team).size();
}
}
if (ScoreModule.matchHasScoring()) slots += (TeamUtils.getTeams().size() - 1);
if (Blitz.matchIsBlitz()) slots += (TeamUtils.getTeams().size() - 1);
if (ScoreModule.matchHasMax()) slots ++;
if (ScoreboardUtils.getHills().size() > 0) {
if (slots != 0) {
slots ++;
}
slots += ScoreboardUtils.getHills().size();
}
slots --;
return slots;
}
public int getCompactSlots() {
int slots = 0;
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
slots += 2;
if (TeamUtils.getShownObjectives(team).size() > 0) slots ++;
}
}
if (ScoreModule.matchHasScoring()) slots += (TeamUtils.getTeams().size() - 1);
if (Blitz.matchIsBlitz()) slots += (TeamUtils.getTeams().size() - 1);
if (ScoreModule.matchHasMax()) slots ++;
if (ScoreboardUtils.getHills().size() > 0) {
if (slots != 0) {
slots ++;
}
slots ++;
}
slots --;
return slots;
}
public int getObjectiveSlots() {
int slots = 0;
if (getSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
slots += 2;
slots += TeamUtils.getShownObjectives(team).size();
}
}
slots --;
} else if (getCompactSlots() < 16) {
for (TeamModule team : TeamUtils.getTeams()) {
if (!team.isObserver() && TeamUtils.getShownObjectives(team).size() > 0) {
slots += 2;
if (TeamUtils.getShownObjectives(team).size() > 0) slots ++;
}
}
slots --;
}
return slots;
}
public String getDisplayTitle() {
boolean hasObjectives = false;
for (GameObjective obj : GameHandler.getGameHandler().getMatch().getModules().getModules(GameObjective.class)) {
if (obj.showOnScoreboard()) {
hasObjectives = true;
}
}
Class objective = getSpecificObjective();
if (hasObjectives) {
if (objective != null) {
if (objective.equals(WoolObjective.class)) {
return ChatColor.GOLD + "Wools";
} else if (objective.equals(CoreObjective.class)) {
return ChatColor.GOLD + "Cores";
} else if (objective.equals(DestroyableObjective.class)) {
return ChatColor.GOLD + "Monuments";
} else if (objective.equals(HillObjective.class)) {
return ChatColor.GOLD + "Hills";
}
} else {
return ChatColor.GOLD + "Objectives";
}
} else if (GameHandler.getGameHandler().getMatch().getModules().getModule(Blitz.class) != null) {
return ChatColor.GOLD + GameHandler.getGameHandler().getMatch().getModules().getModule(Blitz.class).getTitle();
} else if (ScoreModule.matchHasScoring()) {
return ChatColor.GOLD + "Scores";
}
return ChatColor.RED + "" + ChatColor.BOLD + "Invalid";
}
public Class getSpecificObjective() {
Class objective = null;
boolean checkHills = true;
for (TeamModule team : TeamUtils.getTeams()) {
for (GameObjective obj : TeamUtils.getShownObjectives(team)) {
if (objective == null) {
objective = obj.getClass();
} else if (objective != obj.getClass()) {
objective = null;
checkHills = false;
break;
}
}
}
if (checkHills) {
for (GameObjective obj : ScoreboardUtils.getHills()) {
if (objective == null) {
objective = obj.getClass();
} else if (objective != obj.getClass()) {
objective = null;
}
}
}
return objective;
}
}