write headers for data processing

This commit is contained in:
2025-07-07 14:21:33 +02:00
parent 600fa0f25e
commit 2cb5d03211
2 changed files with 48 additions and 0 deletions

19
src/dat/mcx.h Normal file
View File

@@ -0,0 +1,19 @@
// Copyright (c) 2025 Quinn
// Licensed under the MIT Licence. See LICENSE for details
#pragma once
/* the MCR (Minecraft region) and MCA (Minecraft anvil) files are similar
* MCA is the newer variant, where it includes:
* - a world height of 256, rather than 128.
* - block IDs have been extended to 4096 from 256
* - block ordering is now YZX, rather than XZY.
* - biomes are included in the data per XZ column.
* MCR start with an 8KiB header, split in two 4KiB tables
* - the first containing the offsets of chunks in the region file itself.
* - the second providing timestamps on when they were last updated.
* -
*
*
*
*
*/

29
src/dat/nbt.h Normal file
View File

@@ -0,0 +1,29 @@
// Copyright (c) 2025 Quinn
// Licensed under the MIT Licence. See LICENSE for details
#pragma once
/* NBT (named binary tag) is a tree data structure. Tags have a numeric type ID, name and a payload.
* NBT files are a compressed `compound` tag. GZip is the compression used in most cases,
* in some (rare) cases it's stored uncompressed.
* A tag is an individual part of the data tree.
* The first byte is the ID, followed by a `u16`, for the length of the name.
* Then the name as `UTF-8`. (end tag does not contain name) */
/* specifies the NBT tag IDs.
* NOTE: every type is stored as BE (big-endian) in the file. */
enum nbt_tagid {
NBT_END, // signifies the end of a compound tag
NBT_I8, // next byte is for an 8 bit signed integer.
NBT_I16, // next 2 bytes are for a 16 bit signed integer
NBT_I32, // next 4 bytes are for a 32 bit signed integer
NBT_I64, // next 8 bytes are for a 64 bit signed integer
NBT_F32, // next 4 bytes are for a single-precision floating-point
NBT_F64, // next 8 bytes are for a double-precision floating-point
NBT_ARR_I8, // starts with a i32, denoting size, followed by the i8 data
NBT_STR, // starts with a u16, denoting size, followed by the UTF-8 data
NBT_LIST, // starts with an ID, followed by a 32 bit signed integer denoting the size
NBT_COMPOUND, // compound tag, contains tags and is delimited by `NBT_END`
NBT_ARR_I32, // starts with a i32, denoting size, followed by the i32 data
NBT_ARR_I64, // starts with a i32, denoting size, followed by the u32 data
};