diff options
Diffstat (limited to 'nbt/nbt.h')
-rw-r--r-- | nbt/nbt.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/nbt/nbt.h b/nbt/nbt.h new file mode 100644 index 0000000..97c4d3b --- /dev/null +++ b/nbt/nbt.h @@ -0,0 +1,84 @@ +#pragma once + +#include <stdint.h> +#include <stdbool.h> +#include <arpa/inet.h> +#include <unistd.h> + +#include "map.h" +#include "stream.h" + +typedef enum: int8_t { + TAG_END = 0, + TAG_BYTE = 1, + TAG_SHORT = 2, + TAG_INT = 3, + TAG_LONG = 4, + TAG_FLOAT = 5, + TAG_DOUBLE = 6, + TAG_BYTE_ARRAY = 7, + TAG_STRING = 8, + TAG_LIST = 9, + TAG_COMPOUND = 10, + TAG_INT_ARRAY = 11, + TAG_LONG_ARRAY = 12 +} tagtype_t ; + +typedef union { + int8_t b; + int16_t s; + int32_t i; + int64_t l; + float f; + double d; + struct { + int32_t size; + int8_t *data; + } b_arr; + struct { + uint16_t size; + char *data; + } string; + struct { + tagtype_t type; + int32_t size; + struct tag_t *tags; + } list; + map_t compound; + struct { + int32_t size; + int32_t *data; + } i_arr; + struct { + int32_t size; + int64_t *data; + } l_arr; +} tagdata_t; + +typedef struct tag_t { + tagtype_t type; + tagdata_t data; + uint16_t name_len; + char *name; +} tag_t; + +typedef enum { + JSON, + NBT, + SNBT +} format_t; + +void tag_free(tag_t *tag); + +bool tag_read(tag_t *tag, const stream_t *stream, format_t format); +bool tag_print(tag_t *tag, const stream_t *stream, format_t format); + +bool json_read(tag_t *tag, const stream_t *stream); +bool json_print(const tag_t *tag, const stream_t *stream); + +bool nbt_read(tag_t *tag, const stream_t *stream); +bool nbt_print(const tag_t *tag, const stream_t *stream); + +bool snbt_read(tag_t *tag, const stream_t *stream); +bool snbt_print(const tag_t *tag, const stream_t *stream); +bool snbt_allowed_ident(char c); |