mirror of https://github.com/Minestom/Minestom.git
Misc connection improvements
This commit is contained in:
parent
fd4a4d531e
commit
3972477b3b
|
@ -4,14 +4,12 @@ import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.entity.fakeplayer.FakePlayer;
|
|
||||||
import net.minestom.server.event.EventDispatcher;
|
import net.minestom.server.event.EventDispatcher;
|
||||||
import net.minestom.server.event.player.AsyncPlayerPreLoginEvent;
|
import net.minestom.server.event.player.AsyncPlayerPreLoginEvent;
|
||||||
import net.minestom.server.event.player.PlayerLoginEvent;
|
import net.minestom.server.event.player.PlayerLoginEvent;
|
||||||
import net.minestom.server.instance.Instance;
|
import net.minestom.server.instance.Instance;
|
||||||
import net.minestom.server.listener.manager.ClientPacketConsumer;
|
import net.minestom.server.listener.manager.ClientPacketConsumer;
|
||||||
import net.minestom.server.listener.manager.ServerPacketConsumer;
|
import net.minestom.server.listener.manager.ServerPacketConsumer;
|
||||||
import net.minestom.server.network.packet.client.login.LoginStartPacket;
|
|
||||||
import net.minestom.server.network.packet.server.login.LoginSuccessPacket;
|
import net.minestom.server.network.packet.server.login.LoginSuccessPacket;
|
||||||
import net.minestom.server.network.packet.server.play.DisconnectPacket;
|
import net.minestom.server.network.packet.server.play.DisconnectPacket;
|
||||||
import net.minestom.server.network.packet.server.play.KeepAlivePacket;
|
import net.minestom.server.network.packet.server.play.KeepAlivePacket;
|
||||||
|
@ -29,7 +27,6 @@ import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,9 +47,9 @@ public final class ConnectionManager {
|
||||||
// All the consumers to call once a packet is sent
|
// All the consumers to call once a packet is sent
|
||||||
private final List<ServerPacketConsumer> sendClientPacketConsumers = new CopyOnWriteArrayList<>();
|
private final List<ServerPacketConsumer> sendClientPacketConsumers = new CopyOnWriteArrayList<>();
|
||||||
// The uuid provider once a player login
|
// The uuid provider once a player login
|
||||||
private UuidProvider uuidProvider;
|
private volatile UuidProvider uuidProvider = (playerConnection, username) -> UUID.randomUUID();
|
||||||
// The player provider to have your own Player implementation
|
// The player provider to have your own Player implementation
|
||||||
private PlayerProvider playerProvider;
|
private volatile PlayerProvider playerProvider = Player::new;
|
||||||
|
|
||||||
private Component shutdownText = Component.text("The server is shutting down.", NamedTextColor.RED);
|
private Component shutdownText = Component.text("The server is shutting down.", NamedTextColor.RED);
|
||||||
|
|
||||||
|
@ -191,7 +188,7 @@ public final class ConnectionManager {
|
||||||
* @see #getPlayerConnectionUuid(PlayerConnection, String)
|
* @see #getPlayerConnectionUuid(PlayerConnection, String)
|
||||||
*/
|
*/
|
||||||
public void setUuidProvider(@Nullable UuidProvider uuidProvider) {
|
public void setUuidProvider(@Nullable UuidProvider uuidProvider) {
|
||||||
this.uuidProvider = uuidProvider;
|
this.uuidProvider = uuidProvider != null ? uuidProvider : (playerConnection, username) -> UUID.randomUUID();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -205,8 +202,6 @@ public final class ConnectionManager {
|
||||||
* return a random UUID if no UUID provider is defined see {@link #setUuidProvider(UuidProvider)}
|
* return a random UUID if no UUID provider is defined see {@link #setUuidProvider(UuidProvider)}
|
||||||
*/
|
*/
|
||||||
public @NotNull UUID getPlayerConnectionUuid(@NotNull PlayerConnection playerConnection, @NotNull String username) {
|
public @NotNull UUID getPlayerConnectionUuid(@NotNull PlayerConnection playerConnection, @NotNull String username) {
|
||||||
if (uuidProvider == null)
|
|
||||||
return UUID.randomUUID();
|
|
||||||
return uuidProvider.provide(playerConnection, username);
|
return uuidProvider.provide(playerConnection, username);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +211,7 @@ public final class ConnectionManager {
|
||||||
* @param playerProvider the new {@link PlayerProvider}, can be set to null to apply the default provider
|
* @param playerProvider the new {@link PlayerProvider}, can be set to null to apply the default provider
|
||||||
*/
|
*/
|
||||||
public void setPlayerProvider(@Nullable PlayerProvider playerProvider) {
|
public void setPlayerProvider(@Nullable PlayerProvider playerProvider) {
|
||||||
this.playerProvider = playerProvider;
|
this.playerProvider = playerProvider != null ? playerProvider : Player::new;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -225,7 +220,7 @@ public final class ConnectionManager {
|
||||||
* @return the current {@link PlayerProvider}
|
* @return the current {@link PlayerProvider}
|
||||||
*/
|
*/
|
||||||
public @NotNull PlayerProvider getPlayerProvider() {
|
public @NotNull PlayerProvider getPlayerProvider() {
|
||||||
return playerProvider == null ? playerProvider = Player::new : playerProvider;
|
return playerProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,14 +242,6 @@ public final class ConnectionManager {
|
||||||
this.shutdownText = shutdownText;
|
this.shutdownText = shutdownText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a new {@link Player} in the players list.
|
|
||||||
* Is currently used at
|
|
||||||
* {@link LoginStartPacket#process(PlayerConnection)}
|
|
||||||
* and in {@link FakePlayer#initPlayer(UUID, String, Consumer)}.
|
|
||||||
*
|
|
||||||
* @param player the player to add
|
|
||||||
*/
|
|
||||||
public synchronized void registerPlayer(@NotNull Player player) {
|
public synchronized void registerPlayer(@NotNull Player player) {
|
||||||
this.players.add(player);
|
this.players.add(player);
|
||||||
this.connectionPlayerMap.put(player.getPlayerConnection(), player);
|
this.connectionPlayerMap.put(player.getPlayerConnection(), player);
|
||||||
|
@ -269,11 +256,9 @@ public final class ConnectionManager {
|
||||||
* @see PlayerConnection#disconnect() to properly disconnect a player
|
* @see PlayerConnection#disconnect() to properly disconnect a player
|
||||||
*/
|
*/
|
||||||
public synchronized void removePlayer(@NotNull PlayerConnection connection) {
|
public synchronized void removePlayer(@NotNull PlayerConnection connection) {
|
||||||
final Player player = this.connectionPlayerMap.get(connection);
|
final Player player = this.connectionPlayerMap.remove(connection);
|
||||||
if (player == null)
|
if (player == null) return;
|
||||||
return;
|
|
||||||
this.players.remove(player);
|
this.players.remove(player);
|
||||||
this.connectionPlayerMap.remove(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -316,11 +301,8 @@ public final class ConnectionManager {
|
||||||
playerConnection.sendPacket(loginSuccessPacket);
|
playerConnection.sendPacket(loginSuccessPacket);
|
||||||
}
|
}
|
||||||
playerConnection.setConnectionState(ConnectionState.PLAY);
|
playerConnection.setConnectionState(ConnectionState.PLAY);
|
||||||
// Add the player to the waiting list
|
if (register) registerPlayer(player);
|
||||||
this.waitingPlayers.relaxedOffer(player);
|
this.waitingPlayers.relaxedOffer(player);
|
||||||
if (register) {
|
|
||||||
registerPlayer(player);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +316,7 @@ public final class ConnectionManager {
|
||||||
public @NotNull Player startPlayState(@NotNull PlayerConnection connection,
|
public @NotNull Player startPlayState(@NotNull PlayerConnection connection,
|
||||||
@NotNull UUID uuid, @NotNull String username,
|
@NotNull UUID uuid, @NotNull String username,
|
||||||
boolean register) {
|
boolean register) {
|
||||||
final Player player = getPlayerProvider().createPlayer(uuid, username, connection);
|
final Player player = playerProvider.createPlayer(uuid, username, connection);
|
||||||
startPlayState(player, register);
|
startPlayState(player, register);
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue