Minecraft – How to invert the /testfor command’s result

minecraft-bedrock-editionminecraft-commands

Following up on an almost identical question you can find here, I would now like a solution that works in Minecraft Bedrock Edition.

Here is the text of the other question:

/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.)

You can find the accepted answer by clicking on the link above. However, this solution does not work in Bedrock Edition, as I cannot test for NBT tags like {SuccessCount:1}.

How can I accomplish this task? The only thing I can think of is using comparators and a redstone torch, but I'm 99% sure there is a better way.

Best Answer

It's possible. You want a command to execute on a failed detection, so you'll have to chain that command to a different block that scans the block doing the detecting, and compares it to an identical one that is intended to always fail to detect.. I'll try to explain..

Say you have a command block that is trying to detect something at ~ ~1 ~ but it finds no target.. say there is another identical to it, but it IS finding a target at ~ ~1 ~. Say there is a third command block that is comparing the first two to detect if they are identical. They will not be identical until they are either both successful, or both unsuccessful at detecting the target at the time of check. You want them both to match as unsuccessfully detecting a condition, which will successfully be detected and chained from when the third block scans and continues its own chain. If both of the first two were to fail to detect a target, they would match according to the third command block which would allow a chain command block to execute a new command from that third block detecting unsuccessful command execution.