mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-20 07:02:32 +01:00
chore: revert (mostly) ConnectionManager#getOnlinePlayers change
(cherry picked from commit 8859af87ba
)
This commit is contained in:
parent
d72e56b4be
commit
c9ee2b56b2
@ -19,17 +19,14 @@ public class PlayersCommand extends Command {
|
||||
}
|
||||
|
||||
private void usage(CommandSender sender, CommandContext context) {
|
||||
final var players = List.copyOf(MinecraftServer.getConnectionManager().getPlayers());
|
||||
final var players = List.copyOf(MinecraftServer.getConnectionManager().getOnlinePlayers());
|
||||
final int playerCount = players.size();
|
||||
sender.sendMessage(Component.text("Total players: " + playerCount));
|
||||
|
||||
final int limit = 15;
|
||||
for (int i = 0; i < Math.min(limit, playerCount); i++) {
|
||||
final var player = players.get(i);
|
||||
var msg = Component.text(player.getUsername());
|
||||
if (player.getPlayerConnection().getServerState() == ConnectionState.CONFIGURATION)
|
||||
msg = msg.append(Component.text(" (config)"));
|
||||
sender.sendMessage(msg);
|
||||
sender.sendMessage(Component.text(player.getUsername()));
|
||||
}
|
||||
|
||||
if (playerCount > limit) sender.sendMessage(Component.text("..."));
|
||||
|
@ -26,7 +26,7 @@ public class TeleportCommand extends Command {
|
||||
|
||||
private void onPlayerTeleport(CommandSender sender, CommandContext context) {
|
||||
final String playerName = context.get("player");
|
||||
Player pl = MinecraftServer.getConnectionManager().getPlayer(playerName);
|
||||
Player pl = MinecraftServer.getConnectionManager().getOnlinePlayerByUsername(playerName);
|
||||
if (sender instanceof Player player) {
|
||||
player.teleport(pl.getPosition());
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ import net.kyori.adventure.key.Key;
|
||||
import net.kyori.adventure.key.Keyed;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.ConnectionState;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
@ -42,7 +41,7 @@ public class Audiences {
|
||||
* @return all audience members
|
||||
*/
|
||||
public static @NotNull Audience all() {
|
||||
return Audience.audience(audience.server(), audience.customs());
|
||||
return Audience.audience(audience.server, audience.customs());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -51,7 +50,7 @@ public class Audiences {
|
||||
* @return all players
|
||||
*/
|
||||
public static @NotNull Audience players() {
|
||||
return audience.players();
|
||||
return audience.players;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,8 +60,7 @@ public class Audiences {
|
||||
* @return all players matching the predicate
|
||||
*/
|
||||
public static @NotNull Audience players(@NotNull Predicate<Player> filter) {
|
||||
return PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY)
|
||||
.stream().filter(filter).toList());
|
||||
return PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(filter).toList());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,7 +78,7 @@ public class Audiences {
|
||||
* @return the audience of all players and the console
|
||||
*/
|
||||
public static @NotNull Audience server() {
|
||||
return audience.server();
|
||||
return audience.server;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -5,7 +5,6 @@ import net.kyori.adventure.key.Key;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.command.ConsoleSender;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.ConnectionState;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -36,12 +35,12 @@ class IterableAudienceProvider implements AudienceProvider<Iterable<? extends Au
|
||||
|
||||
@Override
|
||||
public @NotNull Iterable<? extends Audience> players() {
|
||||
return MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY);
|
||||
return MinecraftServer.getConnectionManager().getOnlinePlayers();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Iterable<? extends Audience> players(@NotNull Predicate<Player> filter) {
|
||||
return MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY).stream().filter(filter).toList();
|
||||
return MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(filter).toList();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,7 +4,6 @@ import net.kyori.adventure.audience.Audience;
|
||||
import net.kyori.adventure.key.Key;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.network.ConnectionState;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
@ -16,6 +15,8 @@ import java.util.function.Predicate;
|
||||
class SingleAudienceProvider implements AudienceProvider<Audience> {
|
||||
|
||||
protected final IterableAudienceProvider collection = new IterableAudienceProvider();
|
||||
protected final Audience players = PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getOnlinePlayers());
|
||||
protected final Audience server = Audience.audience(this.players, MinecraftServer.getCommandManager().getConsoleSender());
|
||||
|
||||
protected SingleAudienceProvider() {
|
||||
}
|
||||
@ -31,18 +32,17 @@ class SingleAudienceProvider implements AudienceProvider<Audience> {
|
||||
|
||||
@Override
|
||||
public @NotNull Audience all() {
|
||||
return Audience.audience(this.server(), this.customs());
|
||||
return Audience.audience(this.server, this.customs());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Audience players() {
|
||||
return PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY));
|
||||
return this.players;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Audience players(@NotNull Predicate<Player> filter) {
|
||||
return PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY)
|
||||
.stream().filter(filter).toList());
|
||||
return PacketGroupingAudience.of(MinecraftServer.getConnectionManager().getOnlinePlayers().stream().filter(filter).toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -52,7 +52,7 @@ class SingleAudienceProvider implements AudienceProvider<Audience> {
|
||||
|
||||
@Override
|
||||
public @NotNull Audience server() {
|
||||
return Audience.audience(players(), MinecraftServer.getCommandManager().getConsoleSender());
|
||||
return this.server;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -302,7 +302,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
|
||||
PacketUtils.broadcastPlayPacket(getAddPlayerToList());
|
||||
|
||||
var connectionManager = MinecraftServer.getConnectionManager();
|
||||
for (var player : connectionManager.getPlayers(ConnectionState.PLAY)) {
|
||||
for (var player : connectionManager.getOnlinePlayers()) {
|
||||
if (player != this) {
|
||||
sendPacket(player.getAddPlayerToList());
|
||||
if (player.displayName != null) {
|
||||
|
@ -34,7 +34,7 @@ public class FullQueryResponse implements Writeable {
|
||||
this.kv.put(key.getKey(), key.getValue());
|
||||
}
|
||||
|
||||
this.players = MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY)
|
||||
this.players = MinecraftServer.getConnectionManager().getOnlinePlayers()
|
||||
.stream()
|
||||
.map(player -> PLAIN.serialize(player.getName()))
|
||||
.toList();
|
||||
|
@ -39,7 +39,7 @@ public class ChatMessageListener {
|
||||
return;
|
||||
}
|
||||
|
||||
final Collection<Player> players = CONNECTION_MANAGER.getPlayers(ConnectionState.PLAY);
|
||||
final Collection<Player> players = CONNECTION_MANAGER.getOnlinePlayers();
|
||||
PlayerChatEvent playerChatEvent = new PlayerChatEvent(player, players, () -> buildDefaultChatMessage(player, message), message);
|
||||
|
||||
// Call the event
|
||||
|
@ -7,21 +7,16 @@ import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.minestom.server.MinecraftServer;
|
||||
import net.minestom.server.entity.Player;
|
||||
import net.minestom.server.entity.damage.DamageType;
|
||||
import net.minestom.server.extras.MojangAuth;
|
||||
import net.minestom.server.extras.bungee.BungeeCordProxy;
|
||||
import net.minestom.server.extras.mojangAuth.MojangCrypt;
|
||||
import net.minestom.server.extras.velocity.VelocityProxy;
|
||||
import net.minestom.server.message.Messenger;
|
||||
import net.minestom.server.network.ConnectionManager;
|
||||
import net.minestom.server.network.NetworkBuffer;
|
||||
import net.minestom.server.network.packet.client.login.ClientEncryptionResponsePacket;
|
||||
import net.minestom.server.network.packet.client.login.ClientLoginAcknowledgedPacket;
|
||||
import net.minestom.server.network.packet.client.login.ClientLoginPluginResponsePacket;
|
||||
import net.minestom.server.network.packet.client.login.ClientLoginStartPacket;
|
||||
import net.minestom.server.network.packet.server.common.PluginMessagePacket;
|
||||
import net.minestom.server.network.packet.server.common.TagsPacket;
|
||||
import net.minestom.server.network.packet.server.configuration.RegistryDataPacket;
|
||||
import net.minestom.server.network.packet.server.login.EncryptionRequestPacket;
|
||||
import net.minestom.server.network.packet.server.login.LoginDisconnectPacket;
|
||||
import net.minestom.server.network.packet.server.login.LoginPluginRequestPacket;
|
||||
@ -30,7 +25,6 @@ import net.minestom.server.network.player.PlayerConnection;
|
||||
import net.minestom.server.network.player.PlayerSocketConnection;
|
||||
import net.minestom.server.utils.async.AsyncUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jglrxavpok.hephaistos.nbt.NBT;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import java.math.BigInteger;
|
||||
@ -71,7 +65,7 @@ public final class LoginListener {
|
||||
|
||||
if (MojangAuth.isEnabled() && isSocketConnection) {
|
||||
// Mojang auth
|
||||
if (CONNECTION_MANAGER.getPlayer(packet.username()) != null) {
|
||||
if (CONNECTION_MANAGER.getOnlinePlayerByUsername(packet.username()) != null) {
|
||||
connection.sendPacket(new LoginDisconnectPacket(ALREADY_CONNECTED));
|
||||
connection.disconnect();
|
||||
return;
|
||||
|
@ -59,6 +59,9 @@ public final class ConnectionManager {
|
||||
// Players in play state
|
||||
private final Set<Player> playPlayers = new CopyOnWriteArraySet<>();
|
||||
|
||||
private final Set<Player> unmodifiableConfigurationPlayers = Collections.unmodifiableSet(configurationPlayers);
|
||||
private final Set<Player> unmodifiablePlayPlayers = Collections.unmodifiableSet(playPlayers);
|
||||
|
||||
|
||||
// The uuid provider once a player login
|
||||
private volatile UuidProvider uuidProvider = (playerConnection, username) -> UUID.randomUUID();
|
||||
@ -75,41 +78,25 @@ public final class ConnectionManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets players filtered by state.
|
||||
*
|
||||
* <p>The returned collection has no defined update behavior relative to the state of the server,
|
||||
* so it should be refetched whenever used, rather than kept and reused.</p>
|
||||
*
|
||||
* @param states The state(s) to return players, if empty all players (play and config) are returned.
|
||||
* <b>Only</b> {@link ConnectionState#CONFIGURATION} and {@link ConnectionState#PLAY} are valid.
|
||||
*
|
||||
* @return An unmodifiable collection containing the filtered players.
|
||||
* Returns an unmodifiable set containing the players currently in the play state.
|
||||
*/
|
||||
public @NotNull Collection<@NotNull Player> getPlayers(@NotNull ConnectionState... states) {
|
||||
boolean play = false, config = false;
|
||||
for (var state : states) {
|
||||
switch (state) {
|
||||
case PLAY -> play = true;
|
||||
case CONFIGURATION -> config = true;
|
||||
default -> throw new IllegalArgumentException("Cannot fetch players in " + state + "!");
|
||||
}
|
||||
public @NotNull Collection<@NotNull Player> getOnlinePlayers() {
|
||||
return unmodifiablePlayPlayers;
|
||||
}
|
||||
|
||||
if (config && !play) { // Only play
|
||||
return Collections.unmodifiableCollection(configurationPlayers);
|
||||
} else if (!config && play) { // Only configuration
|
||||
return Collections.unmodifiableCollection(playPlayers);
|
||||
} else { // Both or neither was specified
|
||||
final var players = new ArrayList<Player>(playPlayers.size() + configurationPlayers.size());
|
||||
players.addAll(configurationPlayers);
|
||||
players.addAll(playPlayers);
|
||||
return Collections.unmodifiableCollection(players);
|
||||
}
|
||||
/**
|
||||
* Returns an unmodifiable set containing the players currently in the configuration state.
|
||||
*/
|
||||
public @NotNull Collection<@NotNull Player> getConfigPlayers() {
|
||||
return unmodifiableConfigurationPlayers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link Player} linked to a {@link PlayerConnection}.
|
||||
*
|
||||
* <p>The player will be returned whether they are in the play or config state,
|
||||
* so be sure to check before sending packets to them.</p>
|
||||
*
|
||||
* @param connection the player connection
|
||||
* @return the player linked to the connection
|
||||
*/
|
||||
@ -118,17 +105,15 @@ public final class ConnectionManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first player which validate {@link String#equalsIgnoreCase(String)}.
|
||||
* Gets the first player in the play state which validates {@link String#equalsIgnoreCase(String)}.
|
||||
* <p>
|
||||
* This can cause issue if two or more players have the same username.
|
||||
*
|
||||
* @param username the player username (case-insensitive)
|
||||
* @param states The state(s) to return players, if empty all players (play and config) are returned.
|
||||
* <b>Only</b> {@link ConnectionState#CONFIGURATION} and {@link ConnectionState#PLAY} are valid.
|
||||
* @return the first player who validate the username condition, null if none was found
|
||||
*/
|
||||
public @Nullable Player getPlayer(@NotNull String username, @NotNull ConnectionState... states) {
|
||||
for (Player player : getPlayers(states)) {
|
||||
public @Nullable Player getOnlinePlayerByUsername(@NotNull String username) {
|
||||
for (Player player : getOnlinePlayers()) {
|
||||
if (player.getUsername().equalsIgnoreCase(username))
|
||||
return player;
|
||||
}
|
||||
@ -136,17 +121,15 @@ public final class ConnectionManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the first player which validate {@link UUID#equals(Object)}.
|
||||
* Gets the first player in the play state which validates {@link UUID#equals(Object)}.
|
||||
* <p>
|
||||
* This can cause issue if two or more players have the same UUID.
|
||||
*
|
||||
* @param uuid the player UUID
|
||||
* @param states The state(s) to return players, if empty all players (play and config) are returned.
|
||||
* <b>Only</b> {@link ConnectionState#CONFIGURATION} and {@link ConnectionState#PLAY} are valid.
|
||||
* @return the first player who validate the UUID condition, null if none was found
|
||||
*/
|
||||
public @Nullable Player getPlayer(@NotNull UUID uuid, @NotNull ConnectionState... states) {
|
||||
for (Player player : getPlayers(states)) {
|
||||
public @Nullable Player getOnlinePlayerByUuid(@NotNull UUID uuid) {
|
||||
for (Player player : getOnlinePlayers()) {
|
||||
if (player.getUuid().equals(uuid))
|
||||
return player;
|
||||
}
|
||||
@ -154,15 +137,13 @@ public final class ConnectionManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the closest player matching a given username.
|
||||
* Finds the closest player in the play state matching a given username.
|
||||
*
|
||||
* @param username the player username (can be partial)
|
||||
* @param states The state(s) to return players, if empty all players (play and config) are returned.
|
||||
* <b>Only</b> {@link ConnectionState#CONFIGURATION} and {@link ConnectionState#PLAY} are valid.
|
||||
* @return the closest match, null if no players are online
|
||||
*/
|
||||
public @Nullable Player findPlayer(@NotNull String username, @NotNull ConnectionState... states) {
|
||||
Player exact = getPlayer(username);
|
||||
public @Nullable Player findOnlinePlayer(@NotNull String username) {
|
||||
Player exact = getOnlinePlayerByUsername(username);
|
||||
if (exact != null) return exact;
|
||||
final String username1 = username.toLowerCase(Locale.ROOT);
|
||||
|
||||
@ -170,7 +151,7 @@ public final class ConnectionManager {
|
||||
final String username2 = player.getUsername().toLowerCase(Locale.ROOT);
|
||||
return StringUtils.jaroWinklerScore(username1, username2);
|
||||
};
|
||||
return getPlayers(states).stream()
|
||||
return getOnlinePlayers().stream()
|
||||
.min(Comparator.comparingDouble(distanceFunction::apply))
|
||||
.filter(player -> distanceFunction.apply(player) > 0)
|
||||
.orElse(null);
|
||||
@ -214,16 +195,6 @@ public final class ConnectionManager {
|
||||
this.playerProvider = playerProvider != null ? playerProvider : Player::new;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the current {@link PlayerProvider}, can be the default one if none is defined.
|
||||
*
|
||||
* @return the current {@link PlayerProvider}
|
||||
*/
|
||||
public @NotNull PlayerProvider getPlayerProvider() {
|
||||
return playerProvider;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a player object and begins the transition from the login state to the config state.
|
||||
*/
|
||||
|
@ -472,7 +472,7 @@ public class Team implements PacketGroupingAudience {
|
||||
this.playerMembers.clear();
|
||||
|
||||
for (String member : this.members) {
|
||||
Player player = MinecraftServer.getConnectionManager().getPlayer(member);
|
||||
Player player = MinecraftServer.getConnectionManager().getOnlinePlayerByUsername(member);
|
||||
|
||||
if (player != null) {
|
||||
this.playerMembers.add(player);
|
||||
|
@ -151,7 +151,7 @@ public final class PacketUtils {
|
||||
}
|
||||
|
||||
public static void broadcastPlayPacket(@NotNull ServerPacket packet) {
|
||||
sendGroupedPacket(MinecraftServer.getConnectionManager().getPlayers(ConnectionState.PLAY), packet);
|
||||
sendGroupedPacket(MinecraftServer.getConnectionManager().getOnlinePlayers(), packet);
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
|
@ -131,7 +131,7 @@ public class EntityFinder {
|
||||
public @NotNull List<@NotNull Entity> find(@Nullable Instance instance, @Nullable Entity self) {
|
||||
if (targetSelector == TargetSelector.MINESTOM_USERNAME) {
|
||||
Check.notNull(constantName, "The player name should not be null when searching for it");
|
||||
final Player player = MinecraftServer.getConnectionManager().getPlayer(constantName);
|
||||
final Player player = MinecraftServer.getConnectionManager().getOnlinePlayerByUsername(constantName);
|
||||
return player != null ? List.of(player) : List.of();
|
||||
} else if (targetSelector == TargetSelector.MINESTOM_UUID) {
|
||||
Check.notNull(constantUuid, "The UUID should not be null when searching for it");
|
||||
@ -310,7 +310,7 @@ public class EntityFinder {
|
||||
private static @NotNull List<@NotNull Entity> findTarget(@Nullable Instance instance,
|
||||
@NotNull TargetSelector targetSelector,
|
||||
@NotNull Point startPosition, @Nullable Entity self) {
|
||||
final var players = instance != null ? instance.getPlayers() : CONNECTION_MANAGER.getPlayers(ConnectionState.PLAY);
|
||||
final var players = instance != null ? instance.getPlayers() : CONNECTION_MANAGER.getOnlinePlayers();
|
||||
if (targetSelector == TargetSelector.NEAREST_PLAYER) {
|
||||
return players.stream()
|
||||
.min(Comparator.comparingDouble(p -> p.getPosition().distanceSquared(startPosition)))
|
||||
|
Loading…
Reference in New Issue
Block a user