As per the Minecraft Wiki Commands page, the syntax of the /testfor
command is either of:
/testfor <playername>
/testfor <selector>
So, e.g., a command block that fires the command /testfor notch
, with a redstone comparator attached to it, would output a signal from the comparator, assuming that Notch is playing on that server.
Using the Command Block selectors syntax lets you do things like /testfor @a[r=3]
, which will cause the comparator to emit a signal strength equal to the number of players within three meters. Or /testfor @a[m=2]
, which would cause the comparator to emit a signal strength equal to the number of Creative Mode players currently on the server.
As of 14w10c, this is possible using scoreboard values.
First, you need to set up a dummy scoreboard variable. I used "sneaky" as my variable, but you can really use whatever you want (as long as you change the commands as appropriate). To set this up, you just need to use the command /scoreboard objectives add sneaky dummy
. You only need to do this once.
I had to set up the command blocks in a very specific pattern for them to work, as shown:
I think this has something to do with how command blocks handle firing off "simultaneously". The comparator in this setup is in subtraction mode, creating a "comparator clock" which pulses very quickly.
The command blocks on the left are your scoreboard related commands. The one on the bottom left sets "sneaky" to 0 for all players:
/scoreboard players set @a sneaky 0
The command block on the top left sets "sneaky" to 1 for all players with the stealth boots equipped:
/scoreboard players set @a sneaky 1 {Inventory:[{Slot:100b,tag:{display:{Name:"Stealth Boots"}}}]}
The command blocks on the right are your effect commands. They give players the invisibility effect, or take it away, as appropriate. The one on the bottom clears the invisibility effect from all players without the stealth boots:
/effect @a[score_sneaky=0] 14 0 0
The top one gives the invisibility effect to all players with the stealth boots:
/effect @a[score_sneaky_min=1] 14 30000
Best Answer
That's because you can't use /testfor to find people in exact locations, but what you can do is have a command block below and do a /testfor @a[r=3] and that will check for players in a radius of 3 blocks from that command block.