What is happening with SuccessCount in 1.11?

I am working on my map and I really want to know WHY the SuccessCount tag doesn't work anymore in 1.11? I got at this conclusion when I tried to test if there are 2 players in a certain area. I read all the commands again in again, place and replaced back the command blocks (the command blocks can bug sometimes) and even brought a second account in that area to be sure.

enter image description here

1 - execute @e[type=armor_stand,name=lobby] ~ ~ ~ testfor @a[r=10,c=2]

2 - /testforblock ~1 ~ ~ minecraft:repeating_command_block -1 {SuccessCount:2}

3 - say test

Can someone help me with this? I tried so many solutions, but it kinda gets tidious to do anymore. I would like an explanation or maybe other solution.


Solution 1:

It is working correctly; you are receiving the success count from the /execute command, not the /testfor command. If there is only 1 armor stand running the /testfor command, then the success count is going to be 1 if that /testfor command succeeds (causing /execute to succeed the 1 time).

You will need to rely on other methods to track total, such as removing /execute and using hard-coded coordinates:

/testfor @a[x=10,y=64,z=10,r=10,c=2]

Or scores to track the number of players (and detect that score instead of the SuccessCount value):

/scoreboard players set #NearLobby OBJ 0
/execute @e[type=armor_stand,name=lobby] ~ ~ ~ /execute @a[r=10,c=2] ~ ~ ~ /scoreboard players add #NearLobby OBJ 1
/scoreboard players test #NearLobby OBJ 2 *

Solution 2:

/testfor's SuccessCount is how many entities are found, however /execute's SuccessCount is how many times the contained command is successfully run.

As your command block contains /execute, the SuccessCount is tracking how many times the contained command (/testfor) is being successfully run. As /testfor is only being run once (I assume there's only one "lobby" stand), it can only ever succeed once.


As a simple workaround without having to go into stats or scoreboards, you could reverse the first command:

execute @a ~ ~ ~ testfor @e[type=armor_stand,name=lobby,r=10]

This means that the /testfor command will run multiple times and succeed once for every player near the stand.

Though note that this would no longer be capped at 2.


Alternatively, you can use command stats:

/stats entity @e[type=armor_stand,name=lobby] set SuccessCount @e[type=armor_stand,name=lobby,c=1] PlayersFound

Beforehand, you'll need to add a PlayersFound dummy objective, and also initiate the lobby armor stand's score to something (e.g: /scoreboard players set @e[type=armor_stand,name=lobby] PlayersFound 0) before stats will work.

Then, after running the first command, you can check if the armor stand found at least 2 players with @e[type=armor_stand,name=lobby,score_PlayersFound_min=2].

With this, you're checking the result of the /testfor command that the armor stand is running, rather than the /execute command that the command block is running.