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 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):
/testfor @e[type=Creeper] {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":
/give @p minecraft:diamond_sword 1 0 {ench:[{id:2s,lvl:4s}]}
And your /testforblock
command will declare them as a short as well, which allows you to detect the provided item as well as items enchanted normally:
/testforblock ~1 ~ ~ minecraft:chest -1 {Items:[{id:"minecraft:diamond_sword",tag:{ench:[{id:2s,lvl:4s}]}}]}
You cannot do this specifically, but what you can do is have the player hold the arrow in their off hand (like potion arrows) and set a score to 1, then use the command
/execute @a[score_SCORENAME_min=1] ~ ~ ~ scoreboard players set @e[type=Arrow,r=1] GreenArrow 1.
Best Answer
When you place a named block, it loses its name tag, making it impossible to detect if it was ever named. What you can do, however, is set a custom data value:
Then, replace
detect ~ ~-1 ~ diamond_block 0
withdiamond_block 1
. You can use values 1 through 15, but values above 15 are not supported.Note: In some versions of the game (and possibly the latest updates), blocks with custom data may have a missing texture, and the custom data may not be saved properly. You'll have to look into this yourself as I can't test it at the moment.