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 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,15 +26,24 @@ 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 необходимо в лог пивать предупреждение
|
||||||
try {
|
UnknownPacket packet = new UnknownPacket(
|
||||||
Packet packet = packetClass.newInstance();
|
state,
|
||||||
|
packetId,
|
||||||
|
sizePacket - Utils.sizeOfVarInt(packetId)
|
||||||
|
);
|
||||||
packet.readSelf(netInputStream);
|
packet.readSelf(netInputStream);
|
||||||
return packet;
|
return packet;
|
||||||
} catch (InstantiationException | IllegalAccessException e) {
|
} else {
|
||||||
e.printStackTrace(); //FIXME нужно писать в лог
|
try {
|
||||||
return null;
|
Packet packet = packetClass.newInstance();
|
||||||
|
packet.readSelf(netInputStream);
|
||||||
|
return packet;
|
||||||
|
} catch (InstantiationException | IllegalAccessException e) {
|
||||||
|
e.printStackTrace(); //FIXME нужно писать в лог
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user