Skip to content

Latest commit

 

History

History
91 lines (83 loc) · 3.21 KB

File metadata and controls

91 lines (83 loc) · 3.21 KB

nbtmap

Easy Library for Parsing Minecraft NBT Strings

Simple and easy header only library for parsing and building NBT compounds and lists.

Requires at least C++11.

All components are kept as strings, no internal conversions are made, and the library assumes all NBT is valid. Primarily meant for processing data get and entitydata output.

Using invalid NBT will produce undefined behaviour.

Usage:

#include "nbtmap.h"

int main()
{
    NBTCompound creeper ("{powered: 0b, ExplosionRadius: 3b, Fuse: 30s, ignited: 0b, Pos: [123.456f, 63.0f, 789.0f], fake: [{foo: bar, list: [0, 1, 2]},{foo: foo, list: [3, 4, 5]}], 2d: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]}");
    creeper.set("anotherList","[,,,, , , ,,, ,, , 1]");
    NBTList pos (creeper.get("Pos"));
    std::cout<<"NBTCompound creeper has the following data:\n";
    for (auto it = creeper.begin(), ite = creeper.end(); it != ite; ++it)
        std::cout<<"creeper[\""<<it->first<<"\"] = "<<it->second<<std::endl;
    std::cout<<"\nNBTList pos has the following data:\n";
    for (int i = 0; i < pos.size(); ++i)
        std::cout<<"pos["<<i<<"] = "<<pos[i]<<std::endl;
    auto del = creeper.begin();
    for (int i = 5;i;++del,--i);
    creeper.erase(del); // deletes "ExplosionRadius"
    creeper.erase("powered");
    NBTWrapper contained (creeper);
    std::cout<<"\nNBTWrapper contained has the following data:\n";
    for (auto it = contained.begin(), ite = contained.end(); it != ite; ++it)
        std::cout<<"contained[\""<<it->first<<"\"] = "<<it->second<<std::endl;
    return 0;
}

Output:

nigel@dontdeleteme:~/nbtmap$ ./example 
NBTCompound creeper has the following data:
creeper["anotherList"] = [,,,, , , ,,, ,, , 1]
creeper["2d"] = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
creeper["fake"] = [{foo: bar, list: [0, 1, 2]},{foo: foo, list: [3, 4, 5]}]
creeper["Pos"] = [123.456f, 63.0f, 789.0f]
creeper["powered"] = 0b
creeper["ExplosionRadius"] = 3b
creeper["Fuse"] = 30s
creeper["ignited"] = 0b

NBTList pos has the following data:
pos[0] = 123.456f
pos[1] = 63.0f
pos[2] = 789.0f

NBTWrapper contained has the following data:
contained["Pos[0]"] = 123.456f
contained["Pos"] = [123.456f, 63.0f, 789.0f]
contained["fake[1].list[0]"] = 3
contained["fake[1].list"] = [3, 4, 5]
contained["fake[1]"] = {foo: foo, list: [3, 4, 5]}
contained["fake[1].foo"] = foo
contained["2d[0][0]"] = 0
contained["fake[1].list[1]"] = 4
contained["fake"] = [{foo: bar, list: [0, 1, 2]},{foo: foo, list: [3, 4, 5]}]
contained["fake[1].list[2]"] = 5
contained["2d[0][1]"] = 1
contained["anotherList[0]"] = 1
contained["anotherList"] = [,,,, , , ,,, ,, , 1]
contained["2d[2][1]"] = 7
contained["2d[1][0]"] = 3
contained["2d"] = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
contained["2d[0][2]"] = 2
contained["Pos[2]"] = 789.0f
contained["2d[0]"] = [0, 1, 2]
contained["ignited"] = 0b
contained["2d[1][1]"] = 4
contained["2d[1][2]"] = 5
contained["fake[0].foo"] = bar
contained["2d[2]"] = [6, 7, 8]
contained["2d[2][0]"] = 6
contained["fake[0].list[0]"] = 0
contained["2d[2][2]"] = 8
contained["Fuse"] = 30s
contained["fake[0]"] = {foo: bar, list: [0, 1, 2]}
contained["fake[0].list"] = [0, 1, 2]
contained["Pos[1]"] = 63.0f
contained["2d[1]"] = [3, 4, 5]
contained["fake[0].list[1]"] = 1
contained["fake[0].list[2]"] = 2