0

add unknown packet object

This commit is contained in:
2019-08-29 15:18:34 +03:00
parent c519c426d8
commit 4e1ba7faee
3 changed files with 59 additions and 13 deletions

View File

@@ -0,0 +1,25 @@
package mc.protocol;
import lombok.Data;
import lombok.ToString;
@Data
@ToString(exclude = "rawData")
public class UnknownPacket implements Packet {
private final State state;
private final int id;
private final int dataSize;
private byte[] rawData;
@Override
public void readSelf(NetInputStream netInputStream) {
rawData = new byte[dataSize];
netInputStream.readBytes(rawData);
}
@Override
public void writeSelf(NetOutputStream netOutputStream) {
netOutputStream.writeBytes(rawData);
}
}

View File

@@ -0,0 +1,17 @@
package mc.protocol;
import lombok.experimental.UtilityClass;
@UtilityClass
public class Utils {
public int sizeOfVarInt(int value) {
for (int i = 1; i < 5; ++i) {
if ((value & -1 << i * 7) == 0) {
return i;
}
}
return 5;
}
}

View File

@@ -13,12 +13,7 @@ https://wiki.vg/index.php?title=Protocol&oldid=7368#Without_compression
*/ */
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import mc.protocol.NetInputStream; import mc.protocol.*;
import mc.protocol.Packet;
import mc.protocol.PacketDirection;
import mc.protocol.State;
import java.util.Objects;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ProtocolDecoder { public class ProtocolDecoder {
@@ -31,8 +26,16 @@ public class ProtocolDecoder {
int packetId = netInputStream.readVarInt(); int packetId = netInputStream.readVarInt();
Class<? extends Packet> packetClass = state.getPacketById(direction, packetId); Class<? extends Packet> packetClass = state.getPacketById(direction, packetId);
Objects.requireNonNull(packetClass); if (packetClass == null) {
//FIXME необходимо в лог пивать предупреждение
UnknownPacket packet = new UnknownPacket(
state,
packetId,
sizePacket - Utils.sizeOfVarInt(packetId)
);
packet.readSelf(netInputStream);
return packet;
} else {
try { try {
Packet packet = packetClass.newInstance(); Packet packet = packetClass.newInstance();
packet.readSelf(netInputStream); packet.readSelf(netInputStream);
@@ -42,4 +45,5 @@ public class ProtocolDecoder {
return null; return null;
} }
} }
}
} }