add unknown packet object
This commit is contained in:
25
src/main/java/mc/protocol/UnknownPacket.java
Normal file
25
src/main/java/mc/protocol/UnknownPacket.java
Normal 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);
|
||||
}
|
||||
}
|
||||
17
src/main/java/mc/protocol/Utils.java
Normal file
17
src/main/java/mc/protocol/Utils.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -13,12 +13,7 @@ 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 java.util.Objects;
|
||||
import mc.protocol.*;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class ProtocolDecoder {
|
||||
@@ -31,8 +26,16 @@ public class ProtocolDecoder {
|
||||
|
||||
int packetId = netInputStream.readVarInt();
|
||||
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 {
|
||||
Packet packet = packetClass.newInstance();
|
||||
packet.readSelf(netInputStream);
|
||||
@@ -43,3 +46,4 @@ public class ProtocolDecoder {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user