El detect
fonction de /execute
n'accepte pas les données NBT, seulement un ID et une valeur de dommage.
Vous devrez plutôt utiliser /testforblock
et si vous avez besoin d'une convivialité multijoueur, vous pouvez le mélanger avec CommandStats.
Conditions préalables :
Objectif pour contenir la valeur de CommandStats.
/scoreboard objectives add CraftSuccess dummy
L'application de la AffectedBlocks
aux joueurs, qui déterminera le score du joueur en fonction de la réussite des commandes qui affectent spécifiquement les blocs, telles que /testforblock
. Il peut être nécessaire de faire fonctionner une horloge dans le cas où de nouveaux joueurs peuvent se joindre à tout moment.
/stats entity @a set AffectedBlocks @a[c=1] CraftSuccess
Pour que CommandStats puisse modifier le score d'une cible, cette dernière doit être suivie au préalable sur le tableau d'affichage. Il peut également être nécessaire de faire fonctionner une horloge pour la même raison que précédemment.
/scoreboard players add @a CraftSuccess 0
Détection :
Les éléments suivants doivent être exécutés dans l'ordre numérique.
-
Faire en sorte que les joueurs exécutent les /testforblock
commandement.
/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}]}
-
En conséquence, le joueur exécutant aura son propre score "CraftSuccess" égal au nombre de blocs trouvés par l'outil /testforblock
commande. Si la commande échoue, leur score est fixé à 0. Si la commande réussit, leur score est fixé à 1. Vous ciblez ensuite les joueurs en fonction de leur score.
/scoreboard players set @a[score_CraftSuccess_min=1] LSC 1
En passant, vous devriez jamais mélange @a
en tant qu'exécuteur testamentaire et @p
comme cible de la commande imbriquée si vous avez l'intention de cibler le même joueur. Alors que @a
peut cibler les joueurs morts, @p
ne peut pas. Cela signifie que si l'exécuteur peut exécuter /execute
tant qu'ils sont morts, ils ne se cibleront pas eux-mêmes et viseront plutôt le joueur vivant le plus proche. Cela peut nuire gravement à la précision et éventuellement briser un mécanisme sensible à la cible.
La solution consiste à utiliser le même sélecteur lorsque cela est nécessaire. Pour cibler un joueur mort, vous utiliserez @a
en tant qu'exécuteur avec @a[c=1]
comme sélecteur imbriqué :
/execute @a ~ ~ ~ /say @a[c=1]
Pour les joueurs vivants uniquement, vous utiliseriez @e[type=Player]
avec @p
:
/execute @e[type=Player] ~ ~ ~ /say @p
C'est également pour cette raison que les cibles de CommandStat doivent utiliser @a[c=1]
lorsque vous travaillez avec des joueurs, car cela permet d'éviter qu'une cible involontaire ne voie son score modifié.