added the scoreboard system
This commit is contained in:
129
src/main/aether/scoreboard/Board.java
Normal file
129
src/main/aether/scoreboard/Board.java
Normal file
@ -0,0 +1,129 @@
|
||||
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<Board> 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<String> keys;
|
||||
@Getter private List<BoardEntry> entries;
|
||||
|
||||
private Set<BoardCooldown> 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<String> getBoardEntriesFormatted() {
|
||||
List<String> 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<BoardCooldown> getCooldowns() {
|
||||
cooldowns.removeIf(cooldown -> System.currentTimeMillis() >= cooldown.getEnd());
|
||||
return cooldowns;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user