Minestom/src/main/java/net/minestom/server/adventure/audience/IterableAudienceProvider.java

76 lines
2.5 KiB
Java
Raw Normal View History

package net.minestom.server.adventure.audience;
import com.google.common.collect.Iterables;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.key.Key;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.ConsoleSender;
import net.minestom.server.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
/**
* A provider of iterable audiences.
*/
public final class IterableAudienceProvider implements AudienceProvider<Iterable<? extends Audience>> {
private final Collection<ConsoleSender> console = Collections.singleton(MinecraftServer.getCommandManager().getConsoleSender());
private final AudienceRegistry registry = new AudienceRegistry(new ConcurrentHashMap<>(), CopyOnWriteArrayList::new);
@Override
public @NotNull Iterable<? extends Audience> all() {
return Iterables.concat(this.players(), this.console(), this.custom());
}
@Override
2021-03-26 17:00:50 +01:00
public @NotNull Iterable<? extends Audience> players() {
return MinecraftServer.getConnectionManager().getOnlinePlayers();
}
@Override
2021-03-26 17:00:50 +01:00
public @NotNull Iterable<? extends Audience> players(@NotNull Predicate<Player> filter) {
return MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(filter).collect(Collectors.toList());
}
@Override
public @NotNull Iterable<? extends Audience> console() {
return this.console;
}
@Override
public @NotNull Iterable<? extends Audience> server() {
return Iterables.concat(this.players(), this.console());
}
@Override
public @NotNull Iterable<? extends Audience> custom() {
return this.registry.all();
}
@Override
public @NotNull Iterable<? extends Audience> custom(@NotNull Key key) {
return this.registry.of(key);
}
@Override
public @NotNull Iterable<? extends Audience> custom(@NotNull Predicate<Audience> filter) {
return this.registry.of(filter);
}
@Override
public @NotNull Iterable<? extends Audience> of(@NotNull Predicate<Audience> filter) {
return StreamSupport.stream(this.all().spliterator(), false).filter(filter).collect(Collectors.toList());
}
@Override
public @NotNull AudienceRegistry registry() {
return this.registry;
}
}