Skip to content

noglass/nbtmap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Easy Library for Parsing Minecraft NBT Strings

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages