diff --git a/src/main/java/mc/protocol/EmptyPacket.java b/src/main/java/mc/protocol/EmptyPacket.java new file mode 100644 index 0000000..15c98b7 --- /dev/null +++ b/src/main/java/mc/protocol/EmptyPacket.java @@ -0,0 +1,17 @@ +package mc.protocol; + +import mc.protocol.io.NetInputStream; +import mc.protocol.io.NetOutputStream; + +public abstract class EmptyPacket implements Packet { + + @Override + public void readSelf(NetInputStream netInputStream) { + // empty + } + + @Override + public void writeSelf(NetOutputStream netOutputStream) { + // empty + } +} diff --git a/src/main/java/mc/protocol/handshake/client/HandshakePacket.java b/src/main/java/mc/protocol/handshake/client/HandshakePacket.java index 3b94b12..6f72ed9 100644 --- a/src/main/java/mc/protocol/handshake/client/HandshakePacket.java +++ b/src/main/java/mc/protocol/handshake/client/HandshakePacket.java @@ -6,6 +6,26 @@ import mc.protocol.State; import mc.protocol.io.NetInputStream; import mc.protocol.io.NetOutputStream; +/** + * Handshake packet. + * + *
Данный пакет заставляет сервер переключить текущий {@link State}
+ * + *Структура пакета + *
+ * | FIELD | TYPE | NOTES | + * |------------------|----------------|----------------------------------------------| + * | Protocol version | VarInt | Версия протокола [1] | + * | Server address | Stirng | Hostname или IP | + * | Server port | Unsigned Short | Порт сервера | + * | Next stage | VarInt | ID State на который необходимо переключиться | + * + * [1] - Protocol version numbers + *+ * + * @see Handshake + * @see State + */ @Data public class HandshakePacket implements Packet { diff --git a/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java b/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java index ff2b348..4acad4c 100644 --- a/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java +++ b/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java @@ -1,17 +1,5 @@ package mc.protocol.io.coder; -/* -Packet format: - -| FIELD | TYPE | NOTES | -+------------+--------+-----------------------------------+ -| SIZE | VarInt | = sizeOf(id) + sizeOf(byte_array) | -| PACKET ID | VarInt | | -| BYTE ARRAY | bytes | | - -https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression -*/ - import lombok.RequiredArgsConstructor; import mc.protocol.Packet; import mc.protocol.PacketDirection; diff --git a/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java b/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java index d1c7731..973cf8d 100644 --- a/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java +++ b/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java @@ -8,18 +8,6 @@ import mc.protocol.io.NetOutputStream; import java.util.Objects; -/* -Packet format: - -| FIELD | TYPE | NOTES | -+------------+--------+-----------------------------------+ -| SIZE | VarInt | = sizeOf(id) + sizeOf(byte_array) | -| PACKET ID | VarInt | | -| BYTE ARRAY | bytes | | - -https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression -*/ - @RequiredArgsConstructor public class ProtocolEncoder { diff --git a/src/main/java/mc/protocol/io/coder/package-info.java b/src/main/java/mc/protocol/io/coder/package-info.java new file mode 100644 index 0000000..aa5d0b8 --- /dev/null +++ b/src/main/java/mc/protocol/io/coder/package-info.java @@ -0,0 +1,13 @@ +/* +Формат пакета без компрессии + +| FIELD | TYPE | NOTES | +|-------------|--------|-----------------------------------| +| SIZE | VarInt | = sizeOf(id) + sizeOf(byte_array) | +| PACKET ID | VarInt | | +| PACKET DATA | bytes | | + +https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression +*/ + +package mc.protocol.io.coder; \ No newline at end of file diff --git a/src/main/java/mc/protocol/io/package-info.java b/src/main/java/mc/protocol/io/package-info.java new file mode 100644 index 0000000..80569dc --- /dev/null +++ b/src/main/java/mc/protocol/io/package-info.java @@ -0,0 +1,29 @@ +/* +Data types + +| Type | Size (bytes) | Кодирование | Коментарий | +|----------------|-----------------------|-----------------------------------------------------|--------------------------------------------------------------------------| +| Boolean | 1 | True или False | True = 0x01; False = 0x00 | +| Byte | 1 | Число от -128 до 127 | 8-bit число со знаком | +| Unsigned Byte | 1 | Число от 0 до 255 | 8-bit без знаковое число | +| Short | 2 | Число от -32768 до 32767 | 16-bit число со знаком | +| Unsigned Short | 2 | Число от -32768 до 32767 | 16-bit без знаковое число | +| Int | 4 | Число от -2147483648 и 2147483647 | 32-bit число со знаком | +| Long | 8 | Число от -9223372036854775808 и 9223372036854775807 | 64-bit число со знаком | +| Float | 4 | 32-bit число одинарной точности (IEEE 754-2008) | [1] | +| Double | 8 | 64-bit число одинарной точности (IEEE 754-2008) | [2] | +| String (n) | >= 1 ; <= (n * 4) + 3 | Последовательность Unicode scalar values | В начале пишется длина строки в VarInt, после чего записываются символы. | +| | | | Каждый символ может состоять максимум из 4 байт. [3] | +| | | | Максимальная длина строки - 32767 (3 - это как раз размер VarInt для | +| | | | этого числа). | +| VarInt | >= 1 ; <= 5 | Число от -2147483648 и 2147483647 | 32-bit число с плавающей размерностью от 1 до 5 байт | +| VarLong | >= 1 ; <= 10 | Число от -9223372036854775808 и 9223372036854775807 | 64-bit число с плавающей размерностью от 1 до 10 байт | + +[1] - https://en.wikipedia.org/wiki/Single-precision_floating-point_format +[2] - https://en.wikipedia.org/wiki/Double-precision_floating-point_format +[3] - http://unicode.org/glossary/#unicode_scalar_value + +https://wiki.vg/index.php?title=Protocol&oldid=7368#Data_types + */ + +package mc.protocol.io; \ No newline at end of file diff --git a/src/main/java/mc/protocol/status/client/StatusServerRequest.java b/src/main/java/mc/protocol/status/client/StatusServerRequest.java index eb94b10..59ae612 100644 --- a/src/main/java/mc/protocol/status/client/StatusServerRequest.java +++ b/src/main/java/mc/protocol/status/client/StatusServerRequest.java @@ -1,18 +1,12 @@ package mc.protocol.status.client; -import mc.protocol.Packet; -import mc.protocol.io.NetInputStream; -import mc.protocol.io.NetOutputStream; +import mc.protocol.EmptyPacket; -public class StatusServerRequest implements Packet { +/** + * Status server packet, request. + * + *
Клиент запрашивает получение информации о сервере
+ */ +public class StatusServerRequest extends EmptyPacket { - @Override - public void readSelf(NetInputStream netInputStream) { - // empty - } - - @Override - public void writeSelf(NetOutputStream netOutputStream) { - // empty - } } diff --git a/src/main/java/mc/protocol/status/server/StatusServerResponse.java b/src/main/java/mc/protocol/status/server/StatusServerResponse.java index 2ad0c01..f540f12 100644 --- a/src/main/java/mc/protocol/status/server/StatusServerResponse.java +++ b/src/main/java/mc/protocol/status/server/StatusServerResponse.java @@ -5,6 +5,20 @@ import mc.protocol.Packet; import mc.protocol.io.NetInputStream; import mc.protocol.io.NetOutputStream; +/** + * Status server packet, response. + * + *Информация о сервере
+ * + *Структура пакета + *
+ * | FIELD | TYPE | NOTES | + * |---------------|--------|-----------------------------------------| + * | JSON Response | String | Информация о сервере в JSON формате [1] | + * + * [1] - Server List Ping: Response + *+ */ @Data public class StatusServerResponse implements Packet {