Still can't figure out this scoreboard thing

Discussion in 'Plugin Development' started by Fiddy_percent, Mar 27, 2014.

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

    Fiddy_percent

    Want it so that a player who goes to jail has a score he needs to get to zero to be freed. But all scores are the same regardless of team or objective name (as i tried to change here) everyone gets the exact same information (updated when the next person goes to jail). I want it so each players scores can be different and I wanted it on the main scoreboard so it stays even if they log out or die unlike the registering a new scoreboard.

    Code:java
    1. public void setJailScoreBoard(Player target, String sentence){
    2. Player p = target;
    3. ScoreboardManager manager = Bukkit.getScoreboardManager();
    4. Scoreboard board = manager.getMainScoreboard();
    5.  
    6. if(board.getTeam(p.getName()) != null){
    7. board.getTeam(p.getName()).unregister();
    8. }
    9.  
    10. Team team = board.registerNewTeam(p.getName());
    11. team.addPlayer(p);
    12. if(team.getScoreboard().getObjective(p.getName()) != null){
    13. Objective objective = team.getScoreboard().getObjective(p.getName());
    14. objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    15. }else{
    16. Objective objective = team.getScoreboard().registerNewObjective(p.getName(), "dummy");
    17. objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    18. }
    19. Score score = team.getScoreboard().getObjective(p.getName()).getScore(Bukkit.getOfflinePlayer(ChatColor.GRAY + "Labor:"));
    20. score.setScore(Integer.parseInt(sentence));
    21. p.setScoreboard(board);
    22.  
    23. }
     
  2. Offline

    Scizzr

    You'll need to make a new scoreboard for each player for this to work properly. Here's something to get you started:
    Code:
    public class JailBoard extends JavaPlugin {
        private static ScoreboardManager manager;
        private static HashMap<String, Scoreboard> boards = new HashMap<String, Scoreboard>();
        private static HashMap<String, Integer> sentences = new HashMap<String, Integer>();
     
        private static final String OBJ_FORMAT = "§a%s";
        private static final String SCORE_NAME = "§bLabor";
        private static final int SCORE_SLOT = 0;
     
        private int ticks = 0;
     
        public void onEnable() {
            manager = Bukkit.getScoreboardManager();
         
            Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
                public void run() {
                    if (ticks % 20 == 0) {
                        for (Player player : Bukkit.getOnlinePlayers()) {
                            String playerName = player.getName();
                            int oldSentence = sentences.containsKey(playerName) ? sentences.get(playerName) : 10;
                            int newSentence = oldSentence > 1 ? (oldSentence - 1) : 10;
                            setJailSentence(player, newSentence);
                        }
                    }
                 
                    ticks++;
                }
            }, 0L, 1L);
        }
     
        public static void setJailSentence(Player player, int sentence) {
            OfflinePlayer offPlayer = Bukkit.getOfflinePlayer(SCORE_NAME);
            String playerName = player.getName();
         
            sentences.put(playerName, sentence);
         
            Scoreboard board = getScoreboard(player);
         
            Objective objective = board.getObjective(playerName);
            if (objective == null) {
                objective = board.registerNewObjective(playerName, "dummy");
                objective.setDisplaySlot(DisplaySlot.SIDEBAR);
                objective.setDisplayName(String.format(OBJ_FORMAT, playerName));
            }
         
            Team team = board.getTeam(offPlayer.getName());
            if (team == null) {
                team = board.registerNewTeam(offPlayer.getName());
                team.addPlayer(offPlayer);
            }
            team.setSuffix(String.format("§r: §e%3d", sentence));
         
            Score score = objective.getScore(offPlayer);
            score.setScore(SCORE_SLOT);
         
            setScoreboard(player, board);
        }
     
        public static Scoreboard getScoreboard(Player player) {
            String playerName = player.getName();
            return boards.containsKey(playerName) ? boards.get(playerName) : manager.getNewScoreboard();
        }
     
        public static void setScoreboard(Player player, Scoreboard board) {
            String playerName = player.getName();
         
            boards.put(playerName, board);
         
            if (player.getScoreboard() != board) {
                player.setScoreboard(board);
            }
        }
    }
    
    Side notes: I did it this way so that you can actually set other things on the board. You'll just need separate methods for that. If you're going to set several things on each player's scoreboard, I'd recommend making a simple library for yourself.
     
  3. Offline

    Fiddy_percent

    Thanks a TON I've been working on this for days XD
     
Thread Status:
Not open for further replies.

Share This Page