Solved Scoreboards help

Discussion in 'Plugin Development' started by viper_monster, Dec 18, 2013.

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

    viper_monster

    Hey there!

    Is it possible to have 2 different scoreboards at the same time. One would be on the right side for player stats and the other one will be used to color players display names.
     
  2. Offline

    sgavster

    spoljo666 Nope. You could switch between them though. (on the same side)
     
    spoljo666 likes this.
  3. Offline

    viper_monster

  4. Offline

    werter318

    I though you were able to make multiple "Objectives" not sure though...
     
  5. Offline

    viper_monster

    @sgavster werter318 This is where I set up my scoreboards:
    PHP:
    public class ScoreboardUtils {
     
        private 
    Main pl;
        private 
    Scoreboard scoreboard;
        private 
    Objective objective;
        private 
    Team recruit;
        private 
    Team soldier;
        private 
    Team sergeant;
        private 
    Team officer;
        private 
    Team colonel;
        private 
    Team staff;
     
        public 
    ScoreboardUtils(Main main) {
            
    pl main;
     
            
    scoreboard Bukkit.getServer().getScoreboardManager().getNewScoreboard();
     
            
    objective scoreboard.registerNewObjective("Stats""dummy");
     
            
    recruit scoreboard.registerNewTeam("Recruit");
            
    soldier scoreboard.registerNewTeam("Soldier");
            
    sergeant scoreboard.registerNewTeam("Sergeant");
            
    officer scoreboard.registerNewTeam("Officer");
            
    colonel scoreboard.registerNewTeam("Colonel");
            
    staff scoreboard.registerNewTeam("Staff");
     
            
    recruit.setPrefix(ChatColor.GRAY.toString());
            
    soldier.setPrefix(ChatColor.YELLOW.toString());
            
    sergeant.setPrefix(ChatColor.GREEN.toString());
            
    officer.setPrefix(ChatColor.AQUA.toString());
            
    colonel.setPrefix(ChatColor.RED.toString());
            
    staff.setPrefix(ChatColor.DARK_RED.toString());
        }
     
        private 
    void addToTeams(Player player) {
            if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Recruit")) {
                
    recruit.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Soldier")) {
                
    soldier.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Sergeant")) {
                
    sergeant.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Officer")) {
                
    officer.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Colonel")) {
                
    colonel.addPlayer(player);
            } else {
                
    staff.addPlayer(player);
            }
        }
     
        public 
    void setStatsScoreboard(Player playerdouble killsdouble deathsdouble killstreak) {
            
    objective.setDisplayName(ChatColor.WHITE player.getName());
            
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
     
            
    Score score_Money objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Money"));
            
    Score score_Kills objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Kills"));
            
    Score score_Deaths objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Deaths"));
            
    Score score_Killstreak objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Killstreak"));
     
            
    score_Money.setScore((int) pl.econ.getBalance(player.getName()));
            
    score_Kills.setScore((int) kills);
            
    score_Deaths.setScore((int) deaths);
            
    score_Killstreak.setScore((int) killstreak);
     
            
    addToTeams(player);
     
            
    player.setScoreboard(scoreboard);
        }
    }
    I'm setting those scoreboards when a player joins the server, but the problem is that every time a new player joins it sets his stats to all online players. Does anyone know how I could fix this? I'm so bad at scoreboards :p

    EDIT: Maybe our dear Scoreboards Master, chasechocolate could help me with this? :p
     
  6. Offline

    felixfritz

    I thought you could display objectives on different slots, like the first one on the sidebar and the other one below the name (must be in the same scoreboard though).
     
  7. Offline

    viper_monster

    felixfritz That is possible, we have cleared that out already. The problem is now in the post above yours.
     
  8. Offline

    felixfritz

    spoljo666 Whoops, sorry, seemed to have skimmed it a little too quick.

    Do you have a list of scoreboard-utils? Because if not, there is only one scoreboard with the exact same objectives. This might be why everyone is seeing the same.
     
  9. Offline

    viper_monster

    felixfritz I have changed ScoreboardUtils to this now:
    PHP:
    public class ScoreboardUtils {
     
        private 
    Main pl;
        private 
    Player player;
        private 
    Scoreboard scoreboard;
        private 
    Objective objective;
        private 
    Team recruit;
        private 
    Team soldier;
        private 
    Team sergeant;
        private 
    Team officer;
        private 
    Team colonel;
        private 
    Team staff;
     
        private 
    int kills;
        private 
    int deaths;
        private 
    int killstreak;
     
        public 
    ScoreboardUtils(Main pluginPlayer playerdouble killsdouble deathsdouble killstreak) {
            
    this.pl plugin;
            
    this.player player;
            
    this.kills = (int) kills;
            
    this.deaths = (int) deaths;
            
    this.killstreak = (int) killstreak;
     
            
    setup();
        }
     
        private 
    void setup() {
            
    scoreboard Bukkit.getServer().getScoreboardManager().getNewScoreboard();
            
    objective scoreboard.registerNewObjective("Stats""dummy");
     
            
    recruit scoreboard.registerNewTeam("Recruit");
            
    soldier scoreboard.registerNewTeam("Soldier");
            
    sergeant scoreboard.registerNewTeam("Sergeant");
            
    officer scoreboard.registerNewTeam("Officer");
            
    colonel scoreboard.registerNewTeam("Colonel");
            
    staff scoreboard.registerNewTeam("Staff");
     
            if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Recruit")) {
                
    recruit.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Soldier")) {
                
    soldier.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Sergeant")) {
                
    sergeant.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Officer")) {
                
    officer.addPlayer(player);
            } else if (
    pl.perm.getPrimaryGroup(player).equalsIgnoreCase("Colonel")) {
                
    colonel.addPlayer(player);
            } else {
                
    staff.addPlayer(player);
            }
        }
     
        public 
    int getKills() {
            return 
    kills;
        }
     
        public 
    int getDeaths() {
            return 
    deaths;
        }
     
        public 
    int getKillstreak() {
            return 
    killstreak;
        }
     
        public 
    Scoreboard toScoreboard() {
     
            
    recruit.setPrefix(ChatColor.GRAY.toString());
            
    soldier.setPrefix(ChatColor.YELLOW.toString());
            
    sergeant.setPrefix(ChatColor.GREEN.toString());
            
    officer.setPrefix(ChatColor.AQUA.toString());
            
    colonel.setPrefix(ChatColor.RED.toString());
            
    staff.setPrefix(ChatColor.DARK_RED.toString());
     
            
    objective.setDisplayName(ChatColor.WHITE player.getName());
            
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
     
            
    Score score_Money objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Money"));
            
    Score score_Kills objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Kills"));
            
    Score score_Deaths objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Deaths"));
            
    Score score_Killstreak objective.getScore(Bukkit.getServer().getOfflinePlayer(ChatColor.GOLD "Killstreak"));
     
            
    score_Money.setScore((int) pl.econ.getBalance(player.getName()));
            
    score_Kills.setScore(kills);
            
    score_Deaths.setScore(deaths);
            
    score_Killstreak.setScore(killstreak);
     
            return 
    scoreboard;
        }
    }
    and this in PlayerJoinEvent:
    PHP:
    Player player e.getPlayer();
    Scoreboard scoreboard = new ScoreboardUtils(plplayerpl.playerUtil.getKills(player.getName()), pl.playerUtil.getDeaths(player.getName()), pl.playerUtil.getKillstreak(player.getName())).toScoreboard();
    player.setScoreboard(scoreboard);
    So I should store that scoreboard in a HashMap with players name and that scoreboard? Then get it from the HashMap and then set it to a player whenever I need it? Is that what you mean?
     
  10. Offline

    felixfritz

    spoljo666
    I think if you save the hashmap with the playername and ScoreboardUtils, you should be fine. And then, as soon as something changes, just get the hashmap and change everything in there.
    Code:java
    1. //oh no, player just died
    2. map.get(event.getPlayer().getName()).addToDeaths(1);
    (and then this in your utils class)
    Code:java
    1. public void addToDeaths(int x) {
    2. deaths += x;
    3. objective.getScore(B[COLOR=#000000]ukkit.getServer().getOfflinePlayer(ChatColor.GOLD + "Deaths")).setScore(deaths);[/COLOR]
    4. }

    I'm not too sure about teams though. Give it a shot and see, if it works.
     
    spoljo666 likes this.
  11. Offline

    viper_monster

    felixfritz Thanks for your help, I have solved it :) (not using Maps :p but somehow different)
     
    felixfritz likes this.
Thread Status:
Not open for further replies.

Share This Page