Détecter un compte-gouttes avec des éléments sans

J'utilisais cette commande pour utiliser une table d'artisanat personnalisée:

/execute @a ~ ~ ~ detect ~ ~-1 ~ dropper 1 {Items:[{id:minecraft:blaze_rod,Slot:1b,Count:1b,Damage:0s},{id:minecraft:blaze_rod,Slot:4b,Count:1b},{id:minecraft:stick,Slot:7b,Count:1b}]} /scoreboard players set @p LSC 1 

Mais je reçois ce message d'erreur lorsque je me place sur un compte-gouttes avec ces éléments:

Impossible d'exécuter '{Items: [{id: minecraft: blaze_rod, Slot: 1b, Count: 1b, Damage: 0s}, {id: minecraft: blaze_rod, Slot: 4b, Count: 1b}, {id: minecraft: stick , Slot: 7b, Count: 1b}]} / les joueurs de tableau de bord définissent @p LSC 1 'comme TrevMCC38

Soit dit en passant, je suis en 16w06a

La fonction de detect de /execute n'accepte pas les données NBT, seulement une valeur ID et Damage.

Vous devrez plutôt utiliser /testforblock , et si vous avez besoin d'une /testforblock , /testforblock -le avec CommandStats.

Conditions préalables:

Objectif de conserver la valeur CommandStats.

 /scoreboard objectives add CraftSuccess dummy 

L'application de AffectedBlocks déclenche les joueurs, ce qui définira le score du joueur en fonction de la réussite des commandes qui affectent spécifiquement les blocs, tels que /testforblock . Cela peut nécessiter de fonctionner sur une horloge dans l'éventualité où de nouveaux joueurs peuvent se joindre à tout moment.

 /stats entity @a set AffectedBlocks @a[c=1] CraftSuccess 

Pour que CommandStats modifie le score d'une cible, cette cible doit être suivie sur le tableau avant. Cela peut également être nécessaire sur une horloge pour la même raison que précédemment.

 /scoreboard players add @a CraftSuccess 0 

Détection:

Les opérations suivantes doivent être exécutées dans un ordre numérique.

  1. /testforblock les joueurs exécutent la commande nécessaire /testforblock .

     /execute @a ~ ~ ~ /testforblock ~ ~-1 ~ minecraft:dropper 1 {Items:[{id:"minecraft:blaze_rod",Slot:1b,Count:1b,Damage:0s},{id:"minecraft:blaze_rod",Slot:4b,Count:1b},{id:"minecraft:stick",Slot:7b,Count:1b}]} 
  2. En conséquence, le joueur exécutant aura son propre score "CraftSuccess" égal au nombre de blocs trouvés par la commande /testforblock . Si la commande a échoué, son score est défini sur 0. Si la commande a réussi, leur score est réglé sur 1. Vous ciblez les joueurs en fonction de leur score.

     /scoreboard players set @a[score_CraftSuccess_min=1] LSC 1 

Comme note secondaire, vous ne devriez jamais mélanger @a comme un exécuteur testamentaire et @p comme @p de la commande imbriquée si vous souhaitez cibler le même joueur. Alors que @a peut cibler des joueurs morts, @p ne peut pas. Cela signifie que, alors que l'exécuteur peut exécuter /execute pendant qu'ils sont morts, ils ne se ciblent pas et plutôt ciblent le joueur vivant le plus proche. Cela peut nuire gravement à la précision et éventuellement briser un mécanisme sensible aux cibles.

La solution consiste à utiliser le même sélecteur au besoin. Pour le ciblage des joueurs morts, vous utiliserez @a comme exécuteur avec @a[c=1] comme sélecteur imbriqué:

 /execute @a ~ ~ ~ /say @a[c=1] 

Pour les joueurs vivants, vous utiliserez @e[type=Player] avec @p :

 /execute @e[type=Player] ~ ~ ~ /say @p 

C'est aussi pour cette raison que les cibles CommandStat devraient utiliser @a[c=1] lorsque vous travaillez avec des joueurs, car cela garantit qu'il n'y aura pas de cible non intentionnelle ayant modifié leur score.

Utilisez des comparateurs car ils détectent si quelque chose a des blocs et envoie un signal redstone.