Solved Scoreboard dissapearing

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

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

    iBecameALoaf

    I recently made a post about a scoreboard flashing, and I resolved it in a way, but now it's coming back again. I decided to redo my code for a buffer. The scoreboard appears for one tick (the rate at which I'm updating the scoreboard), and then disappears. I know this can occur when there are too many scores on the scoreboard, but I don't seem how this could happen with this code.* I've been staring at my code for over an hour, dumbfounded on why it's disappearing.

    *: EDIT: I have just found that the scoreboard is disappearing when not even adding the scores to it... Now I'm really confused.
    My code:
    Code:
    public ArrayList<PlayerScore> toRemove = new ArrayList<PlayerScore>();
        public ArrayList<PlayerScore> toKeep = new ArrayList<PlayerScore>();

    Code:
        public void modifiedScore(Scoreboard board, String string, String prefix, String suffix, Objective objective, int highest, int listDown) {
            PlayerScore current = new PlayerScore(string, prefix, suffix);
            boolean add = true;
     
            for (PlayerScore ps : toRemove) {
     
                if (ps.allValues().equalsIgnoreCase(current.allValues())) {
                    add = false;
                    System.out.println("same");
                    break;
                }
            }
     
            if (add) {
     
                OfflinePlayer op = Bukkit.getOfflinePlayer(string);
     
                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);
     
                team.addPlayer(op);
     
                Score score = objective.getScore(op);
                score.setScore(highest - listDown);
                toRemove.add(current);
                toKeep.add(current);
                System.out.println("adding");
            }
        }
    Code:
        public void updateScores(Player player) {
            Scoreboard board = playerScoreboards.get(player.getName());
     
            Objective obj = board.getObjective("board");
            Objective buffer = board.getObjective("buffer");
     
            updateObjective(buffer, board, player, true);
            buffer.setDisplaySlot(DisplaySlot.SIDEBAR);
     
            swap(obj, buffer);
            updateObjective(buffer, board, player, true);
     
            player.setScoreboard(board);
            playerScoreboards.remove(player.getName());
            playerScoreboards.put(player.getName(), board);
     
        }
     
        public void swap(Objective obj, Objective buffer) {
            Objective t;
     
            t = obj;
            obj = buffer;
            buffer = t;
        }
     
        private void updateObjective(Objective objective, Scoreboard board, Player player, boolean b) {
     
     
            if (b) {
                Iterator<PlayerScore> it = toRemove.iterator();
                while (it.hasNext()) {
                    PlayerScore ps = it.next();
                    for (PlayerScore ps1 : toKeep) {
                        if (!toRemove.contains(ps1)) {
                            board.resetScores(ps.getString());
                            it.remove();
                            System.out.println("removed + " + ps1.allValues() + " + " + ps1.allValues());
                        }
                    }
     
                }
            }
     
            System.out.println(toRemove.size() + ", " + toKeep.size() + " ::::: 2");
     
            toKeep.clear();
         
            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.setDisplayName("§b§lVotes");
     
            System.out.println(toRemove.size() + ", " + toKeep.size() + " ::::: 1");
     
        }


    I have added several debug messages, and this is the output:

    [​IMG]
    (and it continues)

    Help is appreciated. Thanks!

    bump?

    Solved it by creating a list for each objective instead of just one...

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

Share This Page