Solved Remove OfflinePlayers from a scoreboard team.

Discussion in 'Plugin Development' started by iBecameALoaf, Nov 18, 2014.

Thread Status:
Not open for further replies.
  1. Offline

    iBecameALoaf

    I've been stuck with this same problem for quite a bit now, and I haven't gotten it to work. My problem is with scoreboard teams. I'm trying to get it set up that I have a series of scores, and each score has a different prefix and suffix. In order to do this, I have to make a team for each score. I CAN achieve this, but I am creating a new instance of a scoreboard every time I do this. This causes an extremely annoying flashing. I can kind of fix this by changing the prefix and suffix, but I am unable to change the actual score its self.

    I could either 1- remove the team from the scoreboard, or 2- remove the offline players from the team and add them back after. I have tried making a list of the offline players, and then removing them from the team using
    Code:
    team.removePlayer(OfflinePlayer)
    but it does not remove, even if the team is still displaying the same offline player.
    I am unsure how to do this, if anyone knows and can tell me, I would appreciate it very much. Thank you!

    I do not have the code in which I tried using the list, etc. because I rolled it back to its previous state with the annoying flashing.
     
  2. Offline

    Guccify

    Can you show a bit more of your code, including how "team" is defined?
     
  3. Offline

    iBecameALoaf

    Code:
    Team team = board.registerNewTeam("stats");
    I just looked through the javadocs, and I think I found something that may work, which is:
    Code:
    team.unregister();
    I'm testing it right now.

    Turns out, it's flashing differently now. I have changed the code enough that I can show it to you, to demonstrate the weird flashing. Here's my code of 2 classes:

    Code:
    package com.memecraft.scoreboard;
     
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.ScoreboardManager;
     
    import com.memecraft.main.MemeCraftSG;
     
    public class VotingScoreboard extends CustomScoreboard {
     
        private ScoreboardManager manager = Bukkit.getScoreboardManager();
     
        public void createScoreboard(Player player) {
     
            Scoreboard board = manager.getNewScoreboard();
            Objective objective = board.registerNewObjective("votes", "dummy");
     
            updateObjective(objective, board, player);
     
            player.setScoreboard(board);
            playerScoreboards.remove(player.getName());
            playerScoreboards.put(player.getName(), board);
        }
     
        public void updateScores(Player player) {
     
            Scoreboard board = playerScoreboards.get(player.getName());
     
            clearAllScores(board);
     
            Objective objective = board.getObjective("votes");
            updateObjective(objective, board, player);
     
            player.setScoreboard(board);
            playerScoreboards.remove(player.getName());
            playerScoreboards.put(player.getName(), board);
        }
     
        private void updateObjective(Objective objective, Scoreboard board, Player player) {
     
            int scores = 5;
            int highest = MemeCraftSG.getPluginInst().getHelper().getAvailibleMaps().size() + scores;
     
            modifiedScore(board, " ", "", "", objective, highest, 0);
            modifiedScore(board, "Time Remaining", generateSpaces(5) + "§b", "§7:" + generateSpaces(5), objective, highest, 1);
            modifiedScore(board, "§l" + getCountdownTime(), generateSpaces(5), generateSpaces(5), objective, highest, 2);
            modifiedScore(board, "  ", "", "", objective, highest, 3);
            modifiedScore(board, "§bMaps§7: ", generateSpaces(5), generateSpaces(5), objective, highest, 4);
     
            for (int i = 0; i < MemeCraftSG.getPluginInst().getHelper().getAvailibleMaps().size(); i++) {
                String maps = MemeCraftSG.getPluginInst().getHelper().getAvailibleMaps().get(i);
                String color = "§7";
     
                if (MemeCraftSG.getPluginInst().getHelper().getVotedMap(player.getName()).equalsIgnoreCase(maps))
                    color = "§e";
     
                modifiedScore(board, "§b" + maps, generateSpaces(5) + color + "» ", "§7: " + MemeCraftSG.getPluginInst().getHelper().getTimesVoted(maps) + generateSpaces(5), objective, highest, scores + i);
     
            }
     
            objective.setDisplaySlot(DisplaySlot.SIDEBAR);
            objective.setDisplayName("§b§lVotes");
        }
    }
    
    Code:
    package com.memecraft.scoreboard;
     
    import java.util.HashMap;
     
    import org.bukkit.Bukkit;
    import org.bukkit.OfflinePlayer;
    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.Team;
     
    import com.memecraft.main.MemeCraftSG;
     
    @SuppressWarnings("deprecation")
    public class CustomScoreboard {
     
        public HashMap<String, Scoreboard> playerScoreboards = new HashMap<String, Scoreboard>();
     
        public String generateSpaces(int spaces) {
            String spacesString = "";
            for (int i = 0; i < spaces; i++) {
                spacesString = spacesString + " ";
            }
     
            return spacesString;
        }
     
        public void clearAllScores(Scoreboard board) {
            for (OfflinePlayer player : board.getPlayers()) {
                board.resetScores(player);
            }
        }
     
        public void modifiedScore(Scoreboard board, String string, String prefix, String suffix, Objective objective, int highest, int listDown) {
            Team team = null;
     
            if (board.getTeam("team" + listDown) != null)
                board.getTeam("team" + listDown).unregister();
     
            team = board.registerNewTeam("team" + listDown);
     
            team.setPrefix(prefix);
            team.setSuffix(suffix);
     
            OfflinePlayer op = Bukkit.getOfflinePlayer(string);
     
            team.addPlayer(op);
     
            Score score = objective.getScore(op);
            score.setScore(highest - listDown);
        }
     
        public String getCountdownTime() {
     
            int s = MemeCraftSG.getPluginInst().getCountdown().getCountdown() - 1;
     
            return String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60));
     
        }
     
        public void removeScoreboard(Player player) {
            player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR);
        }
     
    }
    
    I update the scoreboard every second, and it flashes every second.

    Fixed it. Marking as solved.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 13, 2016
Thread Status:
Not open for further replies.

Share This Page