diff options
Diffstat (limited to '')
-rw-r--r-- | Field.hpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/Field.hpp b/Field.hpp new file mode 100644 index 0000000..4620ab3 --- /dev/null +++ b/Field.hpp @@ -0,0 +1,124 @@ +#pragma once + +#include <cstddef> +#include <cstring> +#include <cstdint> +#include <string> +#include <vector> +#include "utility.h" +#include "PositionI.hpp" + +typedef unsigned char byte; +typedef signed char sbyte; + +enum FieldType { + Unknown = 0, + Boolean, //Bool + Byte, //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 + VarInt, //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 = Unknown); + + 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); + + PositionI GetPosition(); + + void SetPosition(PositionI value); + + double GetDouble(); + + void SetDouble(double value); + + std::vector<Field> GetArray(); + + /*Field GetArrayItem(int pos, size_t defaultFieldLen = 0); + + void SetArray(int count);*/ + +private: + size_t m_dataLength = 0; + byte *m_data = nullptr; + FieldType m_type = Unknown; + std::vector<Field> m_childs; +}; |