package tc.oc.commons.core.chat; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.inject.Inject; import tc.oc.minecraft.api.command.CommandSender; import tc.oc.minecraft.api.server.LocalServer; public abstract class MinecraftAudiences<T extends CommandSender> implements Audiences<T> { @Inject private LocalServer localServer; @Override public Audience localServer() { return new AbstractMultiAudience() { @Override protected Iterable<? extends Audience> getAudiences() { return Stream.concat(localServer.getOnlinePlayers().stream(), Stream.of(localServer.getConsoleSender())) .map(player -> get((T) player)) .collect(Collectors.toSet()); } }; } @Override public Audience withPermission(String permission) { return new AbstractMultiAudience() { @Override protected Iterable<? extends Audience> getAudiences() { return Stream.concat(localServer.getOnlinePlayers().stream(), Stream.of(localServer.getConsoleSender())) .filter(player -> player.hasPermission(permission)) .map(player -> get((T) player)) .collect(Collectors.toSet()); } }; } }