Minecraft using the /execute command for specific people
I'm trying to make a kit pvp map in vanilla Minecraft, but I ran into a problem. I want specific people to get a certain effect. So I got a /testfor
command:
/testfor @a{SelectedItemSlot:0,Inventory:[{Slot:0b,tag:{display:{Name:"Fire Wand"}}}]}
This command tests if any person has this specified item name in slot 0. It then turns on a comparator which activates the second command once it finds that person:
/execute @p ~ ~ ~ summon Fireball ~2 ~1 ~ {ExplosivePower:10,direction:[0.0,0.0,0.0]}
How can I specify this command to the person holding the named item?
Solution 1:
You have to use a command to apply a label to the player based on their data rather than using /testfor
. For example, /scoreboard
can assign a label:
/scoreboard players tag @a[tag=HasItem] remove HasItem
/scoreboard players tag @a[tag=!HasItem] add HasItem {SelectedItemSlot:0,Inventory:[{Slot:0b,tag:{display:{Name:"Fire Wand"}}}]}
And you'd then target players based on their label. The correct tag for fireball damage is ExplosionPower
:
/execute @a[tag=HasItem] ~ ~ ~ /summon Fireball ~2 ~1 ~ {ExplosionPower:10,direction:[0.0,0.0,0.0]}
If using 1.8, you will have to use a score instead. Objective to create:
/scoreboard objectives add HasItem dummy
Commands to run for labeling:
/scoreboard players set @a HasItem 0
/scoreboard players set @a HasItem 1 {SelectedItem:{tag:{display:{Name:"Fire Wand"}}}}
And for targeting, you'd use the score
parameter:
/execute @a[score_HasItem_min=1] ~ ~ ~ /summon Fireball ~2 ~1 ~ {ExplosionPower:10,direction:[0.0,0.0,0.0]}
You may be interested in the SelectedItem
compound, which holds a copy of the player's currently-held item. This way you do not need to specifically test each individual hotbar slot:
/scoreboard players tag @a[tag=!HasItem] add HasItem {SelectedItem:{tag:{display:{Name:"Fire Wand"}}}}