package tc.oc.pgm.match; import javax.inject.Inject; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import tc.oc.commons.bukkit.chat.ConsoleAudience; import tc.oc.commons.core.chat.AbstractMultiAudience; import tc.oc.commons.core.chat.Audience; import tc.oc.commons.core.chat.MultiAudience; import tc.oc.pgm.filters.Filter; /** * Provides various aggregate {@link Audience}s within a match */ public class MatchAudiences { private final Match match; private final Audience participants; private final Audience observers; private final ImmutableSet<ConsoleAudience> console; @Inject MatchAudiences(Match match, ConsoleAudience console) { this.match = match; this.console = ImmutableSet.of(console); this.participants = new MultiAudience(Iterables.concat(this.console, match.getParticipatingPlayers())); this.observers = new MultiAudience(Iterables.concat(this.console, match.getObservingPlayers())); } public Audience all() { return match; } public Audience participants() { return participants; } public Audience observers() { return observers; } public Audience filter(Filter filter) { return new AbstractMultiAudience() { @Override protected Iterable<? extends Audience> getAudiences() { return Iterables.concat(console, Iterables.filter(match.getPlayers(), player -> !filter.denies(player))); } }; } }