Minecraft – How to invert the /testfor command’s result? (1.12 and below)

minecraft-commandsminecraft-java-edition

/testfor, /testforblock, and /testforblocks are all part of the same group of commands and are similar in what they do after their test. They are only useful when their output is measured using redstone comparators (not recommended) or when combined in a chain with other commands (most often way)
It's quite simple. If the test returns TRUE, any conditional command blocks later in the chain will run (unless stopped by a different failed command in between). If the test returns FALSE, the conditional command blocks won't run.

I would like to invert the check, so that if the entity does not exist /testfor, or if the block is not what is specified /testforblock, or if the block regions don't match/testforblocks, then the subsequent commands in the chain will run, and if the check passes, they will not run. How can I do this?

(I suspect that for /testforblock, it's as simple as placing a ! before the block name, but I'm not sure if the ! operator existed in 1.12. For /testfor and /testforblocks, absolutely no idea.)

Please also consider viewing my other, identical question for Minecraft Bedrock Edition.

Best Answer

The way to accomplish this is to use a second (chain, unconditional) command block checking with the command /testforblock <coordinates of first command block> command_block * {SuccessCount:0}, which makes it succeed if the first command block fails (because it's SuccessCount is 0), and fail if the first command block suceeded, allowing you to properly condition things off of the inverse.

If the first command block (that you want to fail) is a repeating or chain command block, then you have to use repeating_command_block or chain_command_block (respectively) instead of just command_block, but the command otherwise works the same.