package aether.scoreboard; import aether.Aether; import aether.AetherOptions; import aether.scoreboard.cooldown.BoardCooldown; import lombok.Getter; 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.Scoreboard; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Board { @Getter private static Set boards = new HashSet<>(); private final Aether aether; private final AetherOptions options; @Getter private Scoreboard scoreboard; @Getter private Player player; @Getter private Objective objective; @Getter private Set keys; @Getter private List entries; private Set cooldowns; public Board(Player player, Aether aether, AetherOptions options) { this.player = player; this.aether = aether; this.options = options; this.keys = new HashSet<>(); this.entries = new ArrayList<>(); this.cooldowns = new HashSet<>(); setup(); } public static Board getByPlayer(Player player) { for (Board board : boards) { if (board.getPlayer().getName().equals(player.getName())) { return board; } } return null; } private void setup() { if (options.hook() && !player.getScoreboard().equals(Bukkit.getScoreboardManager().getMainScoreboard())) { scoreboard = player.getScoreboard(); } else { scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); } objective = scoreboard.registerNewObjective("glaedr_is_shit", "dummy"); objective.setDisplaySlot(DisplaySlot.SIDEBAR); if (aether.getAdapter() != null) { objective.setDisplayName(ChatColor.translateAlternateColorCodes('&', aether.getAdapter().getTitle(player))); } else { objective.setDisplayName("Default Title"); } boards.add(this); } public String getNewKey(BoardEntry entry) { for (ChatColor color : ChatColor.values()) { String colorText = color + "" + ChatColor.WHITE; if (entry.getText().length() > 16) { String sub = entry.getText().substring(0, 16); colorText = colorText + ChatColor.getLastColors(sub); } if (!keys.contains(colorText)) { keys.add(colorText); return colorText; } } throw new IndexOutOfBoundsException("No more keys available!"); } public List getBoardEntriesFormatted() { List toReturn = new ArrayList<>(); for (BoardEntry entry : new ArrayList<>(entries)) { toReturn.add(entry.getText()); } return toReturn; } public BoardEntry getByPosition(int position) { int i = 0; for (BoardEntry board : entries) { if (i == position) { return board; } i++; } return null; } public BoardCooldown getCooldown(String id) { for (BoardCooldown cooldown : getCooldowns()) { if (cooldown.getId().equals(id)) { return cooldown; } } return null; } public Set getCooldowns() { cooldowns.removeIf(cooldown -> System.currentTimeMillis() >= cooldown.getEnd()); return cooldowns; } }