2 votes

Pourquoi mon objet avec des enchantements n'est-il pas détecté?

Je veux tester une épée en diamant enchantée lorsqu'elle est tenue dans la main du joueur. J'ai essayé cette commande :

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

Pour une raison quelconque, cela ne détecte pas une épée de Sharpness que j'ai fabriquée en utilisant une enclume. Cependant, lorsque je me /give une épée de Sharpness avec cette commande, cet objet est détecté :

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

Qu'est-ce qui différencie mon épée donnée avec /give de l'épée créée avec une enclume, et comment puis-je faire en sorte que l'épée créée avec une enclume soit détectée par la commande ?

1voto

Skylinerw Points 12529

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}]}}]}

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X