From 3660b2e5e8c57fae0179c48f90cb9af0156467e1 Mon Sep 17 00:00:00 2001
From: DmitriyMX
Date: Fri, 1 May 2020 19:35:54 +0300
Subject: [PATCH 1/3] =?UTF-8?q?=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?=
=?UTF-8?q?=D0=BE=D0=B9=20=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80?=
=?UTF-8?q?=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/java/mc/protocol/Packet.java | 3 ++
src/main/java/mc/protocol/State.java | 46 +++++++++++--------
.../handshake/client/HandshakePacket.java | 4 +-
.../protocol/{ => io}/DecoderException.java | 2 +-
.../mc/protocol/{ => io}/NetInputStream.java | 6 ++-
.../mc/protocol/{ => io}/NetOutputStream.java | 4 +-
.../coder/ByteArrayNetOutputStream.java | 4 +-
.../{ => io}/coder/ProtocolDecoder.java | 4 +-
.../{ => io}/coder/ProtocolEncoder.java | 7 ++-
.../status/client/StatusServerRequest.java | 4 +-
.../status/server/StatusServerResponse.java | 4 +-
11 files changed, 54 insertions(+), 34 deletions(-)
rename src/main/java/mc/protocol/{ => io}/DecoderException.java (85%)
rename src/main/java/mc/protocol/{ => io}/NetInputStream.java (96%)
rename src/main/java/mc/protocol/{ => io}/NetOutputStream.java (98%)
rename src/main/java/mc/protocol/{ => io}/coder/ByteArrayNetOutputStream.java (90%)
rename src/main/java/mc/protocol/{ => io}/coder/ProtocolDecoder.java (95%)
rename src/main/java/mc/protocol/{ => io}/coder/ProtocolEncoder.java (86%)
diff --git a/src/main/java/mc/protocol/Packet.java b/src/main/java/mc/protocol/Packet.java
index f1ee9d7..2b3809a 100644
--- a/src/main/java/mc/protocol/Packet.java
+++ b/src/main/java/mc/protocol/Packet.java
@@ -1,5 +1,8 @@
package mc.protocol;
+import mc.protocol.io.NetInputStream;
+import mc.protocol.io.NetOutputStream;
+
public interface Packet {
void readSelf(NetInputStream netInputStream);
diff --git a/src/main/java/mc/protocol/State.java b/src/main/java/mc/protocol/State.java
index bce5511..df5038a 100644
--- a/src/main/java/mc/protocol/State.java
+++ b/src/main/java/mc/protocol/State.java
@@ -2,10 +2,8 @@ package mc.protocol;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableBiMap;
-import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
-import lombok.Setter;
import mc.protocol.handshake.client.HandshakePacket;
import mc.protocol.status.client.StatusServerRequest;
import mc.protocol.status.server.StatusServerResponse;
@@ -13,20 +11,23 @@ import mc.protocol.status.server.StatusServerResponse;
@RequiredArgsConstructor
public enum State {
- HANDSHAKING(-1){{
- setServerBoundPackets(ImmutableBiMap.of(
- 0x00, HandshakePacket.class
- ));
- }},
+ HANDSHAKING(-1,
+ // server bound
+ ImmutableBiMap.of(
+ 0x00, HandshakePacket.class
+ )
+ ),
PLAY(0),
- STATUS(1){{
- setServerBoundPackets(ImmutableBiMap.of(
- 0x00, StatusServerRequest.class
- ));
- setClientBoundPackets(ImmutableBiMap.of(
- 0x00, StatusServerResponse.class
- ));
- }},
+ STATUS(1,
+ // server bound
+ ImmutableBiMap.of(
+ 0x00, StatusServerRequest.class
+ ),
+ // client bound
+ ImmutableBiMap.of(
+ 0x00, StatusServerResponse.class
+ )
+ ),
LOGIN(2);
public static State getById(int id) {
@@ -42,11 +43,20 @@ public enum State {
@Getter
private final int id;
- @Setter(value = AccessLevel.PROTECTED)
+ private BiMap> serverBoundPackets;
+
private BiMap> clientBoundPackets;
- @Setter(value = AccessLevel.PROTECTED)
- private BiMap> serverBoundPackets;
+ State(int id, BiMap> serverBoundPackets) {
+ this.id = id;
+ this.serverBoundPackets = serverBoundPackets;
+ }
+
+ State(int id, BiMap> serverBoundPackets, BiMap> clientBoundPackets) {
+ this.id = id;
+ this.serverBoundPackets = serverBoundPackets;
+ this.clientBoundPackets = clientBoundPackets;
+ }
public Class extends Packet> getPacketById(PacketDirection direction, int id) {
if (direction == PacketDirection.CLIENT_BOUND) {
diff --git a/src/main/java/mc/protocol/handshake/client/HandshakePacket.java b/src/main/java/mc/protocol/handshake/client/HandshakePacket.java
index 2d2f148..3b94b12 100644
--- a/src/main/java/mc/protocol/handshake/client/HandshakePacket.java
+++ b/src/main/java/mc/protocol/handshake/client/HandshakePacket.java
@@ -1,10 +1,10 @@
package mc.protocol.handshake.client;
import lombok.Data;
-import mc.protocol.NetInputStream;
-import mc.protocol.NetOutputStream;
import mc.protocol.Packet;
import mc.protocol.State;
+import mc.protocol.io.NetInputStream;
+import mc.protocol.io.NetOutputStream;
@Data
public class HandshakePacket implements Packet {
diff --git a/src/main/java/mc/protocol/DecoderException.java b/src/main/java/mc/protocol/io/DecoderException.java
similarity index 85%
rename from src/main/java/mc/protocol/DecoderException.java
rename to src/main/java/mc/protocol/io/DecoderException.java
index ac45ea2..a30ee19 100644
--- a/src/main/java/mc/protocol/DecoderException.java
+++ b/src/main/java/mc/protocol/io/DecoderException.java
@@ -1,4 +1,4 @@
-package mc.protocol;
+package mc.protocol.io;
public class DecoderException extends RuntimeException {
diff --git a/src/main/java/mc/protocol/NetInputStream.java b/src/main/java/mc/protocol/io/NetInputStream.java
similarity index 96%
rename from src/main/java/mc/protocol/NetInputStream.java
rename to src/main/java/mc/protocol/io/NetInputStream.java
index 968dfb8..fa2169e 100644
--- a/src/main/java/mc/protocol/NetInputStream.java
+++ b/src/main/java/mc/protocol/io/NetInputStream.java
@@ -1,4 +1,4 @@
-package mc.protocol;
+package mc.protocol.io;
import java.io.IOException;
import java.io.InputStream;
@@ -39,7 +39,7 @@ public abstract class NetInputStream extends InputStream {
if (length == 0) {
return "";
} else if (length > maxLength) {
- throw new DecoderException("String length exceeds maximum length: " + length + " > " + maxLength);
+ throw new DecoderException("String length exceeds maximum length: " + length + " > " + maxLength);
} else if (length < 0) {
throw new DecoderException("String length less zero!");
}
@@ -101,6 +101,8 @@ public abstract class NetInputStream extends InputStream {
}
public abstract byte readByte();
+
public abstract int readBytes(byte[] buffer, int offset, int lengtn);
+
public abstract int readShort();
}
diff --git a/src/main/java/mc/protocol/NetOutputStream.java b/src/main/java/mc/protocol/io/NetOutputStream.java
similarity index 98%
rename from src/main/java/mc/protocol/NetOutputStream.java
rename to src/main/java/mc/protocol/io/NetOutputStream.java
index aa0ca68..0435ad0 100644
--- a/src/main/java/mc/protocol/NetOutputStream.java
+++ b/src/main/java/mc/protocol/io/NetOutputStream.java
@@ -1,4 +1,4 @@
-package mc.protocol;
+package mc.protocol.io;
import java.io.IOException;
import java.io.OutputStream;
@@ -84,6 +84,8 @@ public abstract class NetOutputStream extends OutputStream {
}
public abstract void writeByte(int value);
+
public abstract void writeBytes(byte[] buffer, int offset, int lengtn);
+
public abstract void writeShort(int value);
}
diff --git a/src/main/java/mc/protocol/coder/ByteArrayNetOutputStream.java b/src/main/java/mc/protocol/io/coder/ByteArrayNetOutputStream.java
similarity index 90%
rename from src/main/java/mc/protocol/coder/ByteArrayNetOutputStream.java
rename to src/main/java/mc/protocol/io/coder/ByteArrayNetOutputStream.java
index 9329ffa..f42ee07 100644
--- a/src/main/java/mc/protocol/coder/ByteArrayNetOutputStream.java
+++ b/src/main/java/mc/protocol/io/coder/ByteArrayNetOutputStream.java
@@ -1,6 +1,6 @@
-package mc.protocol.coder;
+package mc.protocol.io.coder;
-import mc.protocol.NetOutputStream;
+import mc.protocol.io.NetOutputStream;
import java.io.ByteArrayOutputStream;
diff --git a/src/main/java/mc/protocol/coder/ProtocolDecoder.java b/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java
similarity index 95%
rename from src/main/java/mc/protocol/coder/ProtocolDecoder.java
rename to src/main/java/mc/protocol/io/coder/ProtocolDecoder.java
index 9715c7b..ff2b348 100644
--- a/src/main/java/mc/protocol/coder/ProtocolDecoder.java
+++ b/src/main/java/mc/protocol/io/coder/ProtocolDecoder.java
@@ -1,4 +1,4 @@
-package mc.protocol.coder;
+package mc.protocol.io.coder;
/*
Packet format:
@@ -13,10 +13,10 @@ https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression
*/
import lombok.RequiredArgsConstructor;
-import mc.protocol.NetInputStream;
import mc.protocol.Packet;
import mc.protocol.PacketDirection;
import mc.protocol.State;
+import mc.protocol.io.NetInputStream;
import java.util.Objects;
diff --git a/src/main/java/mc/protocol/coder/ProtocolEncoder.java b/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java
similarity index 86%
rename from src/main/java/mc/protocol/coder/ProtocolEncoder.java
rename to src/main/java/mc/protocol/io/coder/ProtocolEncoder.java
index a30170f..d1c7731 100644
--- a/src/main/java/mc/protocol/coder/ProtocolEncoder.java
+++ b/src/main/java/mc/protocol/io/coder/ProtocolEncoder.java
@@ -1,7 +1,10 @@
-package mc.protocol.coder;
+package mc.protocol.io.coder;
import lombok.RequiredArgsConstructor;
-import mc.protocol.*;
+import mc.protocol.Packet;
+import mc.protocol.PacketDirection;
+import mc.protocol.State;
+import mc.protocol.io.NetOutputStream;
import java.util.Objects;
diff --git a/src/main/java/mc/protocol/status/client/StatusServerRequest.java b/src/main/java/mc/protocol/status/client/StatusServerRequest.java
index 4bf640a..eb94b10 100644
--- a/src/main/java/mc/protocol/status/client/StatusServerRequest.java
+++ b/src/main/java/mc/protocol/status/client/StatusServerRequest.java
@@ -1,8 +1,8 @@
package mc.protocol.status.client;
-import mc.protocol.NetInputStream;
-import mc.protocol.NetOutputStream;
import mc.protocol.Packet;
+import mc.protocol.io.NetInputStream;
+import mc.protocol.io.NetOutputStream;
public class StatusServerRequest implements Packet {
diff --git a/src/main/java/mc/protocol/status/server/StatusServerResponse.java b/src/main/java/mc/protocol/status/server/StatusServerResponse.java
index ea78013..2ad0c01 100644
--- a/src/main/java/mc/protocol/status/server/StatusServerResponse.java
+++ b/src/main/java/mc/protocol/status/server/StatusServerResponse.java
@@ -1,9 +1,9 @@
package mc.protocol.status.server;
import lombok.Data;
-import mc.protocol.NetInputStream;
-import mc.protocol.NetOutputStream;
import mc.protocol.Packet;
+import mc.protocol.io.NetInputStream;
+import mc.protocol.io.NetOutputStream;
@Data
public class StatusServerResponse implements Packet {
From 4e5b92d8cd6a05a1a2a2dfd2d5de94aa34c618b5 Mon Sep 17 00:00:00 2001
From: DmitriyMX
Date: Sat, 2 May 2020 01:04:21 +0300
Subject: [PATCH 2/3] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
=?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?=
=?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/java/mc/protocol/EmptyPacket.java | 17 +++++++++++
.../handshake/client/HandshakePacket.java | 20 +++++++++++++
.../mc/protocol/io/coder/ProtocolDecoder.java | 12 --------
.../mc/protocol/io/coder/ProtocolEncoder.java | 12 --------
.../mc/protocol/io/coder/package-info.java | 13 +++++++++
.../java/mc/protocol/io/package-info.java | 29 +++++++++++++++++++
.../status/client/StatusServerRequest.java | 20 +++++--------
.../status/server/StatusServerResponse.java | 14 +++++++++
8 files changed, 100 insertions(+), 37 deletions(-)
create mode 100644 src/main/java/mc/protocol/EmptyPacket.java
create mode 100644 src/main/java/mc/protocol/io/coder/package-info.java
create mode 100644 src/main/java/mc/protocol/io/package-info.java
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 {
From 996293192c83a372204efafdaaa4417a5940f80b Mon Sep 17 00:00:00 2001
From: DmitriyMX
Date: Sat, 2 May 2020 01:58:18 +0300
Subject: [PATCH 3/3] =?UTF-8?q?gradle:=20=D1=83=D0=B1=D0=B8=D1=80=D0=B0?=
=?UTF-8?q?=D0=B5=D0=BC=20wrapper=20task?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
потому что у нас уже есть wrapper properties
---
build.gradle | 5 -----
1 file changed, 5 deletions(-)
diff --git a/build.gradle b/build.gradle
index 0a9a4dd..3dd56ba 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,10 +1,5 @@
apply plugin: 'java'
-wrapper {
- gradleVersion = '5.3'
- distributionType = Wrapper.DistributionType.BIN
-}
-
project.group = projectGroup
project.version = projectVersion