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"}}}}