Les balises id
et lvl
pour les enchantements sont censées avoir le type de données "court". Cependant, les données des objets ne se corrigent généralement pas automatiquement comme le feraient les données des entités.
Par exemple, si vous invoquez l'entité suivante, la balise Invulnerable
a été incorrectement déclarée comme un entier alors qu'elle est censée être un octet:
summon minecraft:creeper ~ ~1 ~ {Invulnerable:1}
Le jeu lira la valeur numérique de manière souple, vous permettant de déclarer le mauvais type de données et cela fonctionnera toujours. Cependant, le jeu enregistrera correctement la valeur de la balise en tant qu'octet, c'est pourquoi vous devez déclarer le bon type de données lors de la vérification de ces données (ce qui nécessite de déclarer toutes les données telles qu'elles sont enregistrées et n'a aucune souplesse dans les types de données numériques):
execute if entity @e[type=Creeper,nbt={Invulnerable:1b}]
Mais la plupart des données des objets seront enregistrées de la même manière qu'elles ont été lues. Comme vous avez déclaré les balises id
et lvl
en tant qu'entiers, elles resteront des entiers. Mais dans des circonstances normales, telles que l'enchantement, ces balises sont créées comme des shorts.
Vous voudrez les créer avec le type de données attendu. Pour déclarer un short, vous ajoutez la valeur numérique avec un s
comme ceci:
give @p minecraft:diamond_sword{Enchantments:[{id:"minecraft:sharpness",lvl:4s}]} 1
Et votre commande /execute if block
les déclarera également comme des shorts, ce qui vous permet de détecter l'objet fourni ainsi que les objets normalement enchantés:
execute if block ~1 ~ ~ minecraft:chest{Items:[{id:"minecraft:diamond_sword",tag:{Enchantments:[{id:"minecraft:sharpness",lvl:4s}]}}]}