From f9a71250b185064142b604f284060041808dd9e1 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 10 May 2021 03:15:11 +0300 Subject: [PATCH] refactoring: Packets --- protocol-new/build.gradle | 1 + .../src/main/java/mc/protocol/State.java | 48 +++++++-- .../main/java/mc/protocol/io/NetByteBuf.java | 10 +- .../main/java/mc/protocol/model/Location.java | 0 .../src/main/java/mc/protocol/model/Look.java | 0 .../java/mc/protocol/model/ServerInfo.java | 0 .../protocol/model}/ServerInfoSerializer.java | 10 +- .../java/mc/protocol/model/text/Text.java | 0 .../mc/protocol/model/text/TextColor.java | 0 .../protocol/model/text}/TextSerializer.java | 9 +- .../mc/protocol/model/text/TextStyle.java | 0 .../mc/protocol/packets/KeepAlivePacket.java | 28 ++--- .../handshaking}/client/HandshakePacket.java | 19 ++-- .../login}/client/LoginStartPacket.java | 4 +- .../login}/server/DisconnectPacket.java | 9 +- .../login}/server/LoginSuccessPacket.java | 6 +- .../client/CPlayerPositionAndLookPacket.java | 2 +- .../play}/client/ClientSettingsPacket.java | 2 +- .../play}/client/EntityActionPacket.java | 41 +++++-- .../play}/client/PlayerLookPacket.java | 2 +- .../play}/client/PlayerPositionPacket.java | 2 +- .../play}/client/PluginMessagePacket.java | 2 +- .../play}/client/TeleportConfirmPacket.java | 8 +- .../packets/play}/server/ChunkDataPacket.java | 2 +- .../packets/play}/server/JoinGamePacket.java | 2 +- .../play}/server/PlayerAbilitiesPacket.java | 2 +- .../server/SPlayerPositionAndLookPacket.java | 4 +- .../play}/server/SpawnPositionPacket.java | 2 +- .../client/StatusServerRequestPacket.java | 34 ++++++ .../status}/server/StatusServerResponse.java | 8 +- .../main/java/mc/protocol/utils/ChatMode.java | 4 +- .../java/mc/protocol/utils/Difficulty.java | 0 .../main/java/mc/protocol/utils/GameMode.java | 0 .../java/mc/protocol/utils/LevelType.java | 0 .../main/java/mc/protocol/utils/MainHand.java | 4 +- protocol/src/main/java/mc/protocol/State.java | 100 ------------------ .../java/mc/protocol/packets/EmptyPacket.java | 21 ---- .../client/StatusServerRequestPacket.java | 18 ---- .../mc/protocol/utils/EntityActionAction.java | 33 ------ 39 files changed, 184 insertions(+), 253 deletions(-) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/Location.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/Look.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/ServerInfo.java (100%) rename {protocol/src/main/java/mc/protocol/serializer => protocol-new/src/main/java/mc/protocol/model}/ServerInfoSerializer.java (88%) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/text/Text.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/text/TextColor.java (100%) rename {protocol/src/main/java/mc/protocol/serializer => protocol-new/src/main/java/mc/protocol/model/text}/TextSerializer.java (95%) rename {protocol => protocol-new}/src/main/java/mc/protocol/model/text/TextStyle.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/packets/KeepAlivePacket.java (62%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/handshaking}/client/HandshakePacket.java (73%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/login}/client/LoginStartPacket.java (90%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/login}/server/DisconnectPacket.java (76%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/login}/server/LoginSuccessPacket.java (86%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/CPlayerPositionAndLookPacket.java (98%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/ClientSettingsPacket.java (98%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/EntityActionPacket.java (67%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/PlayerLookPacket.java (97%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/PlayerPositionPacket.java (97%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/PluginMessagePacket.java (97%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/client/TeleportConfirmPacket.java (86%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/server/ChunkDataPacket.java (99%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/server/JoinGamePacket.java (98%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/server/PlayerAbilitiesPacket.java (97%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/server/SPlayerPositionAndLookPacket.java (96%) rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/play}/server/SpawnPositionPacket.java (96%) create mode 100644 protocol-new/src/main/java/mc/protocol/packets/status/client/StatusServerRequestPacket.java rename {protocol/src/main/java/mc/protocol/packets => protocol-new/src/main/java/mc/protocol/packets/status}/server/StatusServerResponse.java (86%) rename {protocol => protocol-new}/src/main/java/mc/protocol/utils/ChatMode.java (83%) rename {protocol => protocol-new}/src/main/java/mc/protocol/utils/Difficulty.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/utils/GameMode.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/utils/LevelType.java (100%) rename {protocol => protocol-new}/src/main/java/mc/protocol/utils/MainHand.java (80%) delete mode 100644 protocol/src/main/java/mc/protocol/State.java delete mode 100644 protocol/src/main/java/mc/protocol/packets/EmptyPacket.java delete mode 100644 protocol/src/main/java/mc/protocol/packets/client/StatusServerRequestPacket.java delete mode 100644 protocol/src/main/java/mc/protocol/utils/EntityActionAction.java diff --git a/protocol-new/build.gradle b/protocol-new/build.gradle index 471a522..3162283 100644 --- a/protocol-new/build.gradle +++ b/protocol-new/build.gradle @@ -5,6 +5,7 @@ dependencies { implementation libs.netty.transport implementation libs.netty.codec + implementation libs.json testImplementation libs.lang3 } diff --git a/protocol-new/src/main/java/mc/protocol/State.java b/protocol-new/src/main/java/mc/protocol/State.java index cdb8c94..f642227 100644 --- a/protocol-new/src/main/java/mc/protocol/State.java +++ b/protocol-new/src/main/java/mc/protocol/State.java @@ -3,7 +3,16 @@ package mc.protocol; import lombok.Getter; import lombok.RequiredArgsConstructor; import mc.protocol.packets.ClientSidePacket; +import mc.protocol.packets.KeepAlivePacket; import mc.protocol.packets.ServerSidePacket; +import mc.protocol.packets.handshaking.client.HandshakePacket; +import mc.protocol.packets.login.client.LoginStartPacket; +import mc.protocol.packets.login.server.DisconnectPacket; +import mc.protocol.packets.login.server.LoginSuccessPacket; +import mc.protocol.packets.play.client.*; +import mc.protocol.packets.play.server.*; +import mc.protocol.packets.status.client.StatusServerRequestPacket; +import mc.protocol.packets.status.server.StatusServerResponse; import javax.annotation.Nullable; import java.util.Collections; @@ -14,30 +23,55 @@ public enum State { HANDSHAKING(0, // client side - Collections.emptyMap(), + Map.of(0x00, HandshakePacket.class), // server side Collections.emptyMap() ), STATUS(1, // client side - Collections.emptyMap(), + Map.of( + 0x00, StatusServerRequestPacket.class, + 0x01, KeepAlivePacket.class + ), // server side - Collections.emptyMap() + Map.of( + StatusServerResponse.class, 0x00, + KeepAlivePacket.class, 0x01 + ) ), LOGIN(2, // client side - Collections.emptyMap(), + Map.of(0x00, LoginStartPacket.class), // server side - Collections.emptyMap() + Map.of( + DisconnectPacket.class, 0x00, + LoginSuccessPacket.class, 0x02 + ) ), PLAY(3, // client side - Collections.emptyMap(), + Map.of( + 0x00, TeleportConfirmPacket.class, + 0x04, ClientSettingsPacket.class, + 0x09, PluginMessagePacket.class, + 0x0B, KeepAlivePacket.class, + 0x0D, PlayerPositionPacket.class, + 0x0E, CPlayerPositionAndLookPacket.class, + 0x0F, PlayerLookPacket.class, + 0x15, EntityActionPacket.class + ), // server side - Collections.emptyMap() + Map.of( + KeepAlivePacket.class, 0x1F, + ChunkDataPacket.class, 0x20, + JoinGamePacket.class, 0x23, + PlayerAbilitiesPacket.class,0x2C, + SPlayerPositionAndLookPacket.class, 0x2F, + SpawnPositionPacket.class, 0x46 + ) ); public static State getById(int id) { diff --git a/protocol-new/src/main/java/mc/protocol/io/NetByteBuf.java b/protocol-new/src/main/java/mc/protocol/io/NetByteBuf.java index 7f21e4e..d32834d 100644 --- a/protocol-new/src/main/java/mc/protocol/io/NetByteBuf.java +++ b/protocol-new/src/main/java/mc/protocol/io/NetByteBuf.java @@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor; import lombok.ToString; import lombok.experimental.Delegate; import lombok.extern.slf4j.Slf4j; +import mc.protocol.model.text.Text; +import mc.protocol.model.text.TextSerializer; import java.nio.charset.StandardCharsets; import java.util.UUID; @@ -32,13 +34,15 @@ import java.util.UUID; * | | | | этого числа). | * | VarInt | >= 1 ; <= 5 | Число от -2147483648 и 2147483647 | 32-bit число с плавающей размерностью от 1 до 5 байт | * | VarLong | >= 1 ; <= 10 | Число от -9223372036854775808 и 9223372036854775807 | 64-bit число с плавающей размерностью от 1 до 10 байт | + * | Text | | JSON | По файту является String (n), который имеет формат JSON | * * [1] - Single-precision floating-point format * [2] - Double-precision floating-point format * [3] - Unicode Scalar Value * * - * @see Data types + * @see Data types + * @see Chat */ @Slf4j @RequiredArgsConstructor @@ -53,6 +57,10 @@ public class NetByteBuf extends ByteBuf { byteBuf.writeByte((byte)(value & 0xFF)); } + public void writeText(Text text) { + writeString(TextSerializer.toStringPlain(text)); + } + //region String public String readString() { return readString(Short.MAX_VALUE); diff --git a/protocol/src/main/java/mc/protocol/model/Location.java b/protocol-new/src/main/java/mc/protocol/model/Location.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/Location.java rename to protocol-new/src/main/java/mc/protocol/model/Location.java diff --git a/protocol/src/main/java/mc/protocol/model/Look.java b/protocol-new/src/main/java/mc/protocol/model/Look.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/Look.java rename to protocol-new/src/main/java/mc/protocol/model/Look.java diff --git a/protocol/src/main/java/mc/protocol/model/ServerInfo.java b/protocol-new/src/main/java/mc/protocol/model/ServerInfo.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/ServerInfo.java rename to protocol-new/src/main/java/mc/protocol/model/ServerInfo.java diff --git a/protocol/src/main/java/mc/protocol/serializer/ServerInfoSerializer.java b/protocol-new/src/main/java/mc/protocol/model/ServerInfoSerializer.java similarity index 88% rename from protocol/src/main/java/mc/protocol/serializer/ServerInfoSerializer.java rename to protocol-new/src/main/java/mc/protocol/model/ServerInfoSerializer.java index f215b55..4d7d8f3 100644 --- a/protocol/src/main/java/mc/protocol/serializer/ServerInfoSerializer.java +++ b/protocol-new/src/main/java/mc/protocol/model/ServerInfoSerializer.java @@ -1,10 +1,10 @@ -package mc.protocol.serializer; +package mc.protocol.model; import com.eclipsesource.json.Json; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import lombok.experimental.UtilityClass; -import mc.protocol.model.ServerInfo; +import mc.protocol.model.text.TextSerializer; import java.util.Spliterator; import java.util.Spliterators; @@ -14,7 +14,11 @@ import java.util.stream.StreamSupport; @UtilityClass public class ServerInfoSerializer { - public JsonObject toJsonObject(ServerInfo info) { + public String toStringPlain(ServerInfo info) { + return toJsonObject(info).toString(); + } + + private JsonObject toJsonObject(ServerInfo info) { JsonObject jsonObject = Json.object() .add("version", createVersionObj(info)) .add("players", createPlayersObj(info)) diff --git a/protocol/src/main/java/mc/protocol/model/text/Text.java b/protocol-new/src/main/java/mc/protocol/model/text/Text.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/text/Text.java rename to protocol-new/src/main/java/mc/protocol/model/text/Text.java diff --git a/protocol/src/main/java/mc/protocol/model/text/TextColor.java b/protocol-new/src/main/java/mc/protocol/model/text/TextColor.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/text/TextColor.java rename to protocol-new/src/main/java/mc/protocol/model/text/TextColor.java diff --git a/protocol/src/main/java/mc/protocol/serializer/TextSerializer.java b/protocol-new/src/main/java/mc/protocol/model/text/TextSerializer.java similarity index 95% rename from protocol/src/main/java/mc/protocol/serializer/TextSerializer.java rename to protocol-new/src/main/java/mc/protocol/model/text/TextSerializer.java index 8633d02..6e8a24a 100644 --- a/protocol/src/main/java/mc/protocol/serializer/TextSerializer.java +++ b/protocol-new/src/main/java/mc/protocol/model/text/TextSerializer.java @@ -1,12 +1,9 @@ -package mc.protocol.serializer; +package mc.protocol.model.text; import com.eclipsesource.json.Json; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import lombok.experimental.UtilityClass; -import mc.protocol.model.text.Text; -import mc.protocol.model.text.TextColor; -import mc.protocol.model.text.TextStyle; import java.util.Map; @@ -16,6 +13,10 @@ public class TextSerializer { private static final Map legacyStyleCodes; private static final Map legacyColorCodes; + public String toStringPlain(Text text) { + return toJsonObject(text).toString(); + } + public JsonObject toJsonObject(Text text) { JsonObject jsonObject = Json.object(); diff --git a/protocol/src/main/java/mc/protocol/model/text/TextStyle.java b/protocol-new/src/main/java/mc/protocol/model/text/TextStyle.java similarity index 100% rename from protocol/src/main/java/mc/protocol/model/text/TextStyle.java rename to protocol-new/src/main/java/mc/protocol/model/text/TextStyle.java diff --git a/protocol/src/main/java/mc/protocol/packets/KeepAlivePacket.java b/protocol-new/src/main/java/mc/protocol/packets/KeepAlivePacket.java similarity index 62% rename from protocol/src/main/java/mc/protocol/packets/KeepAlivePacket.java rename to protocol-new/src/main/java/mc/protocol/packets/KeepAlivePacket.java index bbafd99..e0ee7fe 100644 --- a/protocol/src/main/java/mc/protocol/packets/KeepAlivePacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/KeepAlivePacket.java @@ -8,13 +8,6 @@ import mc.protocol.io.NetByteBuf; * *

Эхо-пакет, которым проверяется качество соединения между Клиентом и Сервером.

* - *

По спецификации:

- * - *
  • если Сервер не ответил Клиенту в течении 20 секунд, Клиент отключается - * и выдаёт ошибку "Timed out".
  • - *
  • если Клиент не отвечает Серверу в течении 30 секунд, Сервер отключает Клиента.
  • - *
    - * *

    Структура пакета

    *
      * | FIELD   | TYPE | NOTES                  |
    @@ -22,25 +15,32 @@ import mc.protocol.io.NetByteBuf;
      * | Payload | Long | Любое уникальное число |
      * 
    * - * @see Keep Alive + *

    По спецификации:

    + * + *
  • если Сервер не ответил Клиенту в течении 20 секунд, Клиент отключается и выдаёт ошибку "Timed out";
  • + *
  • если Клиент не отвечает Серверу в течении 30 секунд, Сервер отключает Клиента.
  • + *
    + * + * @see Keep Alive (clientbound) + * @see Keep Alive (serverbound) */ @Data public class KeepAlivePacket implements ClientSidePacket, ServerSidePacket { - private Long payload; + private long payload; @Override public void readSelf(NetByteBuf netByteBuf) { payload = netByteBuf.readLong(); } - @Override - public void passivate() { - this.payload = null; - } - @Override public void writeSelf(NetByteBuf netByteBuf) { netByteBuf.writeLong(payload); } + + @Override + public void passivate() { + this.payload = 0; + } } diff --git a/protocol/src/main/java/mc/protocol/packets/client/HandshakePacket.java b/protocol-new/src/main/java/mc/protocol/packets/handshaking/client/HandshakePacket.java similarity index 73% rename from protocol/src/main/java/mc/protocol/packets/client/HandshakePacket.java rename to protocol-new/src/main/java/mc/protocol/packets/handshaking/client/HandshakePacket.java index 005c6b9..1c95075 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/HandshakePacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/handshaking/client/HandshakePacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.handshaking.client; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -18,14 +18,14 @@ import mc.protocol.packets.ClientSidePacket; * | FIELD | TYPE | NOTES | * |------------------|----------------|----------------------------------------------| * | Protocol version | VarInt | Версия протокола [1] | - * | Server address | Stirng | Hostname или IP | + * | Server address | Stirng (255) | Hostname или IP | * | Server port | Unsigned Short | Порт сервера | - * | Next stage | VarInt | ID State на который необходимо переключиться | + * | Next state | VarInt | ID State на который необходимо переключиться | * - * [1] - Protocol version numbers + * [1] - Protocol version numbers * * - * @see Handshake + * @see Handshake * @see State */ @NoArgsConstructor @@ -41,10 +41,10 @@ public class HandshakePacket implements ClientSidePacket { @Override public void readSelf(NetByteBuf netByteBuf) { - protocolVersion = netByteBuf.readVarInt(); - host = netByteBuf.readString(255); - port = netByteBuf.readUnsignedShort(); - nextState = State.getById(netByteBuf.readVarInt()); + this.protocolVersion = netByteBuf.readVarInt(); + this.host = netByteBuf.readString(255); + this.port = netByteBuf.readUnsignedShort(); + this.nextState = State.getById(netByteBuf.readVarInt()); } @Override @@ -54,5 +54,4 @@ public class HandshakePacket implements ClientSidePacket { this.port = 0; this.nextState = null; } - } diff --git a/protocol/src/main/java/mc/protocol/packets/client/LoginStartPacket.java b/protocol-new/src/main/java/mc/protocol/packets/login/client/LoginStartPacket.java similarity index 90% rename from protocol/src/main/java/mc/protocol/packets/client/LoginStartPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/login/client/LoginStartPacket.java index 0462715..b89f4cc 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/LoginStartPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/login/client/LoginStartPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.login.client; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -19,7 +19,7 @@ import mc.protocol.packets.ClientSidePacket; * | Name | String | Имя/Логин игрока | * * - * @see Login start + * @see Login start */ @NoArgsConstructor @Getter diff --git a/protocol/src/main/java/mc/protocol/packets/server/DisconnectPacket.java b/protocol-new/src/main/java/mc/protocol/packets/login/server/DisconnectPacket.java similarity index 76% rename from protocol/src/main/java/mc/protocol/packets/server/DisconnectPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/login/server/DisconnectPacket.java index 7eae3aa..04418ec 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/DisconnectPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/login/server/DisconnectPacket.java @@ -1,11 +1,10 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.login.server; import lombok.Data; import mc.protocol.State; import mc.protocol.io.NetByteBuf; import mc.protocol.model.text.Text; import mc.protocol.packets.ServerSidePacket; -import mc.protocol.serializer.TextSerializer; /** * Diconnect packet. @@ -16,7 +15,7 @@ import mc.protocol.serializer.TextSerializer; *
      * | FIELD       | TYPE   | NOTES                            |
      * |-------------|--------|----------------------------------|
    - * | JSON Reason | String | Причина отключения. Опционально. |
    + * | JSON Reason | Text   | Причина отключения. Опционально. |
      * 
    * *

    Пример JSON Reason

    @@ -26,7 +25,7 @@ import mc.protocol.serializer.TextSerializer; * } * * - * @see Disconnect + * @see Disconnect (login) * @see State */ @Data @@ -39,6 +38,6 @@ public class DisconnectPacket implements ServerSidePacket { @Override public void writeSelf(NetByteBuf netByteBuf) { - netByteBuf.writeString(TextSerializer.toJsonObject(reason).toString()); + netByteBuf.writeText(reason); } } diff --git a/protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java b/protocol-new/src/main/java/mc/protocol/packets/login/server/LoginSuccessPacket.java similarity index 86% rename from protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/login/server/LoginSuccessPacket.java index 9f8db49..e1e481f 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/LoginSuccessPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/login/server/LoginSuccessPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.login.server; import lombok.Data; import mc.protocol.io.NetByteBuf; @@ -27,7 +27,7 @@ public class LoginSuccessPacket implements ServerSidePacket { @Override public void writeSelf(NetByteBuf netByteBuf) { - netByteBuf.writeString(uuid.toString()); - netByteBuf.writeString(name); + netByteBuf.writeString(this.uuid.toString()); + netByteBuf.writeString(this.name); } } diff --git a/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/CPlayerPositionAndLookPacket.java similarity index 98% rename from protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/CPlayerPositionAndLookPacket.java index d7be871..8b5f801 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/CPlayerPositionAndLookPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/CPlayerPositionAndLookPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/protocol/src/main/java/mc/protocol/packets/client/ClientSettingsPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/ClientSettingsPacket.java similarity index 98% rename from protocol/src/main/java/mc/protocol/packets/client/ClientSettingsPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/ClientSettingsPacket.java index b22914d..497fb1d 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/ClientSettingsPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/ClientSettingsPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.*; import mc.protocol.utils.ChatMode; diff --git a/protocol/src/main/java/mc/protocol/packets/client/EntityActionPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/EntityActionPacket.java similarity index 67% rename from protocol/src/main/java/mc/protocol/packets/client/EntityActionPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/EntityActionPacket.java index 807dd4c..f537a43 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/EntityActionPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/EntityActionPacket.java @@ -1,12 +1,10 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.ToString; +import lombok.*; import mc.protocol.io.NetByteBuf; import mc.protocol.packets.ClientSidePacket; -import mc.protocol.utils.EntityActionAction; + +import javax.annotation.Nullable; /** * Entity Action packet. @@ -31,7 +29,7 @@ import mc.protocol.utils.EntityActionAction; public class EntityActionPacket implements ClientSidePacket { private Integer entityId; - private EntityActionAction action; + private Action action; private Integer jumpBoost; @Override @@ -40,7 +38,7 @@ public class EntityActionPacket implements ClientSidePacket { int actionId = netByteBuf.readVarInt(); this.jumpBoost = netByteBuf.readVarInt(); - this.action = EntityActionAction.valueOfCode(actionId); + this.action = Action.valueOfCode(actionId); } @Override @@ -49,4 +47,31 @@ public class EntityActionPacket implements ClientSidePacket { this.action = null; this.jumpBoost = null; } + + @RequiredArgsConstructor + public enum Action { + START_SNEAKING(0), + STOP_SNEAKING(1), + LEAVE_BED(2), + START_SPRINTING(3), + STOP_SPRINTING(4), + START_JUMP_WITH_HORSE(5), + STOP_JUMP_WITH_HORSE(6), + OPEN_HORSE_INVENTORY(7), + START_FLYING_WITH_ELYTRA(8); + + @Nullable + public static Action valueOfCode(int code) { + for (Action action : Action.values()) { + if (action.code == code) { + return action; + } + } + + return null; + } + + @Getter + private final int code; + } } diff --git a/protocol/src/main/java/mc/protocol/packets/client/PlayerLookPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerLookPacket.java similarity index 97% rename from protocol/src/main/java/mc/protocol/packets/client/PlayerLookPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerLookPacket.java index 35568fa..5d24ddc 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/PlayerLookPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerLookPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerPositionPacket.java similarity index 97% rename from protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerPositionPacket.java index 3be5633..7939faa 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/PlayerPositionPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/PlayerPositionPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/PluginMessagePacket.java similarity index 97% rename from protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/PluginMessagePacket.java index 2ae5ab0..6a89caa 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/PluginMessagePacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/PluginMessagePacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/client/TeleportConfirmPacket.java similarity index 86% rename from protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/client/TeleportConfirmPacket.java index fd120e9..47c0834 100644 --- a/protocol/src/main/java/mc/protocol/packets/client/TeleportConfirmPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/client/TeleportConfirmPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.client; +package mc.protocol.packets.play.client; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -6,15 +6,15 @@ import lombok.NoArgsConstructor; import lombok.ToString; import mc.protocol.io.NetByteBuf; import mc.protocol.packets.ClientSidePacket; -import mc.protocol.packets.server.SPlayerPositionAndLookPacket; +import mc.protocol.packets.play.server.SPlayerPositionAndLookPacket; /** * Teleport сonfirm packet. * *

    Структура пакета

    *
    - * | FIELD       | TYPE   | NOTES                                                     |
    - * |-------------|--------|-----------------------------------------------------------|
    + * | FIELD       | TYPE   | NOTES                                                      |
    + * |-------------|--------|------------------------------------------------------------|
      * | Teleport ID | VarInt | ID, который был выдан пакетом {@link SPlayerPositionAndLookPacket} |
      * 
    * diff --git a/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java similarity index 99% rename from protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java index cfcac8d..62c48c3 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/ChunkDataPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/server/ChunkDataPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.play.server; import io.netty.buffer.Unpooled; import lombok.Data; diff --git a/protocol/src/main/java/mc/protocol/packets/server/JoinGamePacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/server/JoinGamePacket.java similarity index 98% rename from protocol/src/main/java/mc/protocol/packets/server/JoinGamePacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/server/JoinGamePacket.java index a427359..c3e2ebe 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/JoinGamePacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/server/JoinGamePacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.play.server; import lombok.Data; import mc.protocol.utils.Difficulty; diff --git a/protocol/src/main/java/mc/protocol/packets/server/PlayerAbilitiesPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/server/PlayerAbilitiesPacket.java similarity index 97% rename from protocol/src/main/java/mc/protocol/packets/server/PlayerAbilitiesPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/server/PlayerAbilitiesPacket.java index e2c084a..b4eb69c 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/PlayerAbilitiesPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/server/PlayerAbilitiesPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.play.server; import lombok.Data; import mc.protocol.io.NetByteBuf; diff --git a/protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/server/SPlayerPositionAndLookPacket.java similarity index 96% rename from protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/server/SPlayerPositionAndLookPacket.java index d9ceac4..f4a54ec 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/SPlayerPositionAndLookPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/server/SPlayerPositionAndLookPacket.java @@ -1,11 +1,11 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.play.server; import lombok.Data; import mc.protocol.io.NetByteBuf; import mc.protocol.model.Location; import mc.protocol.model.Look; import mc.protocol.packets.ServerSidePacket; -import mc.protocol.packets.client.TeleportConfirmPacket; +import mc.protocol.packets.play.client.TeleportConfirmPacket; /** * Установка позиции и угла осмотра Игрока. diff --git a/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java b/protocol-new/src/main/java/mc/protocol/packets/play/server/SpawnPositionPacket.java similarity index 96% rename from protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java rename to protocol-new/src/main/java/mc/protocol/packets/play/server/SpawnPositionPacket.java index 41a3d10..3393adb 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/SpawnPositionPacket.java +++ b/protocol-new/src/main/java/mc/protocol/packets/play/server/SpawnPositionPacket.java @@ -1,4 +1,4 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.play.server; import lombok.Data; import mc.protocol.io.NetByteBuf; diff --git a/protocol-new/src/main/java/mc/protocol/packets/status/client/StatusServerRequestPacket.java b/protocol-new/src/main/java/mc/protocol/packets/status/client/StatusServerRequestPacket.java new file mode 100644 index 0000000..9dee695 --- /dev/null +++ b/protocol-new/src/main/java/mc/protocol/packets/status/client/StatusServerRequestPacket.java @@ -0,0 +1,34 @@ +package mc.protocol.packets.status.client; + +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import mc.protocol.io.NetByteBuf; +import mc.protocol.packets.ClientSidePacket; +import mc.protocol.packets.ServerSidePacket; + +/** + * Status server packet, request. + * + *

    Клиент запрашивает получение информации о сервере

    + */ +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@ToString +public class StatusServerRequestPacket implements ClientSidePacket, ServerSidePacket { + + @Override + public void readSelf(NetByteBuf netByteBuf) { + // empty + } + + @Override + public void writeSelf(NetByteBuf netByteBuf) { + // empty + } + + @Override + public void passivate() { + // pass + } +} diff --git a/protocol/src/main/java/mc/protocol/packets/server/StatusServerResponse.java b/protocol-new/src/main/java/mc/protocol/packets/status/server/StatusServerResponse.java similarity index 86% rename from protocol/src/main/java/mc/protocol/packets/server/StatusServerResponse.java rename to protocol-new/src/main/java/mc/protocol/packets/status/server/StatusServerResponse.java index 35973c1..544c10f 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/StatusServerResponse.java +++ b/protocol-new/src/main/java/mc/protocol/packets/status/server/StatusServerResponse.java @@ -1,10 +1,8 @@ -package mc.protocol.packets.server; +package mc.protocol.packets.status.server; import lombok.Data; import mc.protocol.io.NetByteBuf; -import mc.protocol.model.ServerInfo; import mc.protocol.packets.ServerSidePacket; -import mc.protocol.serializer.ServerInfoSerializer; /** * Status server packet, response. @@ -52,10 +50,10 @@ public class StatusServerResponse implements ServerSidePacket { /** * Информация о серере. */ - private ServerInfo info; + private String info; @Override public void writeSelf(NetByteBuf netByteBuf) { - netByteBuf.writeString(ServerInfoSerializer.toJsonObject(info).toString()); + netByteBuf.writeString(info); } } diff --git a/protocol/src/main/java/mc/protocol/utils/ChatMode.java b/protocol-new/src/main/java/mc/protocol/utils/ChatMode.java similarity index 83% rename from protocol/src/main/java/mc/protocol/utils/ChatMode.java rename to protocol-new/src/main/java/mc/protocol/utils/ChatMode.java index 992862a..eec0881 100644 --- a/protocol/src/main/java/mc/protocol/utils/ChatMode.java +++ b/protocol-new/src/main/java/mc/protocol/utils/ChatMode.java @@ -11,10 +11,10 @@ public enum ChatMode { public static ChatMode valueById(int id) { // а зачем усложнять? //@formatter:off - if (id == 1) return FULL; + if (id == 1) return FULL; else if (id == 2) return COMMANDS_ONLY; else if (id == 3) return HIDDEN; - else return null; + else return null; //@formatter:on } } diff --git a/protocol/src/main/java/mc/protocol/utils/Difficulty.java b/protocol-new/src/main/java/mc/protocol/utils/Difficulty.java similarity index 100% rename from protocol/src/main/java/mc/protocol/utils/Difficulty.java rename to protocol-new/src/main/java/mc/protocol/utils/Difficulty.java diff --git a/protocol/src/main/java/mc/protocol/utils/GameMode.java b/protocol-new/src/main/java/mc/protocol/utils/GameMode.java similarity index 100% rename from protocol/src/main/java/mc/protocol/utils/GameMode.java rename to protocol-new/src/main/java/mc/protocol/utils/GameMode.java diff --git a/protocol/src/main/java/mc/protocol/utils/LevelType.java b/protocol-new/src/main/java/mc/protocol/utils/LevelType.java similarity index 100% rename from protocol/src/main/java/mc/protocol/utils/LevelType.java rename to protocol-new/src/main/java/mc/protocol/utils/LevelType.java diff --git a/protocol/src/main/java/mc/protocol/utils/MainHand.java b/protocol-new/src/main/java/mc/protocol/utils/MainHand.java similarity index 80% rename from protocol/src/main/java/mc/protocol/utils/MainHand.java rename to protocol-new/src/main/java/mc/protocol/utils/MainHand.java index 3dec589..5e30020 100644 --- a/protocol/src/main/java/mc/protocol/utils/MainHand.java +++ b/protocol-new/src/main/java/mc/protocol/utils/MainHand.java @@ -10,9 +10,9 @@ public enum MainHand { public static MainHand valueById(int id) { // а зачем усложнять? //@formatter:off - if (id == 0) return LEFT; + if (id == 0) return LEFT; else if (id == 1) return RIGHT; - else return null; + else return null; //@formatter:on } } diff --git a/protocol/src/main/java/mc/protocol/State.java b/protocol/src/main/java/mc/protocol/State.java deleted file mode 100644 index a998fde..0000000 --- a/protocol/src/main/java/mc/protocol/State.java +++ /dev/null @@ -1,100 +0,0 @@ -package mc.protocol; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import mc.protocol.packets.ClientSidePacket; -import mc.protocol.packets.Packet; -import mc.protocol.packets.KeepAlivePacket; -import mc.protocol.packets.ServerSidePacket; -import mc.protocol.packets.client.*; -import mc.protocol.packets.server.*; - -import javax.annotation.Nullable; -import java.util.Collections; -import java.util.Map; - -@RequiredArgsConstructor -public enum State { - - HANDSHAKING(-1, - // client side - Map.of(0x00, HandshakePacket.class) - ), - STATUS(1, - // client side - Map.of( - 0x00, StatusServerRequestPacket.class, - 0x01, KeepAlivePacket.class - ), - // server side - Map.of( - StatusServerResponse.class, 0x00, - KeepAlivePacket.class, 0x01 - ) - ), - LOGIN(2, - // server bound - Map.of(0x00, LoginStartPacket.class), - // client bound - Map.of( - DisconnectPacket.class, 0x00, - LoginSuccessPacket.class, 0x02 - ) - ), - PLAY(3, - // server bound - Map.of( - 0x00, TeleportConfirmPacket.class, - 0x04, ClientSettingsPacket.class, - 0x09, PluginMessagePacket.class, - 0x0B, KeepAlivePacket.class, - 0x0D, PlayerPositionPacket.class, - 0x0E, CPlayerPositionAndLookPacket.class, - 0x0F, PlayerLookPacket.class, - 0x15, EntityActionPacket.class - ), - // client bound - Map.of( - KeepAlivePacket.class, 0x1F, - ChunkDataPacket.class, 0x20, - JoinGamePacket.class, 0x23, - PlayerAbilitiesPacket.class,0x2C, - SPlayerPositionAndLookPacket.class, 0x2F, - SpawnPositionPacket.class, 0x46 - ) - ); - - @Nullable - public static State getById(int id) { - for (State state : State.values()) { - if (state.id == id) { - return state; - } - } - - return null; - } - - @Getter - private final int id; - - @Getter - private final Map> clientSidePackets; - private final Map, Integer> serverSidePackets; - - State(int id, Map> clientSidePackets) { - this.id = id; - this.clientSidePackets = clientSidePackets; - this.serverSidePackets = Collections.emptyMap(); - } - - @Nullable - public Class getClientSidePacketById(int id) { - return clientSidePackets == null ? null : clientSidePackets.get(id); - } - - @Nullable - public Integer getServerSidePacketId(Class clazz) { - return serverSidePackets == null ? null : serverSidePackets.get(clazz); - } -} diff --git a/protocol/src/main/java/mc/protocol/packets/EmptyPacket.java b/protocol/src/main/java/mc/protocol/packets/EmptyPacket.java deleted file mode 100644 index 0e3a740..0000000 --- a/protocol/src/main/java/mc/protocol/packets/EmptyPacket.java +++ /dev/null @@ -1,21 +0,0 @@ -package mc.protocol.packets; - -import mc.protocol.io.NetByteBuf; - -public abstract class EmptyPacket implements ClientSidePacket, ServerSidePacket { - - @Override - public void readSelf(NetByteBuf netByteBuf) { - // empty - } - - @Override - public void writeSelf(NetByteBuf netByteBuf) { - // empty - } - - @Override - public void passivate() { - // pass - } -} diff --git a/protocol/src/main/java/mc/protocol/packets/client/StatusServerRequestPacket.java b/protocol/src/main/java/mc/protocol/packets/client/StatusServerRequestPacket.java deleted file mode 100644 index 5f4e84c..0000000 --- a/protocol/src/main/java/mc/protocol/packets/client/StatusServerRequestPacket.java +++ /dev/null @@ -1,18 +0,0 @@ -package mc.protocol.packets.client; - -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import lombok.ToString; -import mc.protocol.packets.EmptyPacket; - -/** - * Status server packet, request. - * - *

    Клиент запрашивает получение информации о сервере

    - */ -@NoArgsConstructor -@EqualsAndHashCode(callSuper = false) -@ToString -public class StatusServerRequestPacket extends EmptyPacket { - -} diff --git a/protocol/src/main/java/mc/protocol/utils/EntityActionAction.java b/protocol/src/main/java/mc/protocol/utils/EntityActionAction.java deleted file mode 100644 index 549cea2..0000000 --- a/protocol/src/main/java/mc/protocol/utils/EntityActionAction.java +++ /dev/null @@ -1,33 +0,0 @@ -package mc.protocol.utils; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -import javax.annotation.Nullable; - -@RequiredArgsConstructor -public enum EntityActionAction { - START_SNEAKING(0), - STOP_SNEAKING(1), - LEAVE_BED(2), - START_SPRINTING(3), - STOP_SPRINTING(4), - START_JUMP_WITH_HORSE(5), - STOP_JUMP_WITH_HORSE(6), - OPEN_HORSE_INVENTORY(7), - START_FLYING_WITH_ELYTRA(8); - - @Nullable - public static EntityActionAction valueOfCode(int code) { - for (EntityActionAction action : EntityActionAction.values()) { - if (action.code == code) { - return action; - } - } - - return null; - } - - @Getter - private final int code; -}