ProjectAres/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/nick/Identity.java

113 lines
3.0 KiB
Java

package tc.oc.commons.bukkit.nick;
import javax.annotation.Nullable;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import tc.oc.api.docs.PlayerId;
import tc.oc.api.docs.UserId;
/**
* Captures aspects of a player's state that affect how they
* are identified to other players. A player assumes a new
* Identity whenever they change their nickname, or their
* visibility (when we have /vanish). Two Identities are
* equal if and only if they appear to be the same player
* to all possible viewers.
*
* It should never be assumed that an {@link Identity} is the
* player's *current* identity. The value of representing
* identities with a concrete object is that they can be
* stored and displayed even after the player who they belong
* to has assumed a different identity.
*
* An {@link IdentityProvider} is used to create identities,
* or to get the current identity of online players.
*/
public interface Identity {
// Canonical properties
/**
* The ID of the player who used this identity
*/
PlayerId getPlayerId();
/**
* The nickname used for this identity, or null if the player's real name is used
*/
@Nullable String getNickname();
// Derived properties
/**
* The (real) name of the player who used this identity
*/
String getRealName();
String getPublicName();
@Nullable Player getPlayer();
/**
* Does this identity belong to the given sender?
*/
boolean belongsTo(CommandSender sender);
/**
* Is the owner of this identity currently online and using this identity?
*/
boolean isCurrent();
/**
* Does the identity belong to a console?
*/
boolean isConsole();
// Viewer-relative properties
/**
* The name of this identity as seen by the given viewer
*/
String getName(CommandSender viewer);
/**
* The CURRENT online state of this identity as seen by the given viewer
* (NOT the state at the time the identity was created)
*/
boolean isOnline(CommandSender viewer);
@Nullable Player getPlayer(CommandSender viewer);
/**
* The CURRENT living/dead state of this identity as seen by the given viewer
* (NOT the state at the time the identity was created)
*/
boolean isDead(CommandSender viewer);
/**
* Is this identity friends with the given viewer, and the viewer is allowed to know this?
*/
boolean isFriend(CommandSender viewer);
/**
* How is this identity known to the given viewer?
*/
Familiarity familiarity(CommandSender viewer);
/**
* Is this identity disguised for the given viewer?
*/
boolean isDisguised(CommandSender viewer);
/**
* Should the true owner of this identity be revealed to the given viewer?
*/
boolean isRevealed(CommandSender viewer);
boolean belongsTo(UserId userId, CommandSender viewer);
boolean isSamePerson(Identity identity, CommandSender viewer);
}