diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-04-15 12:17:53 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-04-15 12:17:53 +0200 |
commit | 2ee0f834487cfe4b6bd9424ca2715685a8db16e4 (patch) | |
tree | 6867718d6bfcd42f6a82c86dd8f149d6ea6cab68 /PacketParser.cpp | |
download | AltCraft-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.cpp | 144 |
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); + } +} |