I'm trying to run a command when a player crosses z=0
. I currently have the following command in a powered repeating command block:
/replaceitem entity @a[z=0] slot.hotbar.4 written_book 1 0 {Written book data}
I also tried:
/replaceitem entity @a[x=!1000,y=!1000,z=0] slot.hotbar.4 written_book 1 0 {Written book data}
And even:
/replaceitem entity @a[x=1000,y=1000,z=0] slot.hotbar.4 written_book 1 0 {Written book data}
However, in all three circumstances, the command gives the book to a player no matter their position. What am I doing wrong? The wiki says:
[x=X,y=Y,z=Z] — Selects targets based on distance to that exact position.
Do I need all three? If so, can I use ! negators for the x and y values? It's my first time using the position target selectors, so forgive me if I'm missing something obvious.
Best Answer
The
x
,y
, andz
parameters only specify origin, and will still search the entire world for a target closest to that origin (which will always be found). You must use an area limiter such asr
for a radius ordx/dy/dz
for a square.However, any of the coordinate origin values not specified will default to the value of the command executor. In this case, by not specifying
x
ory
, they will default to the command block's coordinates. By adding an area limiter to your first command, it would only find players at the specified Z coordinate, but those players must have the same X and Y coordinate as the command block.The solution is to use
/execute
to change the origin to that of the targets, and then modify the origin and include an area limiter. You can either modify the origin in the/execute
syntax directly, or in the nested selector:Or:
The
!
operator can only be used with string-based parameters, beingteam
,name
,type
,tag
, andm
.