summaryrefslogtreecommitdiffstats
path: root/PacketParser.cpp
diff options
context:
space:
mode:
authorLaG1924 <12997935+LaG1924@users.noreply.github.com>2017-04-15 12:17:53 +0200
committerLaG1924 <12997935+LaG1924@users.noreply.github.com>2017-04-15 12:17:53 +0200
commit2ee0f834487cfe4b6bd9424ca2715685a8db16e4 (patch)
tree6867718d6bfcd42f6a82c86dd8f149d6ea6cab68 /PacketParser.cpp
downloadAltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.gz
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.bz2
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.lz
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.xz
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.tar.zst
AltCraft-2ee0f834487cfe4b6bd9424ca2715685a8db16e4.zip
Diffstat (limited to 'PacketParser.cpp')
-rw-r--r--PacketParser.cpp144
1 files changed, 144 insertions, 0 deletions
diff --git a/PacketParser.cpp b/PacketParser.cpp
new file mode 100644
index 0000000..f4b3889
--- /dev/null
+++ b/PacketParser.cpp
@@ -0,0 +1,144 @@
+#include "PacketParser.hpp"
+
+void PacketParser::Parse(Packet &packet, ConnectionState state, bool ClientBound) {
+ if (ClientBound) {
+ switch (state) {
+ case Login:
+ ParseLogin(packet);
+ break;
+ case Handshaking:
+ break;
+ case Play:
+ ParsePlay(packet);
+ break;
+ case Status:
+
+ break;
+ }
+ } else {
+ ParseServerBound(packet, state);
+ }
+}
+
+void PacketParser::ParseServerBound(Packet &packet, ConnectionState state) {
+ throw 107;
+}
+
+void PacketParser::ParseLogin(Packet &packet) {
+ switch (packet.GetId()) {
+ case 0x00:
+ ParseLogin0x00(packet);
+ break;
+ case 0x02:
+ ParseLogin0x02(packet);
+ break;
+ default:
+ throw 112;
+ }
+}
+
+void PacketParser::ParsePlay(Packet &packet) {
+ switch (packet.GetId()) {
+ case 0x23:
+ ParsePlay0x23(packet);
+ break;
+ case 0x1F:
+ ParsePlay0x1F(packet);
+ break;
+ case 0x0D:
+ ParsePlay0x0D(packet);
+ break;
+ case 0x2B:
+ ParsePlay0x2B(packet);
+ break;
+ case 0x43:
+ ParsePlay0x43(packet);
+ break;
+ case 0x2E:
+ ParsePlay0x2E(packet);
+ break;
+ case 0x1A:
+ ParsePlay0x1A(packet);
+ break;
+ case 0x20:
+ ParsePlay0x20(packet);
+ break;
+ case 0x07:
+ ParsePlay0x07(packet);
+ default:
+ //throw 113;
+ break;
+ }
+}
+
+void PacketParser::ParseLogin0x00(Packet &packet) {
+ packet.ParseField(String);
+}
+
+void PacketParser::ParseLogin0x02(Packet &packet) {
+ packet.ParseField(String);
+ packet.ParseField(String);
+}
+
+void PacketParser::ParsePlay0x23(Packet &packet) {
+ packet.ParseField(Int);
+ packet.ParseField(UnsignedByte);
+ packet.ParseField(Int);
+ packet.ParseField(UnsignedByte);
+ packet.ParseField(UnsignedByte);
+ packet.ParseField(String);
+ packet.ParseField(Boolean);
+}
+
+void PacketParser::ParsePlay0x1F(Packet &packet) {
+ packet.ParseField(VarInt);
+}
+
+void PacketParser::ParsePlay0x0D(Packet &packet) {
+ packet.ParseField(UnsignedByte);
+}
+
+void PacketParser::ParsePlay0x2B(Packet &packet) {
+ packet.ParseField(Byte);
+ packet.ParseField(Float);
+ packet.ParseField(Float);
+}
+
+void PacketParser::ParsePlay0x43(Packet &packet) {
+ packet.ParseField(Position);
+}
+
+void PacketParser::ParsePlay0x2E(Packet &packet) {
+ packet.ParseField(Double);
+ packet.ParseField(Double);
+ packet.ParseField(Double);
+ packet.ParseField(Float);
+ packet.ParseField(Float);
+ packet.ParseField(Byte);
+ packet.ParseField(VarInt);
+}
+
+void PacketParser::ParsePlay0x1A(Packet &packet) {
+ packet.ParseField(String);
+}
+
+void PacketParser::ParsePlay0x20(Packet &packet) {
+ packet.ParseField(Int);
+ packet.ParseField(Int);
+ packet.ParseField(Boolean);
+ packet.ParseField(VarInt);
+ packet.ParseField(VarInt);
+ packet.ParseField(ByteArray, packet.GetField(4).GetVarInt());
+ packet.ParseField(VarInt);
+ //packet.ParseField(NbtTag);
+ //packet.GetField(7).SetArray(packet.GetField(6).GetVarInt());
+}
+
+void PacketParser::ParsePlay0x07(Packet &packet) {
+ packet.ParseField(VarInt);
+ packet.AddField(Field());
+ for (int i=0;i<packet.GetField(0).GetVarInt();i++){
+ packet.ParseFieldArray(packet.GetField(1), String, 0);
+ packet.ParseFieldArray(packet.GetField(1), VarInt, 0);
+ }
+}