package me.maker56.survivalgames.scoreboard;
import java.util.ArrayList;
import java.util.List;
import me.maker56.survivalgames.arena.Arena;
import me.maker56.survivalgames.game.Game;
import me.maker56.survivalgames.game.GameState;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
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;
public class ScoreboardPhase {
private String title;
private List<String> scores = new ArrayList<>();
private Scoreboard scoreboard;
private Objective sidebar;
private List<CustomScore> Sscore;
protected ScoreboardPhase(String title, List<String> scores) {
if(title.length() > 32)
title = title.substring(0, 32);
this.title = ChatColor.translateAlternateColorCodes('&', title);
for(String score : scores) {
String[] split = score.split("//");
if(split[0].length() > 48)
split[0] = split[0].substring(0, 48);
score = split[0] + "//" + split[1];
this.scores.add(ChatColor.translateAlternateColorCodes('&', score));
}
}
@SuppressWarnings("deprecation")
public Scoreboard initScoreboard(Game game) {
scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
sidebar = scoreboard.registerNewObjective("sidebar", "dummy");
sidebar.setDisplaySlot(DisplaySlot.SIDEBAR);
sidebar.setDisplayName(title);
Sscore = new ArrayList<>();
int tName = 0;
for(int i = 0; i < scores.size(); i++) {
String score = scores.get(i);
try {
String[] split = score.split("//");
String name = split[0];
String extra = null;
if(name.contains("%arena%")) {
Arena a = null;
if(game.getState() == GameState.VOTING) {
List<Arena> arenas = game.getVotingPhrase().getArenas();
if(i >= arenas.size()) {
a = arenas.get(arenas.size() - 1);
} else {
a = arenas.get(i);
}
} else {
a = game.getCurrentArena();
}
if(a != null) {
extra = a.getName();
name = name.replace("%arena%", a.getName());
if(name.length() > 48)
name = name.substring(0, 48);
}
}
String regex = split[1];
String scoreName = name;
Team team = null;
if(name.length() > 16) {
team = scoreboard.registerNewTeam(Integer.valueOf(tName).toString());
team.setPrefix(name.substring(0, 16));
if(name.length() > 32) {
scoreName = name.substring(16, 32);
team.setSuffix(name.substring(32));
} else {
scoreName = name.substring(16);
}
tName++;
}
Score s = sidebar.getScore(Bukkit.getOfflinePlayer(scoreName));
if(team != null)
team.addPlayer(s.getPlayer());
s.setScore(-1);
Sscore.add(new CustomScore(s, name, regex, team, extra));
} catch(Exception e) {
e.printStackTrace();
System.err.println("[SurvivalGames] Cannot load Scoreboard phase " + title + " - Mabye this is the reason: " + e.toString());
return null;
}
}
return scoreboard;
}
public List<CustomScore> getScores() {
return Sscore;
}
public Scoreboard getScoreboard() {
return scoreboard;
}
public ScoreboardPhase clone() {
return new ScoreboardPhase(title, scores);
}
}