Merge branch 'feature/login-disconnect' into development
This commit is contained in:
@@ -5,6 +5,8 @@ import com.google.common.collect.ImmutableBiMap;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import mc.protocol.handshake.client.HandshakePacket;
|
||||
import mc.protocol.login.client.LoginStartPacket;
|
||||
import mc.protocol.login.server.DisconnectPacket;
|
||||
import mc.protocol.status.PingPacket;
|
||||
import mc.protocol.status.client.StatusServerRequest;
|
||||
import mc.protocol.status.server.StatusServerResponse;
|
||||
@@ -31,7 +33,16 @@ public enum State {
|
||||
0x01, PingPacket.class
|
||||
)
|
||||
),
|
||||
LOGIN(2);
|
||||
LOGIN(2,
|
||||
// server bound
|
||||
ImmutableBiMap.of(
|
||||
0x00, LoginStartPacket.class
|
||||
),
|
||||
// client bound
|
||||
ImmutableBiMap.of(
|
||||
0x00, DisconnectPacket.class
|
||||
)
|
||||
);
|
||||
|
||||
public static State getById(int id) {
|
||||
for (State state : State.values()) {
|
||||
|
||||
@@ -16,12 +16,14 @@ Data types
|
||||
| | | | Каждый символ может состоять максимум из 4 байт. [3] |
|
||||
| | | | Максимальная длина строки - 32767 (3 - это как раз размер VarInt для |
|
||||
| | | | этого числа). |
|
||||
| Text | >= 1 ; <= (n * 4) + 3 | JSON, закодированный как String | [4] |
|
||||
| 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
|
||||
[4] - https://wiki.vg/index.php?title=Chat&oldid=8329
|
||||
|
||||
https://wiki.vg/index.php?title=Protocol&oldid=7368#Data_types
|
||||
*/
|
||||
|
||||
38
src/main/java/mc/protocol/login/client/LoginStartPacket.java
Normal file
38
src/main/java/mc/protocol/login/client/LoginStartPacket.java
Normal file
@@ -0,0 +1,38 @@
|
||||
package mc.protocol.login.client;
|
||||
|
||||
import lombok.Data;
|
||||
import mc.protocol.Packet;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.io.NetInputStream;
|
||||
import mc.protocol.io.NetOutputStream;
|
||||
|
||||
/**
|
||||
* Login start packet.
|
||||
*
|
||||
* <p>Начало авторизации.</p>
|
||||
*
|
||||
* <p>Структура пакета
|
||||
* <pre>
|
||||
* | FIELD | TYPE | NOTES |
|
||||
* |-------|--------|------------------|
|
||||
* | Name | String | Имя/Логин игрока |
|
||||
* </pre></p>
|
||||
*
|
||||
* @see <a href="https://wiki.vg/index.php?title=Protocol&oldid=7368#Login_Start" target="_top">Login start</a>
|
||||
* @see State
|
||||
*/
|
||||
@Data
|
||||
public class LoginStartPacket implements Packet {
|
||||
|
||||
private String name;
|
||||
|
||||
@Override
|
||||
public void readSelf(NetInputStream netInputStream) {
|
||||
this.name = netInputStream.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeSelf(NetOutputStream netOutputStream) {
|
||||
netOutputStream.writeString(name);
|
||||
}
|
||||
}
|
||||
48
src/main/java/mc/protocol/login/server/DisconnectPacket.java
Normal file
48
src/main/java/mc/protocol/login/server/DisconnectPacket.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package mc.protocol.login.server;
|
||||
|
||||
import lombok.Data;
|
||||
import mc.protocol.Packet;
|
||||
import mc.protocol.State;
|
||||
import mc.protocol.io.DecoderException;
|
||||
import mc.protocol.io.NetInputStream;
|
||||
import mc.protocol.io.NetOutputStream;
|
||||
import mc.protocol.text.Text;
|
||||
import mc.protocol.utils.json.JsonUtils;
|
||||
|
||||
/**
|
||||
* Diconnect packet.
|
||||
*
|
||||
* <p>Отключение клиента сервером с указанием причины.</p>
|
||||
*
|
||||
* <p>Структура пакета
|
||||
* <pre>
|
||||
* | FIELD | TYPE | NOTES |
|
||||
* |--------|------|----------------------------------|
|
||||
* | Reason | Text | Причина отключения. Опционально. |
|
||||
* </pre></p>
|
||||
*
|
||||
* @see <a href="https://wiki.vg/index.php?title=Protocol&oldid=7368#Login_Start" target="_top">Login start</a>
|
||||
* @see State
|
||||
*/
|
||||
@Data
|
||||
public class DisconnectPacket implements Packet {
|
||||
|
||||
private Text reason;
|
||||
|
||||
@Override
|
||||
public void readSelf(NetInputStream netInputStream) {
|
||||
final String rawString = netInputStream.readString();
|
||||
if (rawString.startsWith("{") && rawString.endsWith("}")) {
|
||||
this.reason = JsonUtils.jsonToObject(rawString, Text.class)
|
||||
.orElseThrow(() -> new DecoderException("Error decode reason:\n" + rawString));
|
||||
} else {
|
||||
this.reason = Text.of(rawString);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeSelf(NetOutputStream netOutputStream) {
|
||||
final String jsonText = JsonUtils.objectToJson(this.reason);
|
||||
netOutputStream.writeString(jsonText);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user