2021-03-25 13:25:10 +01:00
|
|
|
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.StreamSupport;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A provider of iterable audiences.
|
|
|
|
*/
|
2021-03-26 20:28:07 +01:00
|
|
|
class IterableAudienceProvider implements AudienceProvider<Iterable<? extends Audience>> {
|
|
|
|
|
2021-03-26 21:26:35 +01:00
|
|
|
private final Collection<ConsoleSender> console = Collections.singleton(MinecraftServer.getCommandManager().getConsoleSender());
|
|
|
|
private final AudienceRegistry registry = new AudienceRegistry(new ConcurrentHashMap<>(), CopyOnWriteArrayList::new);
|
|
|
|
|
|
|
|
protected IterableAudienceProvider() {
|
2021-03-26 20:28:07 +01:00
|
|
|
}
|
2021-03-25 13:25:10 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull Iterable<? extends Audience> all() {
|
2021-03-26 18:58:14 +01:00
|
|
|
return Iterables.concat(this.players(), this.console(), this.customs());
|
2021-03-25 13:25:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-03-26 17:00:50 +01:00
|
|
|
public @NotNull Iterable<? extends Audience> players() {
|
2021-03-25 13:25:10 +01:00
|
|
|
return MinecraftServer.getConnectionManager().getOnlinePlayers();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-03-26 17:00:50 +01:00
|
|
|
public @NotNull Iterable<? extends Audience> players(@NotNull Predicate<Player> filter) {
|
2021-11-23 20:27:25 +01:00
|
|
|
return MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(filter).toList();
|
2021-03-25 13:25:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@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
|
2021-03-26 18:58:14 +01:00
|
|
|
public @NotNull Iterable<? extends Audience> customs() {
|
2021-03-25 13:25:10 +01:00
|
|
|
return this.registry.all();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull Iterable<? extends Audience> custom(@NotNull Key key) {
|
|
|
|
return this.registry.of(key);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-03-26 18:58:14 +01:00
|
|
|
public @NotNull Iterable<? extends Audience> custom(@NotNull Key key, Predicate<Audience> filter) {
|
2021-11-23 20:27:25 +01:00
|
|
|
return StreamSupport.stream(this.registry.of(key).spliterator(), false).filter(filter).toList();
|
2021-03-26 18:58:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull Iterable<? extends Audience> customs(@NotNull Predicate<Audience> filter) {
|
2021-03-25 13:25:10 +01:00
|
|
|
return this.registry.of(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2021-03-26 18:58:14 +01:00
|
|
|
public @NotNull Iterable<? extends Audience> all(@NotNull Predicate<Audience> filter) {
|
2021-11-23 20:27:25 +01:00
|
|
|
return StreamSupport.stream(this.all().spliterator(), false).filter(filter).toList();
|
2021-03-25 13:25:10 +01:00
|
|
|
}
|
2021-03-25 15:35:27 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull AudienceRegistry registry() {
|
|
|
|
return this.registry;
|
|
|
|
}
|
2021-03-25 13:25:10 +01:00
|
|
|
}
|