2

I want to test for an enchanted diamond sword when it is held in the player's hand. I tried this command:

execute if entity @p[nbt={SelectedItem:{id:minecraft:diamond_sword,tag:{Enchantments:[{id:"minecraft:sharpness",lvl:4}]}}}]

For some reason, this isn't detecting a Sharpness sword that I made using an anvil. However, when I /give myself a Sharpness sword with this command, this item is detected:

give @s minecraft:diamond_sword{Enchantments:[{id:"minecraft:sharpness",lvl:4}]}

What is differentiating my /given sword with the anvil-created sword, and how can I make the anvil-created sword be detected by the command?

0

1 Answer 1

1

The id and lvl tags for enchantments are intended to have the "short" datatype. However, item data generally does not auto-correct itself like it would with entity data.


For example, if you summon the following entity, the Invulnerable tag was incorrectly declared as an integer even though it's meant to be a byte:

summon minecraft:creeper ~ ~1 ~ {Invulnerable:1}

The game will read the numerical value leniently, allowing you to declare the wrong datatype and it will still work. However, the game will appropriately save the tag's value as a byte, which is why you need to declare the correct datatype when testing for that data (which requires you to declare all data as it's saved and has no leniency in numerical datatypes):

execute if entity @e[type=Creeper,nbt={Invulnerable:1b}]

But most item data will save the same way it was read. Since you declared the id and lvl tags as integers, they will remain as integers. But under normal circumstances, such as enchanting, these tags are created as shorts.

You will want to create them with the expected datatype. To declare a short, you append the numerical value with an s like so:

give @p minecraft:diamond_sword{Enchantments:[{id:"minecraft:sharpness",lvl:4s}]} 1

And your /execute if block command will declare them as a short as well, which allows you to detect the provided item as well as items enchanted normally:

execute if block ~1 ~ ~ minecraft:chest{Items:[{id:"minecraft:diamond_sword",tag:{Enchantments:[{id:"minecraft:sharpness",lvl:4s}]}}]}
0

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.