mirror of
https://github.com/Nan1t/NanoLimbo.git
synced 2026-02-11 03:16:14 +01:00
Preparing for multiple versions support
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user