summaryrefslogblamecommitdiffstats
path: root/src/packet/PacketParser.cpp
blob: a609011ac9fa4146d624ce236eb337291a5fbba4 (plain) (tree)






















                                                                                   

                                    









                                               

                  

                        
























































                                                   
                                  






                                                  
                               













                                                  
                               
                                  









                                                  

                                  
                                                                 
                                  




                                                                  
                                  
                             
                                                              
                                                              
                                                                  

     
#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) {
    if (packet.GetLength() != 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(VarIntType);
}

void PacketParser::ParsePlay0x0D(Packet &packet) {
    packet.ParseField(UnsignedByte);
}

void PacketParser::ParsePlay0x2B(Packet &packet) {
    packet.ParseField(Byte8_t);
    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(Byte8_t);
    packet.ParseField(VarIntType);
}

void PacketParser::ParsePlay0x1A(Packet &packet) {
    packet.ParseField(String);
}

void PacketParser::ParsePlay0x20(Packet &packet) {
    packet.ParseField(Int);
    packet.ParseField(Int);
    packet.ParseField(Boolean);
    packet.ParseField(VarIntType);
    packet.ParseField(VarIntType);
    packet.ParseField(ByteArray, packet.GetField(4).GetVarInt());
    packet.ParseField(VarIntType);
    //packet.ParseField(NbtTag);
    //packet.GetField(7).SetArray(packet.GetField(6).GetVarInt());
}

void PacketParser::ParsePlay0x07(Packet &packet) {
    packet.ParseField(VarIntType);
    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), VarIntType, 0);
    }
}