From 60e0a1896db3416744f04fd5d1552de71d60ea50 Mon Sep 17 00:00:00 2001 From: codestech Date: Tue, 28 May 2024 08:52:35 +0200 Subject: [PATCH] chore: move packets to interfaces --- .../hypejet/jet/player/PlayerConnection.java | 2 +- .../packet/clientbound/ClientBoundPacket.java | 28 ++------- .../clientbound/login/DisconnectPacket.java | 34 ----------- .../login/disconnect/DisconnectPacket.java | 56 ++++++++++++++++++ .../disconnect/DisconnectPacketImpl.java | 55 ++++++++++++++++++ .../ServerBoundPacketRegistry.java | 41 ------------- .../handshake/HandshakePacket.java | 41 +++++++++++-- .../serverbound/login/LoginRequestPacket.java | 21 +++++-- .../java/net/hypejet/jet/server/Main.java | 4 +- .../network/PlayerChannelInitializer.java | 2 +- .../network/serialization/PacketDecoder.java | 2 +- .../server/player/JetPlayerConnection.java | 6 +- .../JetServerBoundPacketRegistry.java | 28 --------- .../jet/server/protocol}/PacketReader.java | 3 +- .../protocol/ServerBoundPacketRegistry.java | 58 +++++++++++++++++++ .../handshake/HandshakePacketReader.java | 5 +- .../login/LoginRequestPacketReader.java | 5 +- .../handshake/HandshakePacketImpl.java | 8 +++ .../login/LoginRequestPacketImpl.java | 8 +++ 19 files changed, 258 insertions(+), 149 deletions(-) delete mode 100644 api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/DisconnectPacket.java create mode 100644 api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacket.java create mode 100644 api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacketImpl.java delete mode 100644 api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/ServerBoundPacketRegistry.java delete mode 100644 server/src/main/java/net/hypejet/jet/server/protocol/JetServerBoundPacketRegistry.java rename {api/src/main/java/net/hypejet/jet/protocol/packet/serverbound => server/src/main/java/net/hypejet/jet/server/protocol}/PacketReader.java (93%) create mode 100644 server/src/main/java/net/hypejet/jet/server/protocol/ServerBoundPacketRegistry.java create mode 100644 server/src/main/java/net/hypejet/jet/server/protocol/serverbound/handshake/HandshakePacketImpl.java create mode 100644 server/src/main/java/net/hypejet/jet/server/protocol/serverbound/login/LoginRequestPacketImpl.java diff --git a/api/src/main/java/net/hypejet/jet/player/PlayerConnection.java b/api/src/main/java/net/hypejet/jet/player/PlayerConnection.java index 269611ed..8081c103 100644 --- a/api/src/main/java/net/hypejet/jet/player/PlayerConnection.java +++ b/api/src/main/java/net/hypejet/jet/player/PlayerConnection.java @@ -2,7 +2,7 @@ import net.hypejet.jet.protocol.ProtocolState; import net.hypejet.jet.protocol.packet.clientbound.ClientBoundPacket; -import net.hypejet.jet.protocol.packet.clientbound.login.DisconnectPacket; +import net.hypejet.jet.protocol.packet.clientbound.login.disconnect.DisconnectPacket; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/ClientBoundPacket.java b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/ClientBoundPacket.java index d4333b4f..78b9c8a7 100644 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/ClientBoundPacket.java +++ b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/ClientBoundPacket.java @@ -9,32 +9,14 @@ * @since 1.0 * @author Codestech */ -public abstract class ClientBoundPacket { - - private final int packetId; - private final ProtocolState protocolState; - - /** - * Constructs a {@link ClientBoundPacket client-bound packet}. - * - * @param packetId an id of the packet - * @param protocolState a protocol state of the packet - * @since 1.0 - */ - public ClientBoundPacket(int packetId, @NonNull ProtocolState protocolState) { - this.packetId = packetId; - this.protocolState = protocolState; - } - +public interface ClientBoundPacket { /** * Gets an identifier of the packet. * * @return the identifier. * @since 1.0 */ - public final int getPacketId() { - return this.packetId; - } + int getPacketId(); /** * Gets a {@link ProtocolState protocol state} of the packet. @@ -42,9 +24,7 @@ public final int getPacketId() { * @return the protocol state. * @since 1.0 */ - public final @NonNull ProtocolState getProtocolState() { - return this.protocolState; - } + @NonNull ProtocolState getProtocolState(); /** * Writes the packet to a {@link NetworkBuffer network buffer}. @@ -52,5 +32,5 @@ public final int getPacketId() { * @param buffer the byte buffer * @since 1.0 */ - public abstract void write(@NonNull NetworkBuffer buffer); + void write(@NonNull NetworkBuffer buffer); } \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/DisconnectPacket.java b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/DisconnectPacket.java deleted file mode 100644 index bc07330a..00000000 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/DisconnectPacket.java +++ /dev/null @@ -1,34 +0,0 @@ -package net.hypejet.jet.protocol.packet.clientbound.login; - -import net.hypejet.jet.buffer.NetworkBuffer; -import net.hypejet.jet.protocol.ProtocolState; -import net.hypejet.jet.protocol.packet.clientbound.ClientBoundPacket; -import net.kyori.adventure.text.Component; -import org.checkerframework.checker.nullness.qual.NonNull; - -/** - * Represents a {@link ClientBoundPacket client-bound packet} sent by a server to disconnect a player. - * - * @since 1.0 - * @author Codestech - */ -public final class DisconnectPacket extends ClientBoundPacket { - - private final Component reason; - - /** - * Constructs a {@link DisconnectPacket disconnect packet}. - * - * @param reason a reason why of the disconnection - * @since 1.0 - */ - public DisconnectPacket(@NonNull Component reason) { - super(0, ProtocolState.LOGIN); - this.reason = reason; - } - - @Override - public void write(@NonNull NetworkBuffer buffer) { - buffer.writeJsonTextComponent(this.reason); - } -} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacket.java b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacket.java new file mode 100644 index 00000000..b41f8e5f --- /dev/null +++ b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacket.java @@ -0,0 +1,56 @@ +package net.hypejet.jet.protocol.packet.clientbound.login.disconnect; + +import net.hypejet.jet.protocol.packet.clientbound.ClientBoundPacket; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * Represents a {@link ClientBoundPacket client-bound packet} sent by a server to disconnect a player. + * + * @since 1.0 + * @author Codestech + */ +public sealed interface DisconnectPacket extends ClientBoundPacket permits DisconnectPacketImpl { + /** + * Gets a reason of the disconnection. + * + * @return the reason + * @since 1.0 + */ + @NonNull Component reason(); + + /** + * Creates a new {@link Builder disconnect packet builder}. + * + * @return the builder + * @since 1.0 + */ + static @NonNull Builder builder() { + return new DisconnectPacketImpl.Builder(); + } + + /** + * Represents a builder that creates a {@link DisconnectPacket disconnect packet}. + * + * @since 1.0 + * @author Codestech + */ + interface Builder { + /** + * Sets a reason of the disconnection. + * + * @param reason the reason + * @return the builder + * @since 1.0 + */ + @NonNull Builder reason(@NonNull Component reason); + + /** + * Builds the {@link DisconnectPacket disconnect packet}. + * + * @return the disconnect packet + * @since 1.0 + */ + @NonNull DisconnectPacket build(); + } +} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacketImpl.java b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacketImpl.java new file mode 100644 index 00000000..d126ecff --- /dev/null +++ b/api/src/main/java/net/hypejet/jet/protocol/packet/clientbound/login/disconnect/DisconnectPacketImpl.java @@ -0,0 +1,55 @@ +package net.hypejet.jet.protocol.packet.clientbound.login.disconnect; + +import net.hypejet.jet.buffer.NetworkBuffer; +import net.hypejet.jet.protocol.ProtocolState; +import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * Represents an implementation of {@link DisconnectPacket disconnect packet}. + * + * @param reason a reason of the disconnection + * @since 1.0 + * @author Codestech + * @see DisconnectPacket + */ +record DisconnectPacketImpl(@NonNull Component reason) implements DisconnectPacket { + + @Override + public void write(@NonNull NetworkBuffer buffer) { + buffer.writeJsonTextComponent(this.reason); + } + + @Override + public int getPacketId() { + return 0; + } + + @Override + public @NonNull ProtocolState getProtocolState() { + return ProtocolState.LOGIN; + } + + /** + * Represents an implementation of {@link DisconnectPacket.Builder disconnect packet builder}. + * + * @since 1.0 + * @author Codestech + * @see DisconnectPacket.Builder + */ + static final class Builder implements DisconnectPacket.Builder { + + private Component reason = Component.empty(); + + @Override + public DisconnectPacket.@NonNull Builder reason(@NonNull Component reason) { + this.reason = reason; + return this; + } + + @Override + public @NonNull DisconnectPacket build() { + return new DisconnectPacketImpl(this.reason); + } + } +} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/ServerBoundPacketRegistry.java b/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/ServerBoundPacketRegistry.java deleted file mode 100644 index 2e038471..00000000 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/ServerBoundPacketRegistry.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.hypejet.jet.protocol.packet.serverbound; - -import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; -import net.hypejet.jet.protocol.ProtocolState; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * Represents a registry of a server-bound packet readers. - * - * @since 1.0 - * @author Codestech - */ -public interface ServerBoundPacketRegistry { - /** - * Gets a {@link PacketReader packet reader}, which can read a specific packet and reads it from - * a {@link ReadOnlyNetworkBuffer read-only network buffer}. - * - * @param packetId an id of the packet - * @param state a current state of the protocol - * @param buffer the byte buffer - * @return the packet, which may be null if the packet reader is not present - * @since 1.0 - */ - default @Nullable ServerBoundPacket read(int packetId, @NonNull ProtocolState state, - @NonNull ReadOnlyNetworkBuffer buffer) { - PacketReader packetReader = getReader(packetId, state); - if (packetReader == null) return null; - return packetReader.read(buffer); - } - - /** - * Gets a {@link PacketReader packet reader}, which can read a specific packet. - * - * @param packetId an id of the packet - * @param state a current state of the protocol - * @return the packet reader, which may be null if not present - * @since 1.0 - */ - @Nullable PacketReader getReader(int packetId, @NonNull ProtocolState state); -} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/handshake/HandshakePacket.java b/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/handshake/HandshakePacket.java index 97231835..93ee110e 100644 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/handshake/HandshakePacket.java +++ b/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/handshake/HandshakePacket.java @@ -1,5 +1,6 @@ package net.hypejet.jet.protocol.packet.serverbound.handshake; +import net.hypejet.jet.player.PlayerConnection; import net.hypejet.jet.protocol.ProtocolState; import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacket; import org.checkerframework.checker.nullness.qual.NonNull; @@ -7,12 +8,40 @@ /** * Represents a {@link ServerBoundPacket server-bound packet} that initializes connection of a player. * - * @param protocolVersion a version of the Minecraft protocol - * @param serverAddress an address of the server - * @param serverPort a port of the server - * @param nextState a next protocol state, which the connection will switch to * @since 1.0 * @author Codestech */ -public record HandshakePacket(int protocolVersion, @NonNull String serverAddress, - int serverPort, @NonNull ProtocolState nextState) implements ServerBoundPacket {} \ No newline at end of file +public interface HandshakePacket extends ServerBoundPacket { + /** + * Gets a version of the Minecraft protocol. + * + * @return the version + * @since 1.0 + */ + int protocolVersion(); + + /** + * Gets an address of a server that the client tries to connect to. + * + * @return the address + * @since 1.0 + */ + @NonNull String serverAddress(); + + /** + * Gets a port of a server that the client tries to connect to. + * + * @return the port + * @since 1.0 + */ + int serverPort(); + + /** + * Gets a next {@link ProtocolState protocol state}, which a {@link PlayerConnection player connection} will switch + * to. + * + * @return the protocol state + * @since 1.0 + */ + @NonNull ProtocolState nextState(); +} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/login/LoginRequestPacket.java b/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/login/LoginRequestPacket.java index 0bbeec86..59d4ed7f 100644 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/login/LoginRequestPacket.java +++ b/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/login/LoginRequestPacket.java @@ -8,10 +8,23 @@ /** * Represents a {@link ServerBoundPacket server-bound packet} that requests a server to send a login data. * - * @param username a username of a player that sends the packet - * @param uniqueId a unique id of a player that sends the packet * @since 1.0 * @author Codestech */ -public record LoginRequestPacket(@NonNull String username, @NonNull UUID uniqueId) - implements ServerBoundPacket {} \ No newline at end of file +public interface LoginRequestPacket extends ServerBoundPacket { + /** + * Gets a username of a player that sends the packet. + * + * @return the username + * @since 1.0 + */ + @NonNull String username(); + + /** + * Gets a {@link UUID unique identifier} of a player that sends the packet. + * + * @return the unique identifier + * @since 1.0 + */ + @NonNull UUID uniqueId(); +} \ No newline at end of file diff --git a/server/src/main/java/net/hypejet/jet/server/Main.java b/server/src/main/java/net/hypejet/jet/server/Main.java index c4c37526..a4bd3698 100644 --- a/server/src/main/java/net/hypejet/jet/server/Main.java +++ b/server/src/main/java/net/hypejet/jet/server/Main.java @@ -6,7 +6,7 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import net.hypejet.jet.server.network.PlayerChannelInitializer; -import net.hypejet.jet.server.protocol.JetServerBoundPacketRegistry; +import net.hypejet.jet.server.protocol.ServerBoundPacketRegistry; public class Main { public static void main(String[] args) { @@ -17,7 +17,7 @@ public static void main(String[] args) { ServerBootstrap bootstrap = new ServerBootstrap() .group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) - .childHandler(new PlayerChannelInitializer(new JetServerBoundPacketRegistry())); + .childHandler(new PlayerChannelInitializer(new ServerBoundPacketRegistry())); ChannelFuture future = bootstrap.bind(25565).sync(); future.channel().closeFuture().sync(); diff --git a/server/src/main/java/net/hypejet/jet/server/network/PlayerChannelInitializer.java b/server/src/main/java/net/hypejet/jet/server/network/PlayerChannelInitializer.java index fb68fc1e..236b7e84 100644 --- a/server/src/main/java/net/hypejet/jet/server/network/PlayerChannelInitializer.java +++ b/server/src/main/java/net/hypejet/jet/server/network/PlayerChannelInitializer.java @@ -2,11 +2,11 @@ import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.SocketChannel; -import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacketRegistry; import net.hypejet.jet.server.network.serialization.PacketDecoder; import net.hypejet.jet.server.network.serialization.PacketEncoder; import net.hypejet.jet.server.network.serialization.PacketLengthEncoder; import net.hypejet.jet.server.player.JetPlayerConnection; +import net.hypejet.jet.server.protocol.ServerBoundPacketRegistry; import org.checkerframework.checker.nullness.qual.NonNull; public final class PlayerChannelInitializer extends ChannelInitializer { diff --git a/server/src/main/java/net/hypejet/jet/server/network/serialization/PacketDecoder.java b/server/src/main/java/net/hypejet/jet/server/network/serialization/PacketDecoder.java index b3e16618..d23d53fd 100644 --- a/server/src/main/java/net/hypejet/jet/server/network/serialization/PacketDecoder.java +++ b/server/src/main/java/net/hypejet/jet/server/network/serialization/PacketDecoder.java @@ -6,9 +6,9 @@ import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; import net.hypejet.jet.protocol.ProtocolState; import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacket; -import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacketRegistry; import net.hypejet.jet.server.buffer.ReadOnlyNetworkBufferImpl; import net.hypejet.jet.server.player.JetPlayerConnection; +import net.hypejet.jet.server.protocol.ServerBoundPacketRegistry; import org.checkerframework.checker.nullness.qual.NonNull; import java.util.List; diff --git a/server/src/main/java/net/hypejet/jet/server/player/JetPlayerConnection.java b/server/src/main/java/net/hypejet/jet/server/player/JetPlayerConnection.java index e84de34b..2831281c 100644 --- a/server/src/main/java/net/hypejet/jet/server/player/JetPlayerConnection.java +++ b/server/src/main/java/net/hypejet/jet/server/player/JetPlayerConnection.java @@ -4,7 +4,7 @@ import net.hypejet.jet.player.PlayerConnection; import net.hypejet.jet.protocol.ProtocolState; import net.hypejet.jet.protocol.packet.clientbound.ClientBoundPacket; -import net.hypejet.jet.protocol.packet.clientbound.login.DisconnectPacket; +import net.hypejet.jet.protocol.packet.clientbound.login.disconnect.DisconnectPacket; import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; @@ -44,7 +44,9 @@ public void sendPacket(@NonNull ClientBoundPacket packet) { @Override public void kick(@NonNull Component reason) { - this.sendPacket(new DisconnectPacket(reason)); + this.sendPacket(DisconnectPacket.builder() + .reason(reason) + .build()); this.close(); } diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/JetServerBoundPacketRegistry.java b/server/src/main/java/net/hypejet/jet/server/protocol/JetServerBoundPacketRegistry.java deleted file mode 100644 index 30768db9..00000000 --- a/server/src/main/java/net/hypejet/jet/server/protocol/JetServerBoundPacketRegistry.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.hypejet.jet.server.protocol; - -import net.hypejet.jet.protocol.ProtocolState; -import net.hypejet.jet.protocol.packet.serverbound.PacketReader; -import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacketRegistry; -import net.hypejet.jet.server.protocol.listener.handshake.HandshakePacketReader; -import net.hypejet.jet.server.protocol.listener.login.LoginRequestPacketReader; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.checkerframework.checker.nullness.qual.Nullable; - -import java.util.Set; - -public final class JetServerBoundPacketRegistry implements ServerBoundPacketRegistry { - - private final Set> packetReaders = Set.of( - new HandshakePacketReader(), - new LoginRequestPacketReader() - ); - - @Override - public @Nullable PacketReader getReader(int packetId, @NonNull ProtocolState state) { - for (PacketReader packetReader : this.packetReaders) { - if (packetReader.getPacketId() != packetId || packetReader.getProtocolState() != state) continue; - return packetReader; - } - return null; - } -} \ No newline at end of file diff --git a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/PacketReader.java b/server/src/main/java/net/hypejet/jet/server/protocol/PacketReader.java similarity index 93% rename from api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/PacketReader.java rename to server/src/main/java/net/hypejet/jet/server/protocol/PacketReader.java index a4c6eefa..438e9c57 100644 --- a/api/src/main/java/net/hypejet/jet/protocol/packet/serverbound/PacketReader.java +++ b/server/src/main/java/net/hypejet/jet/server/protocol/PacketReader.java @@ -1,7 +1,8 @@ -package net.hypejet.jet.protocol.packet.serverbound; +package net.hypejet.jet.server.protocol; import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; import net.hypejet.jet.protocol.ProtocolState; +import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacket; import org.checkerframework.checker.nullness.qual.NonNull; /** diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/ServerBoundPacketRegistry.java b/server/src/main/java/net/hypejet/jet/server/protocol/ServerBoundPacketRegistry.java new file mode 100644 index 00000000..93d35668 --- /dev/null +++ b/server/src/main/java/net/hypejet/jet/server/protocol/ServerBoundPacketRegistry.java @@ -0,0 +1,58 @@ +package net.hypejet.jet.server.protocol; + +import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; +import net.hypejet.jet.protocol.ProtocolState; +import net.hypejet.jet.protocol.packet.serverbound.ServerBoundPacket; +import net.hypejet.jet.server.protocol.listener.handshake.HandshakePacketReader; +import net.hypejet.jet.server.protocol.listener.login.LoginRequestPacketReader; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.Set; + +/** + * Represents a registry of a {@link ServerBoundPacket server-bound packet} readers. + * + * @since 1.0 + * @author Codestech + */ +public final class ServerBoundPacketRegistry { + + private final Set> packetReaders = Set.of( + new HandshakePacketReader(), + new LoginRequestPacketReader() + ); + + /** + * Gets a {@link PacketReader packet reader}, which can read a specific packet and reads it from + * a {@link ReadOnlyNetworkBuffer read-only network buffer}. + * + * @param packetId an id of the packet + * @param state a current state of the protocol + * @param buffer the byte buffer + * @return the packet, which may be null if the packet reader is not present + * @since 1.0 + */ + public @Nullable ServerBoundPacket read(int packetId, @NonNull ProtocolState state, + @NonNull ReadOnlyNetworkBuffer buffer) { + PacketReader packetReader = this.getReader(packetId, state); + if (packetReader == null) return null; + return packetReader.read(buffer); + } + + /** + * Gets a {@link PacketReader packet reader}, which can read a specific packet. + * + * @param packetId an id of the packet + * @param state a current state of the protocol + * @return the packet reader, which may be null if not present + * @since 1.0 + */ + public @Nullable PacketReader getReader(int packetId, @NonNull ProtocolState state) { + for (PacketReader packetReader : this.packetReaders) { + if (packetReader.getPacketId() != packetId || packetReader.getProtocolState() != state) continue; + return packetReader; + } + return null; + } +} \ No newline at end of file diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/listener/handshake/HandshakePacketReader.java b/server/src/main/java/net/hypejet/jet/server/protocol/listener/handshake/HandshakePacketReader.java index 8f6c1749..81e034c4 100644 --- a/server/src/main/java/net/hypejet/jet/server/protocol/listener/handshake/HandshakePacketReader.java +++ b/server/src/main/java/net/hypejet/jet/server/protocol/listener/handshake/HandshakePacketReader.java @@ -2,8 +2,9 @@ import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; import net.hypejet.jet.protocol.ProtocolState; -import net.hypejet.jet.protocol.packet.serverbound.PacketReader; +import net.hypejet.jet.server.protocol.PacketReader; import net.hypejet.jet.protocol.packet.serverbound.handshake.HandshakePacket; +import net.hypejet.jet.server.protocol.serverbound.handshake.HandshakePacketImpl; import org.checkerframework.checker.nullness.qual.NonNull; public final class HandshakePacketReader extends PacketReader { @@ -14,7 +15,7 @@ public HandshakePacketReader() { @Override public @NonNull HandshakePacket read(@NonNull ReadOnlyNetworkBuffer buffer) { - return new HandshakePacket( + return new HandshakePacketImpl( buffer.readVarInt(), buffer.readString(), buffer.readUnsignedShort(), diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/listener/login/LoginRequestPacketReader.java b/server/src/main/java/net/hypejet/jet/server/protocol/listener/login/LoginRequestPacketReader.java index 91a6b269..7c7b0b13 100644 --- a/server/src/main/java/net/hypejet/jet/server/protocol/listener/login/LoginRequestPacketReader.java +++ b/server/src/main/java/net/hypejet/jet/server/protocol/listener/login/LoginRequestPacketReader.java @@ -2,8 +2,9 @@ import net.hypejet.jet.buffer.ReadOnlyNetworkBuffer; import net.hypejet.jet.protocol.ProtocolState; -import net.hypejet.jet.protocol.packet.serverbound.PacketReader; +import net.hypejet.jet.server.protocol.PacketReader; import net.hypejet.jet.protocol.packet.serverbound.login.LoginRequestPacket; +import net.hypejet.jet.server.protocol.serverbound.login.LoginRequestPacketImpl; import org.checkerframework.checker.nullness.qual.NonNull; public final class LoginRequestPacketReader extends PacketReader { @@ -14,6 +15,6 @@ public LoginRequestPacketReader() { @Override public @NonNull LoginRequestPacket read(@NonNull ReadOnlyNetworkBuffer buffer) { - return new LoginRequestPacket(buffer.readString(), buffer.readUniqueId()); + return new LoginRequestPacketImpl(buffer.readString(), buffer.readUniqueId()); } } \ No newline at end of file diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/handshake/HandshakePacketImpl.java b/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/handshake/HandshakePacketImpl.java new file mode 100644 index 00000000..58321424 --- /dev/null +++ b/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/handshake/HandshakePacketImpl.java @@ -0,0 +1,8 @@ +package net.hypejet.jet.server.protocol.serverbound.handshake; + +import net.hypejet.jet.protocol.ProtocolState; +import net.hypejet.jet.protocol.packet.serverbound.handshake.HandshakePacket; +import org.checkerframework.checker.nullness.qual.NonNull; + +public record HandshakePacketImpl(int protocolVersion, @NonNull String serverAddress, + int serverPort, @NonNull ProtocolState nextState) implements HandshakePacket {} \ No newline at end of file diff --git a/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/login/LoginRequestPacketImpl.java b/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/login/LoginRequestPacketImpl.java new file mode 100644 index 00000000..247eaf19 --- /dev/null +++ b/server/src/main/java/net/hypejet/jet/server/protocol/serverbound/login/LoginRequestPacketImpl.java @@ -0,0 +1,8 @@ +package net.hypejet.jet.server.protocol.serverbound.login; + +import net.hypejet.jet.protocol.packet.serverbound.login.LoginRequestPacket; +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.util.UUID; + +public record LoginRequestPacketImpl(@NonNull String username, @NonNull UUID uniqueId) implements LoginRequestPacket {} \ No newline at end of file