Scoreboard help

Discussion in 'Plugin Development' started by dsdevil, Apr 26, 2015.

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

    dsdevil

    Hey guys i made a party plugin and it works fine except for my players health doesnt update when they are hit here is my code

    Scoreboard:

    Code:
            public void updateScoreboard() {
                    List<String> second = Arrays.asList(toStringArray(getPartyMembers().toArray()));
                    Iterator<String> players = getPartyMembers().iterator();
                    while(players.hasNext()) {
                            String pn = players.next();
                            if(Bukkit.getPlayer(pn) == null) continue;
                            Player p = Bukkit.getPlayer(pn);
                            Objective o = ScoreboardMechanics.getBoard(p).getObjective(DisplaySlot.SIDEBAR);
                            if(o == null) {
                                    o = ScoreboardMechanics.getBoard(p).registerNewObjective("player_data", "dummy");
                                    o.setDisplayName(ChatColor.RED.toString() + ChatColor.BOLD.toString() + "Party");
                                    o.setDisplaySlot(DisplaySlot.SIDEBAR);
                            }
                            for(String tn : second) {
                                    if(Bukkit.getPlayer(tn) == null) {
                                            ScoreboardMechanics.getBoard(p).resetScores(Bukkit.getOfflinePlayer(tn));
                                            continue;
                                    }
                                    Player t = Bukkit.getPlayer(tn);
                                    String name = getPlayerName(t);
                                    if(name.length() > 16) name = name.substring(0, 16);
                                    o.getScore(Bukkit.getOfflinePlayer(name)).setScore(HealthMechanics.getPlayerHP(t.getName()));
                            }
                    }
            }

    My Healthmechanics.getPlayerHP part of the code
    Code:
    public static int getPlayerHP(String p_name) {
            if(player_health.containsKey(p_name)) { return player_health.get(p_name); }
            // If the data doesn't exist, return default?
            return 50;
    
     
  2. Offline

    meguy26

    @dsdevil
    Please list ALL the places you make a call to updateScoreboard();

    my guess is you just need to make an EntityDamageByEntityEvent and updateScoreboard(); in there, but I am not positive.
     
  3. Offline

    dsdevil

    Code:
       public void addPlayer(Player pl) {
                    if(players.contains(pl)) return;
                    players.add(pl.getName());
                    PartyMechanics.party_map.put(pl.getName(), this);
                    updateScoreboard();
                    if(getPartyMembers().size() == 1) { return; }
                  
                    int party_count = getPartyMembers().size();
                  
                    for(String s : getPartyMembers()) {
                            if(s.equalsIgnoreCase(pl.getName())) {
                                    continue;
                            }
                            if(Bukkit.getPlayer(s) == null) {
                                    continue;
                            }
                            final Player p_mem = Bukkit.getPlayer(s);
                            if(party_count == 4) {
                                    p_mem.sendMessage(ChatColor.GRAY + "You now have " + ChatColor.BOLD + "4/8" + ChatColor.GRAY + " party members. You will now recieve increased drop rates when fighting together.");
                            }
                            if(party_count == 8) {
                                    p_mem.sendMessage(ChatColor.GRAY + "You now have " + ChatColor.BOLD + "8/8" + ChatColor.GRAY + " party members. You will now recieve +5% DMG/ARMOR AND " + ChatColor.UNDERLINE + "GREATLY" + ChatColor.GRAY + " increased drop rates when fighting together.");
                            }
    

    And then there is
    Code:
           public void updateScoreboard() {
                    List<String> second = Arrays.asList(toStringArray(getPartyMembers().toArray()));
                    Iterator<String> players = getPartyMembers().iterator();
                    while(players.hasNext()) {
                            String pn = players.next();
                            if(Bukkit.getPlayer(pn) == null) continue;
                            Player p = Bukkit.getPlayer(pn);
                            Objective o = ScoreboardMechanics.getBoard(p).getObjective(DisplaySlot.SIDEBAR);
                            if(o == null) {
                                    o = ScoreboardMechanics.getBoard(p).registerNewObjective("player_data", "dummy");
                                    o.setDisplayName(ChatColor.RED.toString() + ChatColor.BOLD.toString() + "Party");
                                    o.setDisplaySlot(DisplaySlot.SIDEBAR);
                            }
                            for(String tn : second) {
                                    if(Bukkit.getPlayer(tn) == null) {
                                            ScoreboardMechanics.getBoard(p).resetScores(Bukkit.getOfflinePlayer(tn));
                                            continue;
                                    }
                                    Player t = Bukkit.getPlayer(tn);
                                    String name = getPlayerName(t);
                                    if(name.length() > 16) name = name.substring(0, 16);
                                    o.getScore(Bukkit.getOfflinePlayer(name)).setScore(HealthMechanics.getPlayerHP(t.getName()));
                            }
                    }
            }
    }
    




    And
    Code:
                public void run() {
                    for(String p_name : party_map.keySet()) {
                        if(Bukkit.getPlayer(p_name) == null){
                           party_map.remove(p_name);
                           continue;
                        }
                        if(parties_checked.contains(party_map.get(p_name))) continue;
                        //The party was already updated
                        Party party = party_map.get(p_name);
                        party.updateScoreboard();
                        parties_checked.add(party);
                    }
                    //Clear it for the next go around
                    parties_checked.clear();
                }
            }.runTaskTimer(Main.plugin, 0, 20L); 
            log.info("[PartyMechanics] has been ENABLED.");
        }
    
    those are the only ones @meguy26
     
Thread Status:
Not open for further replies.

Share This Page