Search in sources :

Example 6 with Objective

use of org.bukkit.scoreboard.Objective in project Denizen-For-Bukkit by DenizenScript.

the class ScoreboardCommand method execute.

@SuppressWarnings("unchecked")
@Override
public void execute(final ScriptEntry scriptEntry) throws CommandExecutionException {
    // Get objects
    List<dPlayer> viewers = (List<dPlayer>) scriptEntry.getObject("viewers");
    dList lines = scriptEntry.hasObject("lines") ? dList.valueOf(scriptEntry.getElement("lines").asString()) : new dList();
    Element action = scriptEntry.getElement("action");
    Element id = scriptEntry.getElement("id");
    Element objective = scriptEntry.getElement("objective");
    Element criteria = scriptEntry.getElement("criteria");
    Element score = scriptEntry.getElement("score");
    Element displaySlot = scriptEntry.getElement("displayslot");
    Action act = Action.valueOf(action.asString().toUpperCase());
    // Report to dB
    dB.report(scriptEntry, getName(), action.debug() + id.debug() + (viewers != null ? aH.debugObj("viewers", viewers.toString()) : "") + (objective != null ? objective.debug() : "") + (act.equals(Action.ADD) && objective != null ? criteria.debug() : "") + (!lines.isEmpty() ? lines.debug() : "") + (act.equals(Action.ADD) && score != null ? score.debug() : "") + (act.equals(Action.ADD) && objective != null ? displaySlot.debug() : ""));
    Scoreboard board = null;
    // Get the main scoreboard by default
    if (id.asString().equalsIgnoreCase("main")) {
        board = ScoreboardHelper.getMain();
    } else {
        // If this scoreboard already exists, get it
        if (ScoreboardHelper.hasScoreboard(id.asString())) {
            board = ScoreboardHelper.getScoreboard(id.asString());
        } else // Else, create a new one if Action is ADD
        if (act.equals(Action.ADD)) {
            board = ScoreboardHelper.createScoreboard(id.asString());
        }
    }
    // Don't progress if we ended up with a null board
    if (board == null) {
        dB.echoError(scriptEntry.getResidingQueue(), "Scoreboard " + id.asString() + " does not exist!");
        return;
    }
    Objective obj = null;
    if (act.equals(Action.ADD)) {
        if (objective != null) {
            // Try getting the objective from the board
            obj = board.getObjective(objective.asString());
            // Create the objective if it does not already exist
            if (obj == null) {
                obj = board.registerNewObjective(objective.asString(), criteria.asString());
            } else // recreate the objective
            if (criteria != null && !obj.getCriteria().equals(criteria.asString())) {
                obj.unregister();
                obj = board.registerNewObjective(objective.asString(), criteria.asString());
            }
            // Change the objective's display slot
            if (!displaySlot.asString().equalsIgnoreCase("none")) {
                obj.setDisplaySlot(DisplaySlot.valueOf(displaySlot.asString().toUpperCase()));
            }
            obj.setDisplayName(objective.asString());
            if (!lines.isEmpty()) {
                // use a score of 0
                if (score == null) {
                    score = new Element(0);
                }
                // for clarifications
                for (String line : lines) {
                    line = line.replaceAll("[pP]@", "");
                    if (line.length() > 48) {
                        line = line.substring(0, 48);
                    }
                    ScoreboardHelper.addScore(obj, getOfflinePlayer(line), score.asInt());
                }
            }
        } else // the command cannot do anything at all, so print a message about that
        if (viewers == null && !lines.isEmpty()) {
            dB.echoDebug(scriptEntry, "Cannot add lines without specifying an objective!");
        }
    } else if (act.equals(Action.REMOVE)) {
        if (objective != null) {
            // Try getting the objective from the board
            obj = board.getObjective(objective.asString());
            if (obj != null) {
                // Remove the entire objective if no lines have been specified
                if (lines.isEmpty()) {
                    dB.echoDebug(scriptEntry, "Removing objective " + obj.getName() + " from scoreboard " + id.asString());
                    obj.unregister();
                } else {
                    for (String line : lines) {
                        line = line.replaceAll("[pP]@", "");
                        ScoreboardHelper.removeScore(obj, getOfflinePlayer(line));
                    }
                }
            } else {
                dB.echoError(scriptEntry.getResidingQueue(), "Objective " + objective.asString() + " does not exist in scoreboard " + id.asString());
            }
        } else // lines from every objective
        if (!lines.isEmpty()) {
            dB.echoDebug(scriptEntry, "Removing lines " + lines.identify() + " from all objectives in scoreboard " + id.asString());
            for (String line : lines) {
                line = line.replaceAll("[pP]@", "");
                ScoreboardHelper.removePlayer(id.asString(), getOfflinePlayer(line));
            }
        } else // of viewers should be removed instead)
        if (viewers == null) {
            dB.echoDebug(scriptEntry, "Removing scoreboard " + id.asString());
            ScoreboardHelper.deleteScoreboard(id.asString());
        }
    }
    if (viewers != null) {
        for (dPlayer viewer : viewers) {
            // Add viewers for this scoreboard
            if (act.equals(Action.ADD)) {
                // to the map of viewers saved by Denizen
                if (!id.asString().equalsIgnoreCase("main")) {
                    ScoreboardHelper.viewerMap.put(viewer.getName(), id.asString());
                }
                // is already online
                if (viewer.isOnline()) {
                    viewer.getPlayerEntity().setScoreboard(board);
                }
            } else // Remove viewers for this scoreboard
            if (act.equals(Action.REMOVE)) {
                // Take this player out of the map of viewers
                ScoreboardHelper.viewerMap.remove(viewer.getName());
                // provided by Bukkit)
                if (viewer.isOnline()) {
                    viewer.getPlayerEntity().setScoreboard(ScoreboardHelper.createScoreboard());
                }
            }
        }
    }
}
Also used : Objective(org.bukkit.scoreboard.Objective) Scoreboard(org.bukkit.scoreboard.Scoreboard) net.aufdemrand.denizen.objects.dPlayer(net.aufdemrand.denizen.objects.dPlayer) net.aufdemrand.denizencore.objects.dList(net.aufdemrand.denizencore.objects.dList) Element(net.aufdemrand.denizencore.objects.Element) List(java.util.List) net.aufdemrand.denizencore.objects.dList(net.aufdemrand.denizencore.objects.dList)

Example 7 with Objective

use of org.bukkit.scoreboard.Objective in project Bukkit by Bukkit.

the class ScoreboardCommand method getCurrentObjectives.

private List<String> getCurrentObjectives() {
    List<String> list = new ArrayList<String>();
    for (Objective objective : Bukkit.getScoreboardManager().getMainScoreboard().getObjectives()) {
        list.add(objective.getName());
    }
    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
    return list;
}
Also used : Objective(org.bukkit.scoreboard.Objective) ArrayList(java.util.ArrayList)

Example 8 with Objective

use of org.bukkit.scoreboard.Objective in project Bukkit by Bukkit.

the class ScoreboardCommand method execute.

@Override
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
    if (!testPermission(sender))
        return true;
    if (args.length < 1 || args[0].length() == 0) {
        sender.sendMessage(ChatColor.RED + "Usage: /scoreboard <objectives|players|teams>");
        return false;
    }
    final Scoreboard mainScoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
    if (args[0].equalsIgnoreCase("objectives")) {
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "Usage: /scoreboard objectives <list|add|remove|setdisplay>");
            return false;
        }
        if (args[1].equalsIgnoreCase("list")) {
            Set<Objective> objectives = mainScoreboard.getObjectives();
            if (objectives.isEmpty()) {
                sender.sendMessage(ChatColor.RED + "There are no objectives on the scoreboard");
                return false;
            }
            sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + objectives.size() + " objective(s) on scoreboard");
            for (Objective objective : objectives) {
                sender.sendMessage("- " + objective.getName() + ": displays as '" + objective.getDisplayName() + "' and is type '" + objective.getCriteria() + "'");
            }
        } else if (args[1].equalsIgnoreCase("add")) {
            if (args.length < 4) {
                sender.sendMessage(ChatColor.RED + "/scoreboard objectives add <name> <criteriaType> [display name ...]");
                return false;
            }
            String name = args[2];
            String criteria = args[3];
            if (criteria == null) {
                sender.sendMessage(ChatColor.RED + "Invalid objective criteria type. Valid types are: " + stringCollectionToString(OBJECTIVES_CRITERIA));
            } else if (name.length() > 16) {
                sender.sendMessage(ChatColor.RED + "The name '" + name + "' is too long for an objective, it can be at most 16 characters long");
            } else if (mainScoreboard.getObjective(name) != null) {
                sender.sendMessage(ChatColor.RED + "An objective with the name '" + name + "' already exists");
            } else {
                String displayName = null;
                if (args.length > 4) {
                    displayName = StringUtils.join(ArrayUtils.subarray(args, 4, args.length), ' ');
                    if (displayName.length() > 32) {
                        sender.sendMessage(ChatColor.RED + "The name '" + displayName + "' is too long for an objective, it can be at most 32 characters long");
                        return false;
                    }
                }
                Objective objective = mainScoreboard.registerNewObjective(name, criteria);
                if (displayName != null && displayName.length() > 0) {
                    objective.setDisplayName(displayName);
                }
                sender.sendMessage("Added new objective '" + name + "' successfully");
            }
        } else if (args[1].equalsIgnoreCase("remove")) {
            if (args.length != 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard objectives remove <name>");
                return false;
            }
            String name = args[2];
            Objective objective = mainScoreboard.getObjective(name);
            if (objective == null) {
                sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + name + "'");
            } else {
                objective.unregister();
                sender.sendMessage("Removed objective '" + name + "' successfully");
            }
        } else if (args[1].equalsIgnoreCase("setdisplay")) {
            if (args.length != 3 && args.length != 4) {
                sender.sendMessage(ChatColor.RED + "/scoreboard objectives setdisplay <slot> [objective]");
                return false;
            }
            String slotName = args[2];
            DisplaySlot slot = OBJECTIVES_DISPLAYSLOT.get(slotName);
            if (slot == null) {
                sender.sendMessage(ChatColor.RED + "No such display slot '" + slotName + "'");
            } else {
                if (args.length == 4) {
                    String objectiveName = args[3];
                    Objective objective = mainScoreboard.getObjective(objectiveName);
                    if (objective == null) {
                        sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + objectiveName + "'");
                        return false;
                    }
                    objective.setDisplaySlot(slot);
                    sender.sendMessage("Set the display objective in slot '" + slotName + "' to '" + objective.getName() + "'");
                } else {
                    Objective objective = mainScoreboard.getObjective(slot);
                    if (objective != null) {
                        objective.setDisplaySlot(null);
                    }
                    sender.sendMessage("Cleared objective display slot '" + slotName + "'");
                }
            }
        }
    } else if (args[0].equalsIgnoreCase("players")) {
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/scoreboard players <set|add|remove|reset|list>");
            return false;
        }
        if (args[1].equalsIgnoreCase("set") || args[1].equalsIgnoreCase("add") || args[1].equalsIgnoreCase("remove")) {
            if (args.length != 5) {
                if (args[1].equalsIgnoreCase("set")) {
                    sender.sendMessage(ChatColor.RED + "/scoreboard players set <player> <objective> <score>");
                } else if (args[1].equalsIgnoreCase("add")) {
                    sender.sendMessage(ChatColor.RED + "/scoreboard players add <player> <objective> <count>");
                } else {
                    sender.sendMessage(ChatColor.RED + "/scoreboard players remove <player> <objective> <count>");
                }
                return false;
            }
            String objectiveName = args[3];
            Objective objective = mainScoreboard.getObjective(objectiveName);
            if (objective == null) {
                sender.sendMessage(ChatColor.RED + "No objective was found by the name '" + objectiveName + "'");
                return false;
            } else if (!objective.isModifiable()) {
                sender.sendMessage(ChatColor.RED + "The objective '" + objectiveName + "' is read-only and cannot be set");
                return false;
            }
            String valueString = args[4];
            int value;
            try {
                value = Integer.parseInt(valueString);
            } catch (NumberFormatException e) {
                sender.sendMessage(ChatColor.RED + "'" + valueString + "' is not a valid number");
                return false;
            }
            if (value < 1 && !args[1].equalsIgnoreCase("set")) {
                sender.sendMessage(ChatColor.RED + "The number you have entered (" + value + ") is too small, it must be at least 1");
                return false;
            }
            String playerName = args[2];
            if (playerName.length() > 16) {
                sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name");
                return false;
            }
            Score score = objective.getScore(playerName);
            int newScore;
            if (args[1].equalsIgnoreCase("set")) {
                newScore = value;
            } else if (args[1].equalsIgnoreCase("add")) {
                newScore = score.getScore() + value;
            } else {
                newScore = score.getScore() - value;
            }
            score.setScore(newScore);
            sender.sendMessage("Set score of " + objectiveName + " for player " + playerName + " to " + newScore);
        } else if (args[1].equalsIgnoreCase("reset")) {
            if (args.length != 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard players reset <player>");
                return false;
            }
            String playerName = args[2];
            if (playerName.length() > 16) {
                sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name");
                return false;
            }
            mainScoreboard.resetScores(playerName);
            sender.sendMessage("Reset all scores of player " + playerName);
        } else if (args[1].equalsIgnoreCase("list")) {
            if (args.length > 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard players list <player>");
                return false;
            }
            if (args.length == 2) {
                Set<String> entries = mainScoreboard.getEntries();
                if (entries.isEmpty()) {
                    sender.sendMessage(ChatColor.RED + "There are no tracked players on the scoreboard");
                } else {
                    sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + entries.size() + " tracked players on the scoreboard");
                    sender.sendMessage(stringCollectionToString(entries));
                }
            } else {
                String playerName = args[2];
                if (playerName.length() > 16) {
                    sender.sendMessage(ChatColor.RED + "'" + playerName + "' is too long for a player name");
                    return false;
                }
                Set<Score> scores = mainScoreboard.getScores(playerName);
                if (scores.isEmpty()) {
                    sender.sendMessage(ChatColor.RED + "Player " + playerName + " has no scores recorded");
                } else {
                    sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + scores.size() + " tracked objective(s) for " + playerName);
                    for (Score score : scores) {
                        sender.sendMessage("- " + score.getObjective().getDisplayName() + ": " + score.getScore() + " (" + score.getObjective().getName() + ")");
                    }
                }
            }
        }
    } else if (args[0].equalsIgnoreCase("teams")) {
        if (args.length == 1) {
            sender.sendMessage(ChatColor.RED + "/scoreboard teams <list|add|remove|empty|join|leave|option>");
            return false;
        }
        if (args[1].equalsIgnoreCase("list")) {
            if (args.length == 2) {
                Set<Team> teams = mainScoreboard.getTeams();
                if (teams.isEmpty()) {
                    sender.sendMessage(ChatColor.RED + "There are no teams registered on the scoreboard");
                } else {
                    sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + teams.size() + " teams on the scoreboard");
                    for (Team team : teams) {
                        sender.sendMessage("- " + team.getName() + ": '" + team.getDisplayName() + "' has " + team.getSize() + " players");
                    }
                }
            } else if (args.length == 3) {
                String teamName = args[2];
                Team team = mainScoreboard.getTeam(teamName);
                if (team == null) {
                    sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'");
                } else {
                    Set<OfflinePlayer> players = team.getPlayers();
                    if (players.isEmpty()) {
                        sender.sendMessage(ChatColor.RED + "Team " + team.getName() + " has no players");
                    } else {
                        sender.sendMessage(ChatColor.DARK_GREEN + "Showing " + players.size() + " player(s) in team " + team.getName());
                        sender.sendMessage(offlinePlayerSetToString(players));
                    }
                }
            } else {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams list [name]");
                return false;
            }
        } else if (args[1].equalsIgnoreCase("add")) {
            if (args.length < 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams add <name> [display name ...]");
                return false;
            }
            String name = args[2];
            if (name.length() > 16) {
                sender.sendMessage(ChatColor.RED + "The name '" + name + "' is too long for a team, it can be at most 16 characters long");
            } else if (mainScoreboard.getTeam(name) != null) {
                sender.sendMessage(ChatColor.RED + "A team with the name '" + name + "' already exists");
            } else {
                String displayName = null;
                if (args.length > 3) {
                    displayName = StringUtils.join(ArrayUtils.subarray(args, 3, args.length), ' ');
                    if (displayName.length() > 32) {
                        sender.sendMessage(ChatColor.RED + "The display name '" + displayName + "' is too long for a team, it can be at most 32 characters long");
                        return false;
                    }
                }
                Team team = mainScoreboard.registerNewTeam(name);
                if (displayName != null && displayName.length() > 0) {
                    team.setDisplayName(displayName);
                }
                sender.sendMessage("Added new team '" + team.getName() + "' successfully");
            }
        } else if (args[1].equalsIgnoreCase("remove")) {
            if (args.length != 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams remove <name>");
                return false;
            }
            String name = args[2];
            Team team = mainScoreboard.getTeam(name);
            if (team == null) {
                sender.sendMessage(ChatColor.RED + "No team was found by the name '" + name + "'");
            } else {
                team.unregister();
                sender.sendMessage("Removed team " + name);
            }
        } else if (args[1].equalsIgnoreCase("empty")) {
            if (args.length != 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams clear <name>");
                return false;
            }
            String name = args[2];
            Team team = mainScoreboard.getTeam(name);
            if (team == null) {
                sender.sendMessage(ChatColor.RED + "No team was found by the name '" + name + "'");
            } else {
                Set<OfflinePlayer> players = team.getPlayers();
                if (players.isEmpty()) {
                    sender.sendMessage(ChatColor.RED + "Team " + team.getName() + " is already empty, cannot remove nonexistant players");
                } else {
                    for (OfflinePlayer player : players) {
                        team.removePlayer(player);
                    }
                    sender.sendMessage("Removed all " + players.size() + " player(s) from team " + team.getName());
                }
            }
        } else if (args[1].equalsIgnoreCase("join")) {
            if ((sender instanceof Player) ? args.length < 3 : args.length < 4) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams join <team> [player...]");
                return false;
            }
            String teamName = args[2];
            Team team = mainScoreboard.getTeam(teamName);
            if (team == null) {
                sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'");
            } else {
                Set<String> addedPlayers = new HashSet<String>();
                if ((sender instanceof Player) && args.length == 3) {
                    team.addPlayer((Player) sender);
                    addedPlayers.add(sender.getName());
                } else {
                    for (int i = 3; i < args.length; i++) {
                        String playerName = args[i];
                        OfflinePlayer offlinePlayer;
                        Player player = Bukkit.getPlayerExact(playerName);
                        if (player != null) {
                            offlinePlayer = player;
                        } else {
                            offlinePlayer = Bukkit.getOfflinePlayer(playerName);
                        }
                        team.addPlayer(offlinePlayer);
                        addedPlayers.add(offlinePlayer.getName());
                    }
                }
                sender.sendMessage("Added " + addedPlayers.size() + " player(s) to team " + team.getName() + ": " + stringCollectionToString(addedPlayers));
            }
        } else if (args[1].equalsIgnoreCase("leave")) {
            if (!(sender instanceof Player) && args.length < 3) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams leave [player...]");
                return false;
            }
            Set<String> left = new HashSet<String>();
            Set<String> noTeam = new HashSet<String>();
            if ((sender instanceof Player) && args.length == 2) {
                Team team = mainScoreboard.getPlayerTeam((Player) sender);
                if (team != null) {
                    team.removePlayer((Player) sender);
                    left.add(sender.getName());
                } else {
                    noTeam.add(sender.getName());
                }
            } else {
                for (int i = 2; i < args.length; i++) {
                    String playerName = args[i];
                    OfflinePlayer offlinePlayer;
                    Player player = Bukkit.getPlayerExact(playerName);
                    if (player != null) {
                        offlinePlayer = player;
                    } else {
                        offlinePlayer = Bukkit.getOfflinePlayer(playerName);
                    }
                    Team team = mainScoreboard.getPlayerTeam(offlinePlayer);
                    if (team != null) {
                        team.removePlayer(offlinePlayer);
                        left.add(offlinePlayer.getName());
                    } else {
                        noTeam.add(offlinePlayer.getName());
                    }
                }
            }
            if (!left.isEmpty()) {
                sender.sendMessage("Removed " + left.size() + " player(s) from their teams: " + stringCollectionToString(left));
            }
            if (!noTeam.isEmpty()) {
                sender.sendMessage("Could not remove " + noTeam.size() + " player(s) from their teams: " + stringCollectionToString(noTeam));
            }
        } else if (args[1].equalsIgnoreCase("option")) {
            if (args.length != 4 && args.length != 5) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams option <team> <friendlyfire|color|seefriendlyinvisibles> <value>");
                return false;
            }
            String teamName = args[2];
            Team team = mainScoreboard.getTeam(teamName);
            if (team == null) {
                sender.sendMessage(ChatColor.RED + "No team was found by the name '" + teamName + "'");
                return false;
            }
            String option = args[3].toLowerCase();
            if (!option.equals("friendlyfire") && !option.equals("color") && !option.equals("seefriendlyinvisibles")) {
                sender.sendMessage(ChatColor.RED + "/scoreboard teams option <team> <friendlyfire|color|seefriendlyinvisibles> <value>");
                return false;
            }
            if (args.length == 4) {
                if (option.equals("color")) {
                    sender.sendMessage(ChatColor.RED + "Valid values for option color are: " + stringCollectionToString(TEAMS_OPTION_COLOR.keySet()));
                } else {
                    sender.sendMessage(ChatColor.RED + "Valid values for option " + option + " are: true and false");
                }
            } else {
                String value = args[4].toLowerCase();
                if (option.equals("color")) {
                    ChatColor color = TEAMS_OPTION_COLOR.get(value);
                    if (color == null) {
                        sender.sendMessage(ChatColor.RED + "Valid values for option color are: " + stringCollectionToString(TEAMS_OPTION_COLOR.keySet()));
                        return false;
                    }
                    team.setPrefix(color.toString());
                    team.setSuffix(ChatColor.RESET.toString());
                } else {
                    if (!value.equals("true") && !value.equals("false")) {
                        sender.sendMessage(ChatColor.RED + "Valid values for option " + option + " are: true and false");
                        return false;
                    }
                    if (option.equals("friendlyfire")) {
                        team.setAllowFriendlyFire(value.equals("true"));
                    } else {
                        team.setCanSeeFriendlyInvisibles(value.equals("true"));
                    }
                }
                sender.sendMessage("Set option " + option + " for team " + team.getName() + " to " + value);
            }
        }
    } else {
        sender.sendMessage(ChatColor.RED + "Usage: /scoreboard <objectives|players|teams>");
        return false;
    }
    return true;
}
Also used : Player(org.bukkit.entity.Player) OfflinePlayer(org.bukkit.OfflinePlayer) Set(java.util.Set) HashSet(java.util.HashSet) Objective(org.bukkit.scoreboard.Objective) Score(org.bukkit.scoreboard.Score) Scoreboard(org.bukkit.scoreboard.Scoreboard) DisplaySlot(org.bukkit.scoreboard.DisplaySlot) OfflinePlayer(org.bukkit.OfflinePlayer) Team(org.bukkit.scoreboard.Team) ChatColor(org.bukkit.ChatColor) HashSet(java.util.HashSet)

