2 votes

Détecter si SelectedItem fait partie d'une balise #tag

Lors de mon constant effort pour créer une carte PvP jusqu'à présent, j'ai réussi à créer ou à modifier des systèmes de messages de mort personnalisés pour les flèches et la mort par chute avec l'aide d'ici, mais je veux aussi un système qui peut détecter les décès au corps à corps via les épées et les haches pour créer également des messages de mort personnalisés là-bas.

J'ai pensé que le même système que j'utilise actuellement pour les flèches pourrait fonctionner de manière similaire pour les épées, avec une légère exception en ce sens que je devrais créer des balises pour vérifier si l'attaque était une épée ou une hache.

Y a-t-il cependant un moyen de vérifier si l'élément sélectionné d'un joueur est dans une certaine balise (par exemple, j'ai regroupé toutes les épées dans une appelée #epées)? Ou dois-je mettre en place une fonction pour chaque épée plutôt que de simplement tester les épées en général?

Au cas où cela serait nécessaire, voici comment fonctionne le système en général;

  1. Vérifier si la mort du joueur n'est pas causée par une flèche (la noyade, les brûlures de lave/feu et les dégâts de chute n'existent pas, et les monstres sont désactivés, et le mode de jeu est Aventure ce qui empêche la pose de blocs, par conséquent aucun autre type de dégât ne peut être causé)
  2. Exécuter une vérification de mort "générique", cherchant s'il s'agit d'une épée ou d'une hache <-- C'est là que la recherche serait effectuée
  3. Vérifier les enchantements/balises sur l'épée/la hache trouvée

3voto

ginkgo Points 2439

Oui, les balises d'élément existent. Le fichier de balise d'élément ressemblerait à ceci :

swords.json

{
  "values": [
    "minecraft:wooden_sword",
    "minecraft:stone_sword",
    "minecraft:golden_sword",
    "minecraft:iron_sword",
    "minecraft:diamond_sword",
    "minecraft:netherite_sword"
  ]
}

Le voici, en action :

Balise d'élément

Cependant, même si le wiki dit que "Les balises d'élément peuvent être appelées lors des tests pour des arguments d'élément dans les commandes avec #(ID namespace)", cela ne semble pas être vrai. Ce commentaire Reddit confirme également que cela n'est pas possible :

... [Tester les balises d'élément] n'est pas l'une des fonctionnalités du test NBT d'élément. Vous devez vous rappeler que lors du test d'un NBT, l'entité doit avoir un NBT identique à celui que vous fournissez. Aucun élément n'aura la balise Item.id égale à "#bhtype:swords", malheureusement. Minecraft le reconnaît comme une commande valide car vous avez la valeur Item.id comme un TAG_String identifiable, rien de plus. ...

Voici une solution de contournement :

execute unless entity @s[nbt=!{SelectedItem:{id:"minecraft:wooden_sword"}},nbt=!{SelectedItem:{id:"minecraft:stone_sword"}},nbt=!{SelectedItem:{id:"minecraft:golden_sword"}},nbt=!{SelectedItem:{id:"minecraft:iron_sword"}},nbt=!{SelectedItem:{id:"minecraft:diamond_sword"}},nbt=!{SelectedItem:{id:"minecraft:netherite_sword"}}] run say I'm holding a sword

Bonne chance sur votre carte PvP :)


Comme l'a commenté ExpertCoder14, "si vous utilisez un pack de données, vous pouvez utiliser un prédicat pour tester une balise d'élément".

Voici à quoi ressemblerait le prédicat :

holding_sword.json

{
  "condition": "minecraft:entity_properties",
  "entity": "this",
  "predicate": {
    "equipment": {
      "mainhand": {
        "tag": "test:swords"
      }
    }
  }
}

Ensuite, vous pourriez utiliser cette commande :

/execute if predicate test:holding_sword run say I'm holding a sword

0 votes

Ah, donc je dois les tester tous. fun lmao, merci!

0 votes

Contrairement à ma réponse, j'ai découvert que les balises d'élément peuvent être utilisées lors de tests d'arguments d'élément dans les commandes. Plus précisément, dans la commande /clear. Vous pouvez faire /clear @s #test:épées. Je ne suis pas au courant d'autres cas, cependant.

0 votes

Oui, je savais que tu pouvais tester des commandes comme ça, mais j'étais curieux à propos de l'NBT ; c'est bien que je puisse utiliser des prédicats pour ça cependant.

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