Skip to content
This repository has been archived by the owner on Sep 19, 2024. It is now read-only.

NBT Compound

Shane Bee edited this page May 30, 2024 · 10 revisions

NBT Compounds are the base of how NBT works in SkBee. Let's break down the different ways to get an NBT compound.

Getting Values

So now that you know what NBT looks like and a bit of how it works, now it's time to get into getting the values of a key (aka tag) and entire compounds of things, which is actually very simple to do.

Getting The Compound of an Object

Commonly when dealing with NBT compounds, you will want to get the compound of the object to then manipulate it later on, luckily that's very easy to do with the nbt compound expression.

The expression allows you to get the compound of many things, including entities, blocks, items, chunks, files and strings.

Strings

The basic way to create a new NBT compound is from a string.

nbt compound of %string%

EX:

set {_n} to nbt compound from "{someNBT:1}"

This will create a simple new NBT compound, which can be manipulated however you want, or merged with another compound (ie: an entity, or item)
To create an empty compound, here is what you'd do:

set {_n} to nbt compound from "{}"

With this, you can manipulate it however you want.

ItemStacks

There are a couple different methods for getting NBT compounds for items. Let's look at the syntaxes, then look and what they do.

full nbt of %itemtype%
nbt of %itemtype%
components nbt of %itemtype%

Full NBT Compound

The first option here will return the FULL NBT of an ItemStack.
This includes "id" (which item it is), "Count" (how many in the stack) and "tag" (this is where MC stores all info on an item stack).
NOTE: When getting NBT for an ItemStack this way, it will be a copy of the NBT. This means any changes will NOT apply directly to the ItemStack, you will have to create a new item from this compound (luckily we have an expression for that).

Here is an example of getting the FULL NBT of an item looks like.

set {_n} to full nbt of diamond sword of sharpness 5

This is what the compound would visually look like:
Minecraft 1.20.4 and below:

{id: "minecraft:diamond_sword", Count: 1b, tag: {Enchantments: [{id: "minecraft:sharpness", lvl: 5s}], Damage: 0}}

Minecraft 1.20.5 and above:

{id: "minecraft:diamond_sword", count: 1, components: {"minecraft:enchantments": {levels: {"minecraft:sharpness": 5}}}}

NBT Compound

The second option will return everything that is within the "tag" compound of an ItemStack.
NOTE: When getting NBT for an ItemStack this way, any changes you make to this compound will directly apply to the ItemStack.
NOTE: For Minecraft 1.20.5+ this will return everything within the "minecraft:custom_data" component of the "components" compound.

Here is an example of getting the item NBT of an item looks like.

set {_n} to nbt of diamond sword of sharpness 5

This is what the compound would visually look like:
Minecraft 1.20.4 and below:

{Enchantments: [{id: "minecraft:sharpness", lvl: 5s}], Damage: 0}

Minecraft 1.20.5 and above:

{}

NBT Components Compound

(This is for Minecraft 1.20.5+)
This option will return everything that is within the "components" compound of an ItemStack.
NOTE: When getting NBT for an ItemStack this way, any changes you make to this compound will directly apply to the ItemStack.

Here is an example of getting the item NBT of an item looks like.

set {_n} to components nbt of diamond sword of sharpness 5

This is what the compound would visually look like:

{"minecraft:enchantments":{levels:{"minecraft:sharpness":5}}}

Custom Item NBT

Anytime you want to add custom NBT to an item, it will need to be within the "tag" tag.
If you are using nbt compound just plop your custom NBT anywhere, but if you are using the full nbt compound expression, make sure to store all custom data within the "tag" tag.
For Minecraft 1.20.5+ you have a few options:

  • If using full nbt of %item% you will need to store custom data in the "minecraft:custom_data" tag of the "components" tag.
  • If using nbt of %item% you can put your data anywhere as this will already be in the "minecraft:custom_data" component.
  • If using components nbt of %item% you will need to store custom data in the "minecraft:custom_data" tag.

Entities

You can easily get the NBT compound from an entity

nbt compound of %entity%

EX:

set {_nbt} to nbt compound of event-entity

Any changes you apply to this compound, will automatically update the entity.

Custom Entity NBT

Minecraft does not natively support custom NBT on entities.
Luckily SkBee has a hacky method to allow this.
All custom NBT on an entity will need to be stored within the "custom" tag.

Blocks

You can easily get the NBT compound from a block.

nbt compound of %block%

EX:

set {_n} to nbt compound of target block of player

Any changes you apply to this compound, will automatically update the block.

Custom Block NBT

Minecraft does not natively support custom NBT on blocks.
Luckily SkBee has a hacky method to allow this.
All custom NBT on a block will need to be stored within the "custom" tag.

Chunks

You can easily get the NBT compound of a chunk.

nbt compound of %chunk%

EX:

set {_nbt} to nbt compound of chunk at player

This allows you to store whatever data you want in a specific chunk.
Chunk must be loaded for this to work.

Files

You can easily grab the NBT compound of a file

nbt compound of file %string%

EX:

set {_nbt} to nbt compound of file "world/playerdata/someuuid.dat"

This example would return the NBT compound of an offline player.
If the file isn't found, SkBee will create a new file for you.
This can be great alternative for saving information to files.
Files can end with ".dat" or ".nbt" (other formats.... I dunno what'll happen).
When manipulating file NBT, changes will not be automatically applied, but don't worry, you can easily save the file with this effect:

save nbt file of %nbtcompounds%

EX:

save nbt file of {_nbt}
Clone this wiki locally