8

I'm used to creating Java Edition Minecraft maps, where NBT can be used to set many different block, item, and entity properties, like an item's CanPlaceOn/CanDestroy list, a chest's items, and more!

To open my maps up to more players, I've started creating maps on Minecraft Bedrock Edition as well. But NBT is inaccessible from commands in BE, which I knew before, but didn't know how much of a problem I would have creating these complicated command chains.

One of the things that I've always been doing is giving players items with custom item names, lores, enchantments, and other properties.

But there is a problem. All this would have been done in NBT in Java Edition. In Bedrock, NBT is inaccessible from commands, meaning the commands I used in JE don't work. Are my dreams crushed?


Browse more workarounds for getting/setting NBT in Bedrock Edition

0

2 Answers 2

13

Instead of storing the item in a chest, you store it in a structure by saving a 1×1 structure that consists of just air and the item entities. So the step by step guide is:

  1. Throw item(s) on top of a structure block, save the structure with entities (probably as a 1×1×1 sized structure).
  2. Change the structure block to load mode.
  3. When activated, load the structure at the player's position.

Now that you know the plan, let's begin!

Step 1: Customize your item

So to do this, you're going to need to prepare your item in your inventory. Please observe the following things that you can do to prepare your item:

Properties that can be set/changed without using this method

You can set the following item properties in a direct command without having to use this method:

  • Default potion effects: Potions can be given as one of the default potions available in the Creative Inventory using data values.
  • CanPlaceOn and CanDestroy: If you want to give an item with these properties alone, you can simply use /give with the JSON components.

Properties you can set/change with this method

The following properties can be changed within the game using this method:

  • Custom name: Take your item to an anvil. Use the anvil’s rename form to change the item name. Instead of using raw JSON text, use [formatting codes](https://minecraft.wiki/w/Formatting codes) to stylize the item name.
  • Some enchantments: Get an enchanted book and combine it with your item in an anvil. You may also use /enchant while holding the item in your main hand. You may not exceed the maximum enchantment level, and you may not enchant items that don't make sense with that enchantment (so no enchanting a fish with Knockback X), but you can use an NBT editor—see below.
  • Filled maps: To give a filled map with custom scale/regions/ to a player, get an empty map yourself, bring it to the region, and activate it. Then place the filled map in the chest. This method is also required to give an empty locator map, because the locator/non-locator data is stored in NBT.

Properties that require an NBT editor to be set/changed

The following properties can be changed through one-time use of an NBT editor. Follow these instructions to modify any of the below listed properties, and place the item in the chest. The below commands will then work to give an exact copy of the item, even with some properties changed, without requiring use of an NBT editor ever again.

Note: The instructions for the NBT editor are out-of-date and will not work anymore. The only method remaining is to also use a structure, however this method has not been posted yet.

  • Lore
  • Unbreakable (won't display on tooltip but still takes effect)
  • Enchantments that an anvil is unable to apply to an item

Properties you cannot set/change

These are item tags that exist in Java Edition, but the matching NBT tag in Bedrock Edition has not been discovered, or is nonexistent. Feel free to tinker with the NBT tags in an editor, and if you can find any new NBT tags, please comment so I can add to this post!

  • Custom potion effects

Step 2: Create the setup

Next, we need to create the setup of structures. This is how:

  1. Ensure you have positional coordinates shown. If not, run this command in your chat:

    gamerule showcoordinates true
    
  2. Pick a block on the ground. Any block will do, as long as it is a full block (not a bottom slab, not a chest, not soul sand, etc.). Stand on it, and note the coordinates that are currently in your position.

  3. You need a structure void for this. Type the following command in your chat:

    give @s structure_void
    
  4. Place the structure void on the block of ground you picked in step 1.

  5. Throw the item that you have customized onto the ground there too. Ensure it is in the same block as the structure void, not next to it.
    From this point, you have 5 minutes to complete the next step. Take too long and your items will disappear!

  6. Run the following command to save the structure:

    structure save <name: string> <from: x y z> <to: x y z> true disk false
    

    But replace the following items in the above command:

    • Replace <name: string> with a memorable name for your structure. Do not forget it or else you will have to create another one without deleting the old one, taking up memory slowly. How wasteful!
    • Replace <from: x y z> and <to: x y z> with the X, Y, and Z coordinates from step 2. This means that you should have specified the same coordinates twice.

Step 3: Set up the commands

You only need one command to load the structure onto the player.

execute @p[name=target_player] ~ ~ ~ structure load <name: string> ~ ~ ~

If the "Upcoming Creator Features" experiment is turned on for your world, the /execute command's syntax is different, and you should use this slightly different command instead:

execute at @p[name=target_player] run structure load <name: string> ~ ~ ~

Replace <name: string> with the name you saved your structure as. Don't remember it? Now you have to go back to step 2 and create a new structure without deleting the old one because you don't remember its name. How wasteful!

Once you've set up this command block, run it, and you should see that the item entities are summoned right on top of you so you don't need to run and fetch them.

3

Note: This answer is now obsolete. The preferred method is to use the structure method. Please go and use it if you would prefer something that works better!

Original post

Your dreams aren't crushed quite yet. Although it may be true that NBT is inaccessible from commands, there is still a workaround for what you want to do!

Here's a handy workaround that lets you give items with custom names and enchantments.

The premise here is to:

  1. Place the item you want to give in a chest.
  2. On command, clone the chest to the player's location.
  3. Use /setblock in destroy mode to destroy the chest, causing it to drop all its items on the player.

Item Customization

To avoid repetition, this list and its instructions have been moved to my other answer detailing the new and improved method involving structures. Please go and read it, and if you still want to go through with this method, come back here afterwards.

Once you have prepared your item, place a template chest on the ground and place your item inside.

Commands

We need to run four commands in order, so you should place down an impulse command chain of three command blocks.

Consider using the structure method instead?

To give item to a player

Note: The /execute command has a different syntax depending on whether the "Upcoming Creator Features" experimental toggle is enabled on your world. In the below command examples, the new syntax is provided below the old syntax.

  1. Tell the player to clone the chest to their position.

    execute @p[name=THE_PLAYER_TO_TARGET] ~ ~ ~ clone Tx Ty Tz Tx Ty Tz ~ ~ ~
    execute at @p[name=THE_PLAYER_TO_TARGET] run clone Tx Ty Tz Tx Ty Tz ~ ~ ~
    

    Replace Tx, Ty, and Tz with the template location in both coordinate specifications.

  2. Tell the player to set the block to air and destroy the chest.

    execute @p[name=THE_PLAYER_TO_TARGET] ~ ~ ~ setblock ~ ~ ~ air destroy
    execute at @p[name=THE_PLAYER_TO_TARGET] run setblock ~ ~ ~ air destroy
    
  3. Kill the chest.

    kill @e[type=item,name=chest]
    

To summon item on the ground:

  1. Clone the chest.

    clone Tx Ty Tz Tx Ty Tz Rx Ry Rz
    

    T: Template location.
    R: Target location.

  2. Set the chest to air and destroy it.

    setblock Rx Ry Rz air destroy
    
  3. Kill the chest.

    kill @e[type=item, name=chest]
    

Sources

While this trick is handy, sadly, I cannot claim ownership of it. I discovered it in a map in Minecraft: Education Edition, from the We Are the Rangers library. I saw it as part of a task in the map, and while looking in the commands, it was too good to not post here. Thank you to the Minecraft Education Edition team at Microsoft for creating such awesome maps!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.