Example 9 with Objective

use of org.bukkit.scoreboard.Objective in project GameCore by Warvale.

the class LobbyScoreboard method addScoreboard.

public void addScoreboard(Player player, String display) {
    Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard();
    Objective objective = scoreboard.registerNewObjective("lobby", "dummy");
    objective.setDisplayName(ChatColor.DARK_GRAY + "» " + display + ChatColor.DARK_GRAY + " «");
    objective.setDisplaySlot(DisplaySlot.SIDEBAR);
    Team time = scoreboard.registerNewTeam("LobbyTime");
    time.addEntry("§8» §cTime:");
    time.setSuffix(" §7");
    Team lobbyCount = scoreboard.registerNewTeam("LobbyCount");
    lobbyCount.addEntry("§8» §cPlayers:");
    lobbyCount.setSuffix(" §7");
    scoreboards.put(player.getUniqueId(), scoreboard);
}
Also used : Objective(org.bukkit.scoreboard.Objective) Scoreboard(org.bukkit.scoreboard.Scoreboard) Team(org.bukkit.scoreboard.Team)

Example 10 with Objective

use of org.bukkit.scoreboard.Objective in project Glowstone by GlowstoneMC.

the class GlowLivingEntity method setHealth.

@Override
public void setHealth(double health) {
    if (health < 0)
        health = 0;
    if (health > getMaxHealth())
        health = getMaxHealth();
    this.health = health;
    metadata.set(MetadataIndex.HEALTH, (float) health);
    for (Objective objective : getServer().getScoreboardManager().getMainScoreboard().getObjectivesByCriteria(Criterias.HEALTH)) {
        objective.getScore(getName()).setScore((int) health);
    }
    if (health <= 0) {
        active = false;
        Sound deathSound = getDeathSound();
        if (deathSound != null && !isSilent()) {
            world.playSound(location, deathSound, getSoundVolume(), getSoundPitch());
        }
        playEffect(EntityEffect.DEATH);
        if (this instanceof GlowPlayer) {
            GlowPlayer player = (GlowPlayer) this;
            ItemStack mainHand = player.getInventory().getItemInMainHand();
            ItemStack offHand = player.getInventory().getItemInOffHand();
            if (!InventoryUtil.isEmpty(mainHand) && mainHand.getType() == Material.TOTEM) {
                player.getInventory().setItemInMainHand(InventoryUtil.createEmptyStack());
                player.setHealth(1.0);
                active = true;
                return;
            } else if (!InventoryUtil.isEmpty(offHand) && offHand.getType() == Material.TOTEM) {
                player.getInventory().setItemInOffHand(InventoryUtil.createEmptyStack());
                player.setHealth(1.0);
                active = true;
                return;
            }
            List<ItemStack> items = new ArrayList<>();
            if (!world.getGameRuleMap().getBoolean("keepInventory")) {
                items = Arrays.stream(player.getInventory().getContents()).filter(stack -> !InventoryUtil.isEmpty(stack)).collect(Collectors.toList());
                player.getInventory().clear();
            }
            PlayerDeathEvent event = new PlayerDeathEvent(player, items, 0, player.getDisplayName() + " died.");
            EventFactory.callEvent(event);
            server.broadcastMessage(event.getDeathMessage());
            for (ItemStack item : items) {
                world.dropItemNaturally(getLocation(), item);
            }
            player.incrementStatistic(Statistic.DEATHS);
        } else {
            EntityDeathEvent deathEvent = new EntityDeathEvent(this, new ArrayList<>());
            if (world.getGameRuleMap().getBoolean("doMobLoot")) {
                LootData data = LootingManager.generate(this);
                Collections.addAll(deathEvent.getDrops(), data.getItems());
            // todo: drop experience
            }
            deathEvent = EventFactory.callEvent(deathEvent);
            for (ItemStack item : deathEvent.getDrops()) {
                world.dropItemNaturally(getLocation(), item);
            }
        }
    }
}
Also used : Objective(org.bukkit.scoreboard.Objective) LootData(net.glowstone.util.loot.LootData) ItemStack(org.bukkit.inventory.ItemStack)

Aggregations

Objective (org.bukkit.scoreboard.Objective)11 Team (org.bukkit.scoreboard.Team)5 Scoreboard (org.bukkit.scoreboard.Scoreboard)4 Player (org.bukkit.entity.Player)3 ArrayList (java.util.ArrayList)2 Format (java.text.Format)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 net.aufdemrand.denizen.objects.dPlayer (net.aufdemrand.denizen.objects.dPlayer)1 Element (net.aufdemrand.denizencore.objects.Element)1 net.aufdemrand.denizencore.objects.dList (net.aufdemrand.denizencore.objects.dList)1 LootData (net.glowstone.util.loot.LootData)1 CompoundTag (net.glowstone.util.nbt.CompoundTag)1 ChatColor (org.bukkit.ChatColor)1 OfflinePlayer (org.bukkit.OfflinePlayer)1 ItemStack (org.bukkit.inventory.ItemStack)1 DisplaySlot (org.bukkit.scoreboard.DisplaySlot)1