I am trying to use the /execute and detect air below the player and set the block to a barrier block and the destroy it one second later. in doing this I am trying to make a double jump mechanism but a the moment the commands are in separate blocks using comparators and repeaters this is fine on single player but not multiplayer friendly. I did some research and I got this:

/execute @e[type=Player] ~ ~ ~ detect ~ ~-2 ~ air 1 fill ~-2 ~-1 ~-2 ~1 ~-1 ~1 barrier destroy 0

But, this doesn't work and it comes up with

[11:52:19] Failed to execute 'detect' as mr_assley19

If anyone could come up with any alternatives or how to fix the command that I've tried, then that would be great!


Solution 1:

To fix the command:

  • @e[type=Player] can just be @a
  • There is no air with a data value of 1, so the detect will never succeed; it should be 0
  • The data value in /fill should come before the old block handling mode

So your command should be:

execute @a ~ ~ ~ detect ~ ~-2 ~ air 0 fill ~-2 ~-1 ~-2 ~1 ~-1 ~1 barrier 0 destroy

I'm not sure if this really does what you want it to though. There is no way to execute two separate commands in a command block, nor is there any way to have a delay in a single block.

Solution 2:

Detect syntax:

    /detect <x1> <y1> <z1> <x2> <y2> <z2> <TileName> <dataValue>

The detect command needs block datavalue as well as the ID for the block. The only valid metadata for air is 0. 1 will cause the detect to always return false because minecraft cannot find air with datavalue 1.

Fill syntax:

    /fill <x1> <y1> <z1> <x2> <y2> <z2> <TileName> [dataValue] [oldBlockHandling] [dataTag]

For the fill command, you just mixed up the dataValue and oldBlockHandling.

Final command should be:

    /execute @e[type=Player] ~ ~ ~ detect ~ ~-2 ~ air 0 fill ~-2 ~-1 ~-2 ~1 ~-1 ~1 barrier 0 destroy