001    package org.bukkit.scoreboard;
002    
003    import java.util.Set;
004    
005    import org.bukkit.OfflinePlayer;
006    import org.bukkit.potion.PotionEffectType;
007    
008    /**
009     * A team on a scoreboard that has a common display theme and other
010     * properties. This team is only relevant to the display of the associated
011     * {@link #getScoreboard() scoreboard}.
012     */
013    public interface Team {
014    
015        /**
016         * Gets the name of this Team
017         *
018         * @return Objective name
019         * @throws IllegalStateException if this team has been unregistered
020         */
021        String getName() throws IllegalStateException;
022    
023        /**
024         * Gets the name displayed to players for this team
025         *
026         * @return Team display name
027         * @throws IllegalStateException if this team has been unregistered
028         */
029        String getDisplayName() throws IllegalStateException;
030    
031        /**
032         * Sets the name displayed to players for this team
033         *
034         * @param displayName New display name
035         * @throws IllegalArgumentException if displayName is longer than 32
036         *     characters.
037         * @throws IllegalStateException if this team has been unregistered
038         */
039        void setDisplayName(String displayName) throws IllegalStateException, IllegalArgumentException;
040    
041        /**
042         * Gets the prefix prepended to the display of players on this team.
043         *
044         * @return Team prefix
045         * @throws IllegalStateException if this team has been unregistered
046         */
047        String getPrefix() throws IllegalStateException;
048    
049        /**
050         * Sets the prefix prepended to the display of players on this team.
051         *
052         * @param prefix New prefix
053         * @throws IllegalArgumentException if prefix is null
054         * @throws IllegalArgumentException if prefix is longer than 16
055         *     characters
056         * @throws IllegalStateException if this team has been unregistered
057         */
058        void setPrefix(String prefix) throws IllegalStateException, IllegalArgumentException;
059    
060        /**
061         * Gets the suffix appended to the display of players on this team.
062         *
063         * @return the team's current suffix
064         * @throws IllegalStateException if this team has been unregistered
065         */
066        String getSuffix() throws IllegalStateException;
067    
068        /**
069         * Sets the suffix appended to the display of players on this team.
070         *
071         * @param suffix the new suffix for this team.
072         * @throws IllegalArgumentException if suffix is null
073         * @throws IllegalArgumentException if suffix is longer than 16
074         *     characters
075         * @throws IllegalStateException if this team has been unregistered
076         */
077        void setSuffix(String suffix) throws IllegalStateException, IllegalArgumentException;
078    
079        /**
080         * Gets the team friendly fire state
081         *
082         * @return true if friendly fire is enabled
083         * @throws IllegalStateException if this team has been unregistered
084         */
085        boolean allowFriendlyFire() throws IllegalStateException;
086    
087        /**
088         * Sets the team friendly fire state
089         *
090         * @param enabled true if friendly fire is to be allowed
091         * @throws IllegalStateException if this team has been unregistered
092         */
093        void setAllowFriendlyFire(boolean enabled) throws IllegalStateException;
094    
095        /**
096         * Gets the team's ability to see {@link PotionEffectType#INVISIBILITY
097         * invisible} teammates.
098         *
099         * @return true if team members can see invisible members
100         * @throws IllegalStateException if this team has been unregistered
101         */
102        boolean canSeeFriendlyInvisibles() throws IllegalStateException;
103    
104        /**
105         * Sets the team's ability to see {@link PotionEffectType#INVISIBILITY
106         * invisible} teammates.
107         *
108         * @param enabled true if invisible teammates are to be visible
109         * @throws IllegalStateException if this team has been unregistered
110         */
111        void setCanSeeFriendlyInvisibles(boolean enabled) throws IllegalStateException;
112    
113        /**
114         * Gets the Set of players on the team
115         *
116         * @return players on the team
117         * @throws IllegalStateException if this team has been unregistered
118         */
119        Set<OfflinePlayer> getPlayers() throws IllegalStateException;
120    
121        /**
122         * Gets the size of the team
123         *
124         * @return number of players on the team
125         * @throws IllegalStateException if this team has been unregistered
126         */
127        int getSize() throws IllegalStateException;
128    
129        /**
130         * Gets the Scoreboard to which this team is attached
131         *
132         * @return Owning scoreboard, or null if this team has been {@link
133         *     #unregister() unregistered}
134         */
135        Scoreboard getScoreboard();
136    
137        /**
138         * This puts the specified player onto this team for the scoreboard.
139         * <p>
140         * This will remove the player from any other team on the scoreboard.
141         *
142         * @param player the player to add
143         * @throws IllegalArgumentException if player is null
144         * @throws IllegalStateException if this team has been unregistered
145         */
146        void addPlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException;
147    
148        /**
149         * Removes the player from this team.
150         *
151         * @param player the player to remove
152         * @return if the player was on this team
153         * @throws IllegalArgumentException if player is null
154         * @throws IllegalStateException if this team has been unregistered
155         */
156        boolean removePlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException;
157    
158        /**
159         * Unregisters this team from the Scoreboard
160         *
161         * @throws IllegalStateException if this team has been unregistered
162         */
163        void unregister() throws IllegalStateException;
164    
165        /**
166         * Checks to see if the specified player is a member of this team.
167         *
168         * @param player the player to search for
169         * @return true if the player is a member of this team
170         * @throws IllegalArgumentException if player is null
171         * @throws IllegalStateException if this team has been unregistered
172         */
173        boolean hasPlayer(OfflinePlayer player) throws IllegalArgumentException, IllegalStateException;
174    }