Preparing for multiple versions support

This commit is contained in:
Nanit
2021-10-28 22:24:01 +03:00
parent 62fbc0e8f2
commit e191c8f90b
6 changed files with 58 additions and 22 deletions

View File

@@ -2,13 +2,17 @@ package ru.nanit.limbo.protocol;
import ru.nanit.limbo.protocol.registry.Version;
import java.util.HashMap;
import java.util.Map;
public class PreEncodedPacket implements PacketOut {
private final PacketOut packet;
private byte[] message;
private final Map<Version, byte[]> versionMessages;
public PreEncodedPacket(PacketOut packet) {
this.packet = packet;
this.versionMessages = new HashMap<>();
}
public PacketOut getWrappedPacket() {
@@ -16,16 +20,24 @@ public class PreEncodedPacket implements PacketOut {
}
public PreEncodedPacket encodePacket() {
ByteMessage encodedMessage = ByteMessage.create();
packet.encode(encodedMessage, );
this.message = encodedMessage.toByteArray();
encodedMessage.release();
for (Version version : Version.values()) {
ByteMessage encodedMessage = ByteMessage.create();
packet.encode(encodedMessage, version);
byte[] message = encodedMessage.toByteArray();
versionMessages.put(version, message);
encodedMessage.release();
}
return this;
}
@Override
public void encode(ByteMessage msg, Version version) {
msg.writeBytes(message);
byte[] message = versionMessages.get(version);
if (message != null) {
msg.writeBytes(message);
}
}
public static PreEncodedPacket of(PacketOut packet) {

View File

@@ -2,14 +2,16 @@ package ru.nanit.limbo.protocol.packets;
import ru.nanit.limbo.protocol.ByteMessage;
import ru.nanit.limbo.protocol.Packet;
import ru.nanit.limbo.protocol.PacketIn;
import ru.nanit.limbo.protocol.registry.State;
import ru.nanit.limbo.protocol.registry.Version;
public class PacketHandshake implements Packet {
public class PacketHandshake implements PacketIn {
private Version version;
private String host;
private int port;
private int nextState;
private State nextState;
public Version getVersion() {
return version;
@@ -19,16 +21,12 @@ public class PacketHandshake implements Packet {
return host;
}
public int getNextState() {
return nextState;
public int getPort() {
return port;
}
@Override
public void encode(ByteMessage msg, Version version) {
msg.writeVarInt(this.version.getProtocolNumber());
msg.writeString(host);
msg.writeShort(port);
msg.writeVarInt(nextState);
public State getNextState() {
return nextState;
}
@Override
@@ -36,6 +34,6 @@ public class PacketHandshake implements Packet {
this.version = Version.of(msg.readVarInt());
this.host = msg.readString();
this.port = msg.readUnsignedShort();
this.nextState = msg.readVarInt();
this.nextState = State.getById(msg.readVarInt());
}
}

View File

@@ -20,7 +20,7 @@ public class PacketStatusResponse implements PacketOut {
public void encode(ByteMessage msg, Version version) {
String ver = server.getConfig().getPingData().getVersion();
String desc = server.getConfig().getPingData().getDescription();
String json = getResponseJson(ver, Version.getMinimal().getProtocolNumber(),
String json = getResponseJson(ver, version.getProtocolNumber(),
server.getConfig().getMaxPlayers(), server.getConnections().getCount(), desc);
msg.writeString(json);