Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.talvorgames.minkizz.utils;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.bukkit.Bukkit;
- import org.bukkit.entity.Player;
- import org.bukkit.scoreboard.DisplaySlot;
- import org.bukkit.scoreboard.Objective;
- import org.bukkit.scoreboard.Score;
- import org.bukkit.scoreboard.Scoreboard;
- import org.bukkit.scoreboard.ScoreboardManager;
- import org.bukkit.scoreboard.Team;
- import com.talvorgames.minkizz.TalvorGames;
- import me.minkizz.aimp.utilities.Placeholders;
- public class Sidebar {
- // The ScoreboardManager allows us to create Scoreboards
- private static ScoreboardManager manager = Bukkit.getScoreboardManager();
- // The Scoreboard from Bukkit API
- private Scoreboard scoreboard;
- // Each Scoreboard has an "objective", so we can set the Scoreboard title,
- // position on screen...
- private Objective objective;
- // List of players that need an update from Scoreboard
- private List<Player> toUpdate = new ArrayList<>();
- // The update task stored in a variable so may cancel it later
- private int taskId;
- private static Map<Player, Sidebar> playerSidebars = new HashMap<>();
- @SuppressWarnings("deprecation")
- public Sidebar(String title, String... lines) {
- scoreboard = manager.getNewScoreboard(); // Create a new Scoreboard
- objective = this.scoreboard.registerNewObjective("test", "dummy"); // Register the Scoreboard objective
- objective.setDisplaySlot(DisplaySlot.SIDEBAR); // Show the Scoreboard on the side of screen
- objective.setDisplayName(title); // Set title of Scoreboard
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(TalvorGames.getInstance(), new Runnable() {
- public void run() {
- for (Player player : toUpdate) {
- Team team = scoreboard.getTeam(player.getName() + "team");
- if (team == null) {
- team = scoreboard.registerNewTeam(player.getName() + "team");
- }
- team.getEntries().forEach(Team::removeEntry);
- for (int i = lines.length; i > 0; i--) {
- // Current line
- String line = lines[(i - 1)];
- // Set the content of the team to the current line
- try {
- line = Placeholders.setPlaceholders(line, player);
- } catch (Exception placeholderApiNotFound) {
- // PlaceholderAPI has not been found on this server
- // We don't use PluginManager#isPluginEnabled because of this reason:
- // - A plugin can have the same name as PlaceholderAPI but not be the
- // PlaceholderAPI that we want to use here
- }
- team.addEntry(line);
- // Get an objective of current line
- Score score = objective.getScore(line);
- // Set the number of the objective which is used to sort the Scoreboard
- score.setScore((lines.length - i) + 1);
- }
- }
- }
- }, 10L, 10L);
- }
- public void showTo(Player player) {
- if (!player.getScoreboard().equals(scoreboard)) {
- player.setScoreboard(scoreboard);
- }
- toUpdate.add(player);
- playerSidebars.put(player, this);
- }
- public void remove() {
- for (Player player : toUpdate) {
- player.setScoreboard(manager.getNewScoreboard());
- }
- toUpdate.clear();
- Bukkit.getScheduler().cancelTask(taskId);
- }
- public void remove(Player player) {
- player.setScoreboard(manager.getNewScoreboard());
- toUpdate.remove(player);
- }
- public static Sidebar getPlayerSidebar(Player player) {
- return playerSidebars.get(player);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement