1

I am making a Minecraft map and I want a door (made of blocks) to disappear when a player presses a button with the key in their hand. However, the player will be able to access multiple keys at once, so I need to detect exactly which key the player is holding. Using a basic online /give generator, I have made the keys have custom names and lore, but now I need my execute command to detect the NBT data this creates.

Doing some research, I didn't find much. Most of the things I find, from here or otherwise, are about previous versions of Minecraft, while I am using the latest version, 1.16.3.

I have a command currently that should work, but doesn't. When I hold the key in my hand and activate the command block, nothing happens. No error message in the command block's output, it just doesn't work.

Here's the command I am currently using:

execute if entity @p[nbt={SelectedItem:[{id:"minecraft:tripwire_hook", tag:{display:{Name: '[{"text":"Lockroom Key","italic":false}]', Lore: ['[{"text":"The key to the Lockroom door.","italic":false,"color":"dark_gray"}]']}}}]}] run fill 233 36 47 234 34 49 minecraft:air replace

This command is accepted as valid in a command block, it just doesn't do anything. The key I am holding has the same NBT data as specified.

1

You are so close, but your SelectedItem tag is wrong. The SelectedItem tag is a compound tag directly, not an array tag.

Wrong way:

{SelectedItem:[{id:"minecraft:dirt"}]}

Right way:

{SelectedItem:{id:"minecraft:dirt"}}

So to fix your problem, remove these two square brackets:

execute if entity @p[
    nbt={
        SelectedItem:[ <--[HERE]
            {
                 id:"minecraft:tripwire_hook",
                 tag:{
                     display:{
                         Name: '[{"text":"Lockroom Key","italic":false}]',
                         Lore: [
                            '[{"text":"The key to the Lockroom door.","italic":false,"color":"dark_gray"}]'
                         ]
                     }
                 }
             }
        ] <--[HERE]
    }
]

To make this:

execute if entity @p[nbt={SelectedItem:{id:"minecraft:tripwire_hook", tag:{display:{Name: '[{"text":"Lockroom Key","italic":false}]', Lore: ['[{"text":"The key to the Lockroom door.","italic":false,"color":"dark_gray"}]']}}}}] run fill 233 36 47 234 34 49 minecraft:air replace

The best resource to find all the info you need is the Minecraft Wiki. The page I just linked is the structure of NBT on a player’s file, including the item structure. If you look at the SelectedItem tag, you can see that is a compound tag.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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