package tc.oc.pgm.filters.matcher.player;
import tc.oc.pgm.filters.matcher.TypedFilter;
import tc.oc.pgm.filters.query.IPlayerQuery;
import tc.oc.pgm.match.MatchPlayer;
/**
* Base for filters that apply to *online*, participating players. The base class
* returns DENY if the player is currently offline or observing, and abstains from
* non-player queries.
*
* This should only be inherited by filters that absolutely require an online
* {@link MatchPlayer} to match against. Generally, player filters should not rely
* on the player's current state, and instead use only the properties of the
* {@link IPlayerQuery} itself.
*
*/
public abstract class SpawnedPlayerFilter extends TypedFilter.Impl<IPlayerQuery> {
protected abstract boolean matches(IPlayerQuery query, MatchPlayer player);
@Override
public boolean matches(IPlayerQuery query) {
return query.participant(query.getPlayerId())
.filter(player -> matches(query, player))
.isPresent();
}
}