Scratch at score api

This commit is contained in:
md_5 2013-06-16 11:11:33 +10:00
parent 1881507712
commit 8cf79471e0
7 changed files with 208 additions and 143 deletions

View File

@ -0,0 +1,12 @@
package net.md_5.bungee.api.score;
/**
* Locations for displaying scoreboards to the player.
*/
public enum DisplaySlot
{
BELOW_NAME,
PLAYER_LIST,
SIDEBAR;
}

View File

@ -1,20 +1,49 @@
package net.md_5.bungee.api.score; package net.md_5.bungee.api.score;
import lombok.Data;
/** /**
* Represents an objective entry. * An objective on a scoreboard that can show scores specific to players. This
* objective is only relevant to the {@link Scoreboard} which it is associated
* with.
*/ */
@Data public interface Objective
public class Objective
{ {
/** /**
* Name of the objective. * Gets the name of this objective. It must be unique amongst all objectives
* registered with any one {@link Scoreboard}.
*
* @return the identifying name of this objective
*/ */
private final String name; String getName();
/** /**
* Value of the objective. * Gets the name of this objective as it will be displayed to players.
*
* @return the friendly name of this objective
*/ */
private final String value; // displayName String getDisplayName();
/**
* Sets the name displayed to players for this objective. This must not be
* longer than 32 characters.
*
* @param displayName the friendly name to set
*/
void setDisplayName(String displayName);
/**
* Gets the scoreboard to which this objective is attached.
*
* @return the owning scoreboard
*/
Scoreboard getScoreboard();
/**
* Gets the {@link Score} corresponding to this objective, in the context of
* the specified target, ie: their score.
*
* @param target the target to lookup
* @return the targets score data
*/
Score getScore(String target);
} }

View File

@ -1,10 +0,0 @@
package net.md_5.bungee.api.score;
/**
* Represents locations for a scoreboard to be displayed.
*/
public enum Position
{
LIST, SIDEBAR, BELOW;
}

View File

@ -1,24 +1,43 @@
package net.md_5.bungee.api.score; package net.md_5.bungee.api.score;
import lombok.Data;
/** /**
* Represents a scoreboard score entry. * A score entry for an item and its corresponding {@link Objective}.
*/ */
@Data public interface Score
public class Score
{ {
/** /**
* Name to be displayed in the list. * Gets the name of item being being tracked by this Score
*
* @return this tracked item
*/ */
private final String itemName; // Player String getItem();
/** /**
* Unique name of the score. * Gets the {@link Objective} being tracked by this Score
*
* @return the tracked {@link Objective}
*/ */
private final String scoreName; // Score Objective getObjective();
/** /**
* Value of the score. * Gets the current score
*
* @return the current score
*/ */
private final int value; int getScore();
/**
* Sets the current score.
*
* @param score the new score
*/
void setScore(int score);
/**
* Gets the scoreboard which displays this score.
*
* @return the {@link Scoreboard} which owns this score
*/
Scoreboard getScoreboard();
} }

View File

@ -1,100 +1,26 @@
package net.md_5.bungee.api.score; package net.md_5.bungee.api.score;
import com.google.common.base.Preconditions;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.HashMap;
import java.util.Map;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data public interface Scoreboard
@NoArgsConstructor
public class Scoreboard
{ {
/** String getName();
* Unique name for this scoreboard.
*/
private String name;
/**
* Position of this scoreboard.
*/
private Position position;
/**
* Objectives for this scoreboard.
*/
private final Map<String, Objective> objectives = new HashMap<>();
/**
* Scores for this scoreboard.
*/
private final Map<String, Score> scores = new HashMap<>();
/**
* Teams on this board.
*/
private final Map<String, Team> teams = new HashMap<>();
public Collection<Objective> getObjectives() DisplaySlot getSlot();
{
return Collections.unmodifiableCollection( objectives.values() );
}
public Collection<Score> getScores() Objective getObjective(String name);
{
return Collections.unmodifiableCollection( scores.values() );
}
public Collection<Team> getTeams() Collection<Objective> getObjectives();
{
return Collections.unmodifiableCollection( teams.values() );
}
public void addObjective(Objective objective) Team getTeam(String name);
{
Preconditions.checkNotNull( objective, "objective" );
Preconditions.checkArgument( !objectives.containsKey( objective.getName() ), "Objective %s already exists in this scoreboard", objective.getName() );
objectives.put( objective.getName(), objective );
}
public void addScore(Score score) Team getTeam(ProxiedPlayer player);
{
Preconditions.checkNotNull( score, "score" );
scores.put( score.getItemName(), score );
}
public void addTeam(Team team) Collection<Team> getTeams();
{
Preconditions.checkNotNull( team, "team" );
Preconditions.checkArgument( !teams.containsKey( team.getName() ), "Team %s already exists in this scoreboard", team.getName() );
teams.put( team.getName(), team );
}
public Team getTeam(String name) Collection<Score> getScores(ProxiedPlayer player);
{
return teams.get( name );
}
public void removeObjective(String objectiveName) void remove(ProxiedPlayer player);
{
objectives.remove( objectiveName );
}
public void removeScore(String scoreName)
{
scores.remove( scoreName );
}
public void removeTeam(String teamName)
{
teams.remove( teamName );
}
public void clear()
{
name = null;
position = null;
objectives.clear();
scores.clear();
teams.clear();
}
} }

View File

@ -1,36 +1,125 @@
package net.md_5.bungee.api.score; package net.md_5.bungee.api.score;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.util.HashSet;
import java.util.Set;
import lombok.Data;
import lombok.NonNull;
@Data /**
public class Team * Represents a collection of players on a {@link Scoreboard} with properties.
*/
public interface Team
{ {
@NonNull /**
private final String name; * Gets the name of this team. It must be unique amongst all teams
private String displayName; * registered with any one {@link Scoreboard}.
private String prefix; *
private String suffix; * @return the identifying name of this team
private boolean friendlyFire; */
private Set<String> players = new HashSet<>(); String getName();
public Collection<String> getPlayers() /**
{ * Gets the name of this team as it will be displayed to players.
return Collections.unmodifiableSet( players ); *
} * @return the friendly name of this objective
*/
String getDisplayName();
public void addPlayer(String name) /**
{ * Sets the name displayed to players for this team. This must not be longer
players.add( name ); * than 32 characters.
} *
* @param displayName the friendly name to set
*/
void setDisplayName(String displayName);
public void removePlayer(String name) /**
{ * Gets the prefix which will be prepended to the names of all players on
players.remove( name ); * this team.
} *
* @return this teams prefix
*/
String getPrefix();
/**
* Sets the prefix to be prepended to to the names of all players on this
* team.
*
* @param prefix the prefix to set
*/
void setPrefix(String prefix);
/**
* Sets the suffix appended to the names of all players on this team.
*
* @return this teams suffix
*/
String getSuffix();
/**
* Sets the suffix to be appended to to the names of all players on this
* team.
*
* @param suffix the suffix to set
*/
void setSuffix(String suffix);
/**
* Gets whether members of this team may harm each other.
*
* @return whether or not friendly fire is enabled for this team
*/
boolean friendlyFire();
/**
* Sets whether members of this team may harm each other.
*
* @param enabled whether or not to enable friendly fire
*/
void friendlyFire(boolean enabled);
/**
* Sets whether members of this team can see other members, even when they
* are disguised with a potion of invisibility.
*
* @return whether invisible team members can be seen
*/
boolean friendlyInvisibles();
/**
* Sets whether members of this team can see other members, even when they
* are disguised with a potion of invisibility.
*
* @param enabled whether to enable this attribute or not
*/
void friendlyInvisibles(boolean enabled);
/**
* Gets all players present on this team.
*
* @return the members of this team
*/
Collection<ProxiedPlayer> getPlayers();
/**
* Gets the scoreboard to which this team is attached.
*
* @return the owning scoreboard
*/
Scoreboard getScoreboard();
/**
* Adds a player to this team. This will remove the player from all other
* teams.
*
* @param player the player to add
*/
void addPlayer(ProxiedPlayer player);
/**
* Removes a player from this team.
*
* @param player the player to remove
* @return if this player was successfully removed
*/
boolean removePlayer(ProxiedPlayer player);
} }

View File

@ -16,7 +16,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.event.ServerKickEvent; import net.md_5.bungee.api.event.ServerKickEvent;
import net.md_5.bungee.api.score.Objective; import net.md_5.bungee.api.score.Objective;
import net.md_5.bungee.api.score.Position; import net.md_5.bungee.api.score.DisplaySlot;
import net.md_5.bungee.api.score.Score; import net.md_5.bungee.api.score.Score;
import net.md_5.bungee.api.score.Scoreboard; import net.md_5.bungee.api.score.Scoreboard;
import net.md_5.bungee.api.score.Team; import net.md_5.bungee.api.score.Team;
@ -132,7 +132,7 @@ public class DownstreamBridge extends PacketHandler
{ {
Scoreboard serverScoreboard = con.getServerSentScoreboard(); Scoreboard serverScoreboard = con.getServerSentScoreboard();
serverScoreboard.setName( displayScoreboard.getName() ); serverScoreboard.setName( displayScoreboard.getName() );
serverScoreboard.setPosition( Position.values()[displayScoreboard.getPosition()] ); serverScoreboard.setPosition( DisplaySlot.values()[displayScoreboard.getPosition()] );
} }
@Override @Override