package tc.oc.commons.bukkit.chat; import org.bukkit.command.CommandSender; import tc.oc.commons.bukkit.nick.Identity; import java.util.Objects; import static com.google.common.base.Preconditions.checkNotNull; /** * These are the parameters that determine how a player's name is * rendered for a specific viewer, in a specific context. * This is used as a cache key, so if a name changes appearance * without any of these parameters changing, the cache must be * invalidated by calling {@link CachingNameRenderer#invalidateCache}. */ public class NameType { public final NameStyle style; public final boolean online; // Player is online public final boolean reveal; // Player's true identity is visible public final boolean self; // Player is viewing their own name public final boolean friend; // Player is a friend (of the viewer) public final boolean dead; // Player is dead public NameType(NameStyle style, boolean online, boolean reveal, boolean self, boolean friend, boolean dead) { this.style = checkNotNull(style); this.online = online; this.reveal = reveal; this.self = self; this.friend = friend; this.dead = dead; } public NameType(NameStyle style, Identity identity, CommandSender viewer) { this(style, identity.isOnline(viewer), identity.isRevealed(viewer), identity.belongsTo(viewer), identity.isFriend(viewer), identity.isDead(viewer)); } @Override public boolean equals(Object o) { if(this == o) return true; if(!(o instanceof NameType)) return false; NameType other = (NameType) o; return Objects.equals(style, other.style) && online == other.online && reveal == other.reveal && self == other.self && friend == other.friend && dead == other.dead; } @Override public int hashCode() { return Objects.hash(style, online, reveal, self, friend, dead); } }