diff --git a/src/main/java/mc/core/NetStream.java b/src/main/java/mc/core/NetStream.java index 53286b1..73af53d 100644 --- a/src/main/java/mc/core/NetStream.java +++ b/src/main/java/mc/core/NetStream.java @@ -4,12 +4,18 @@ */ package mc.core; +import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import java.nio.charset.StandardCharsets; @Slf4j public abstract class NetStream { + @Getter + @Setter + private int expectedSize; + public static int sizeVarInt(final int value) { byte size = 0; int v = value; @@ -74,4 +80,6 @@ public abstract class NetStream { public abstract void writeByte(int value); public abstract void writeBytes(byte[] buffer); + + } diff --git a/src/main/java/mc/core/netty/PacketDecoder.java b/src/main/java/mc/core/netty/PacketDecoder.java index 6e83d75..e698237 100644 --- a/src/main/java/mc/core/netty/PacketDecoder.java +++ b/src/main/java/mc/core/netty/PacketDecoder.java @@ -59,6 +59,7 @@ public class PacketDecoder extends ByteToMessageDecoder { } } else { CSPacket packet = clientSidePacketClass.newInstance(); + netStream.setExpectedSize(size - NetStream.sizeVarInt(id)); packet.readSelf(netStream); out.add(packet); } diff --git a/src/main/java/mc/core/netty/PacketHandler.java b/src/main/java/mc/core/netty/PacketHandler.java index 5f89ac1..10e8180 100644 --- a/src/main/java/mc/core/netty/PacketHandler.java +++ b/src/main/java/mc/core/netty/PacketHandler.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import mc.core.CSPacket; import mc.core.Config; import mc.core.Main; +import mc.core.netty.packets.PingPacket; import mc.core.netty.packets.StatusRequest; import mc.core.netty.packets.StatusResponse; @@ -51,4 +52,8 @@ public class PacketHandler extends SimpleChannelInboundHandler { channel.writeAndFlush(pkt); } + + public void onPingPacket(Channel channel, PingPacket packet) { + channel.writeAndFlush(packet); + } } diff --git a/src/main/java/mc/core/netty/State.java b/src/main/java/mc/core/netty/State.java index e507b48..d917f72 100644 --- a/src/main/java/mc/core/netty/State.java +++ b/src/main/java/mc/core/netty/State.java @@ -9,6 +9,7 @@ import io.netty.util.AttributeKey; import lombok.RequiredArgsConstructor; import mc.core.CSPacket; import mc.core.SCPacket; +import mc.core.netty.packets.PingPacket; import mc.core.netty.packets.StatusRequest; import mc.core.netty.packets.StatusResponse; @@ -21,9 +22,12 @@ public enum State { UNKNOWN(0, ImmutableMap.of(), ImmutableMap.of()), STATUS(1, ImmutableMap.of( - 0, StatusRequest.class - ), ImmutableMap.of( - StatusResponse.class, 0 + 0, StatusRequest.class, + 1, PingPacket.class + ), + ImmutableMap.of( + StatusResponse.class, 0, + PingPacket.class, 1 ) ); diff --git a/src/main/java/mc/core/netty/packets/PingPacket.java b/src/main/java/mc/core/netty/packets/PingPacket.java new file mode 100644 index 0000000..b51fe8a --- /dev/null +++ b/src/main/java/mc/core/netty/packets/PingPacket.java @@ -0,0 +1,24 @@ +/* + * DmitriyMX + * 2018-04-08 + */ +package mc.core.netty.packets; + +import mc.core.CSPacket; +import mc.core.NetStream; +import mc.core.SCPacket; + +public class PingPacket implements CSPacket, SCPacket { + private byte[] rawData; + + @Override + public void readSelf(NetStream netStream) { + rawData = new byte[netStream.getExpectedSize()]; + netStream.readBytes(rawData); + } + + @Override + public byte[] toByteArray() { + return rawData; + } +}