Est-il possible de marquer ou de modifier un joueur avec un élément spécifique dans son inventaire

Je crée une carte CTF, en utilisant des blocs de commandes dans vanilla 1.8. J'ai découvert deux commandes pour détecter si un élément est dans un inventaire de joueurs:

/clear @a[team=Red] banner 4 0

/testfor @a[team=Red] {Inventory:[{id:"minecraft:banner"}]}

Ceux-ci fonctionnent bien, sauf si vous souhaitez exécuter une commande sur le joueur qui porte cet objet. Par exemple: je souhaite que le joueur qui choisisse une bannière de l'équipe adverse, équippe automatiquement cette bannière dans leur emplacement principal avec une commande similaire à celle-ci:

/replaceitem entity @a[???????] slot.armor.head banner 1 4

Est-ce possible? Sinon, existe-t-il un moyen de marquer un joueur spécifique portant un objet à l'aide de tableaux de bord?

@ModDL avait la bonne idée, bien que ses commandes aient une erreur de jeu.

Voici les commandes que j'ai finalement utilisées pour marquer les joueurs avec le drapeau et effectuer des actions sur eux:

Pour configurer le suivi, exécutez-les une fois au début:

 /scoreboard objectives add hasBlueFlag dummy /scoreboard players set @a[team=Red] hasBlueFlag 0 

Pour détecter et marquer qui a le drapeau, exécutez-le sur une horloge:

 /scoreboard players set @a[team=Red,score_hasBlueFlag=0] hasBlueFlag 1 {Inventory:[{id:"minecraft:banner",Damage:4s}]} 

Pour réinitialiser qui a le drapeau, exécutez cette commande sur une horloge:

 /testfor @a[score_hasBlueFlag=1] {Inventory:[{id:"minecraft:banner",Damage:4s}]} 

Et, inversez la sortie dans un bloc de commande avec ceci:

 /scoreboard players set @a[score_hasBlueFlag=1] hasBlueFlag 0 

Pour effectuer une action sur le transporteur de drapeau, vous pouvez simplement déclencher quelque chose comme ça, chaque fois que vous le souhaitez. Les commandes suivantes remplacent l'emplacement du casque de l'opérateur de drapeau par le drapeau:

 /clear @p[score_hasBlueFlag=1] banner 4 -1 /replaceitem entity @p[score_hasBlueFlag=1] slot.armor.head banner 1 4 

Remarques:

  • Ces commandes testent et s'exécutent en 1.8.1
  • Dans les commandes ci-dessus, vous remarquerez Damage:4s , c'est en fait la couleur de la bannière de base (Bleu). En savoir plus sur la propriété Damage NBT ici .
  • Plus d'options de détection de bannière peuvent être trouvées ici

Tout d'abord, vous devez configurer un objectif factice de tableau de bord:

 scoreboard objectives add hasFlag dummy 

Maintenant, créez un 20 Hz. Horloge, comme une horloge de remplissage ou utilisez les blocs de commandes de répétition et chaîne de Minecraft 1.9 pour exécuter les commandes suivantes dans l'ordre:

 scoreboard players set @a hasFlag 0 scoreboard players set @a hasFlag 1 {Inventory:[{id:"minecraft:banner",Damage:4s}]} 

Cela garantit que le porteur du drapeau (c'est-à-dire le joueur avec une bannière bleue) a un score de 1 utilisateur de 1, et c'est 0 pour tous les autres. Notez que vous pouvez modifier l'étiquette de données dans la deuxième commande à l'aide de l'une des balises NBT disponibles pour les joueurs .

Maintenant, nous pouvons faire tout ce que nous voulons avec ce tableau de bord, en utilisant l' score_hasFlag_min=1 sélecteur de cible pour ne cibler que les porteurs de drapeaux, ou score_hasFlag=0 pour cibler tous les autres. Ces commandes doivent être exécutées sur la même horloge, après les commandes ci-dessus. Par exemple:

 replaceitem entity @a[score_hasFlag_min=1] slot.armor.head minecraft:banner 1 4 replaceitem entity @a[score_hasFlag=0] slot.armor.head minecraft:air 1 

Remarque: en 1.9, vous pouvez opter pour l'utilisation de balises de tableau de bord au lieu d'un objectif fictif.

La commande pour le mettre sur une tête de joueur est:
/ Replaceitem entity slot.armor.head minecraft: banner [montant] [datatag]
Et cela placerait la bannière dans la position du casque, mais la bannière sortira du fond de la tête qui ne semble pas très bien mais ça marche toujours et vous pouvez toujours essayer d'utiliser de la laine si vous préférez cela. De plus, le datatag est la couleur du drapeau quel que soit le nombre au lieu de celui qui déterminera la couleur de la bannière et vous devez vous rappeler que vous devez avoir un montant si vous avez un datatag.

Datatags:
Noir = 0
Rouge = 1
Vert = 2
Brown = 3
Bleu = 4
Violet = 5
Cyan = 6
Gris clair = 7
Gris = 8
Rose = 9
Lime = 10
Jaune = 11
Bleu clair = 12
Magenta = 13
Orange = 14
Blanc = 15

Utilisez un tableau de bord factice pour garder une trace de ce que les joueurs sont valides. Par exemple, le tableau de bord est isCarryingFlag

 /scoreboard players isCarryingFlag 1 @a[team=Red] {Inventory:[{id:"minecraft:banner"}]} /excecute @a[isCarryingFlag=1] /scoreboard players isCarryingFlag 0 @a 

Exécutez ces commandes dans l'ordre.