summaryrefslogblamecommitdiffstats
path: root/src/packet/Field.hpp
blob: c33cd1c2994c3bbedbabe8ead99cc5060da42c9a (plain) (tree)
1
2
3
4
5
6
7
8
9
10



                  
                

                 
 

                                




                           
                    















                                     
                                 

























                                  
                                                                         












































                                                                     
                         
 
                                   









                                  
                                   

                                
#pragma once

#include <cstddef>
#include <cstdint>
#include <cmath>
#include <string>
#include <vector>

#include "../utility/utility.h"
#include "../utility/Vector.hpp"

typedef unsigned char byte;
typedef signed char sbyte;

enum FieldType {
    UnknownType = 0,
    Boolean,        //Bool
    Byte8_t,           //int8_t
    UnsignedByte,   //uint8_t
    Short,          //int16_t
    UnsignedShort,  //uint16_t
    Int,            //int32_t
    Long,           //int64_t
    Float,          //float
    Double,         //double
    Position,       //PositionI
    Angle,          //uint8_t
    Uuid,           //byte* (2 bytes)
    //Unknown-length data

    String = 100,   //std::string
    Chat,           //std::string
    VarIntType,         //int32_t
    VarLong,        //int64_t
    ChunkSection,   //byte*
    EntityMetadata, //byte*
    Slot,           //byte*
    NbtTag,         //byte*
    ByteArray,      //byte*
};

class Field {
public:
    Field();

    Field(const Field &other);

    void swap(Field &other);

    Field &operator=(Field other);

    ~Field();

    size_t GetLength();

    void Clear();

    void CopyToBuff(byte *ptr);

    void SetRaw(byte *ptr, size_t len = 0, FieldType type = UnknownType);

    FieldType GetType();

    void Attach(Field field);

    static size_t GetFieldLength(FieldType type);

    //Cpp-types setters/getters for binary content of MC's data types

    int GetVarInt();

    void SetVarInt(int value);

    int GetInt();

    void SetInt(int value);

    bool GetBool();

    void SetBool(bool value);

    unsigned short GetUShort();

    void SetUShort(unsigned short value);

    std::string GetString();

    void SetString(std::string value);

    long long GetLong();

    void SetLong(long long value);

    byte GetUByte();

    void SetUByte(byte value);

    sbyte GetByte();

    void SetByte(sbyte value);

    float GetFloat();

    void SetFloat(float value);

    Vector GetPosition();

    void SetPosition(Vector value);

    double GetDouble();

    void SetDouble(double value);

    std::vector<Field> GetArray();

private:
    size_t m_dataLength = 0;
    byte *m_data = nullptr;
    FieldType m_type = UnknownType;
    std::vector<Field> m_childs;
};