diff --git a/pom.xml b/pom.xml
index 7df287a87f..ba08e2d62a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,6 +47,11 @@
jcip-annotations
1.0
+
+ io.netty
+ netty-buffer
+ 4.1.65.Final
+
diff --git a/src/main/java/net/packet/ByteBufInPacket.java b/src/main/java/net/packet/ByteBufInPacket.java
new file mode 100644
index 0000000000..481c5855cb
--- /dev/null
+++ b/src/main/java/net/packet/ByteBufInPacket.java
@@ -0,0 +1,79 @@
+package net.packet;
+
+import io.netty.buffer.ByteBuf;
+
+import java.awt.*;
+
+public class ByteBufInPacket implements InPacket {
+ private final ByteBuf byteBuf;
+
+ public ByteBufInPacket(ByteBuf byteBuf) {
+ this.byteBuf = byteBuf;
+ }
+
+ @Override
+ public byte[] getBytes() {
+ // TODO
+ return null;
+ }
+
+ @Override
+ public byte readByte() {
+ return byteBuf.readByte();
+ }
+
+ @Override
+ public short readShort() {
+ return byteBuf.readShortLE();
+ }
+
+ @Override
+ public int readInt() {
+ return byteBuf.readIntLE();
+ }
+
+ @Override
+ public long readLong() {
+ return byteBuf.readLongLE();
+ }
+
+ @Override
+ public Point readPoint() {
+ final short x = byteBuf.readShortLE();
+ final short y = byteBuf.readShortLE();
+ return new Point(x, y);
+ }
+
+ @Override
+ public String readString() {
+ // TODO
+ return null;
+ }
+
+ @Override
+ public byte[] read(int numberOfBytes) {
+ byte[] bytes = new byte[numberOfBytes];
+ byteBuf.readBytes(bytes);
+ return bytes;
+ }
+
+ @Override
+ public void skip(int numberOfBytes) {
+ byteBuf.skipBytes(numberOfBytes);
+ }
+
+ @Override
+ public int available() {
+ return byteBuf.readableBytes();
+ }
+
+ @Override
+ public void seek(int byteOffset) {
+ byteBuf.readerIndex(byteOffset);
+ }
+
+ @Override
+ public int getPosition() {
+ return byteBuf.readerIndex();
+ }
+}
diff --git a/src/main/java/net/packet/ByteBufOutPacket.java b/src/main/java/net/packet/ByteBufOutPacket.java
new file mode 100644
index 0000000000..f2aa491cfb
--- /dev/null
+++ b/src/main/java/net/packet/ByteBufOutPacket.java
@@ -0,0 +1,11 @@
+package net.packet;
+
+import io.netty.buffer.ByteBuf;
+
+public class ByteBufOutPacket implements OutPacket {
+ private final ByteBuf byteBuf;
+
+ public ByteBufOutPacket(ByteBuf byteBuf) {
+ this.byteBuf = byteBuf;
+ }
+}
diff --git a/src/main/java/net/packet/InPacket.java b/src/main/java/net/packet/InPacket.java
new file mode 100644
index 0000000000..53ef38bb42
--- /dev/null
+++ b/src/main/java/net/packet/InPacket.java
@@ -0,0 +1,17 @@
+package net.packet;
+
+import java.awt.*;
+
+public interface InPacket extends Packet {
+ byte readByte();
+ short readShort();
+ int readInt();
+ long readLong();
+ Point readPoint();
+ String readString();
+ byte[] read(int numberOfBytes);
+ void skip(int numberOfBytes);
+ int available();
+ void seek(int byteOffset);
+ int getPosition();
+}
diff --git a/src/main/java/net/packet/OutPacket.java b/src/main/java/net/packet/OutPacket.java
new file mode 100644
index 0000000000..6d1fb8982a
--- /dev/null
+++ b/src/main/java/net/packet/OutPacket.java
@@ -0,0 +1,4 @@
+package net.packet;
+
+public interface OutPacket extends Packet {
+}
diff --git a/src/main/java/net/packet/Packet.java b/src/main/java/net/packet/Packet.java
new file mode 100644
index 0000000000..8e1b7cfb99
--- /dev/null
+++ b/src/main/java/net/packet/Packet.java
@@ -0,0 +1,5 @@
+package net.packet;
+
+public interface Packet {
+ byte[] getBytes();
+}