JugonesTop

Hablando de mover NPCs en Minecraft 1.13 (edición de Java) minecraft minecraft-commands

Contexto:

Con el fin de desencadenar un mensaje de chat "de" Gnp - dicen los aldeanos - al acercarse a ellos, estoy utilizando un siempre activos repetir-bloque de comandos (A), un redstone-señal sensible a los impulsos de comando de bloque (B) y un comparador de redstone entre ellos, apuntan desde la a a la B.

enter image description here

Ya quiero dejar que el Pnj, no se pueden utilizar coordenadas absolutas, así que lo que estoy haciendo actualmente es:

A: execute at @e[name=Gary] if entity @p[distance=..2]
B: execute at @e[name=Gary] run tellraw @a[distance=..2] "Hey!"

Esto se traduce en el mensaje de chat "¡Hey!" aparecer una vez por cada jugador con la distancia a 2 cuadras o menos a una entidad llamada Gary tan pronto como un jugador se detecta en ese espacio.


Pregunta:

Ya es extraño que Gary habla a la gente en frente de él, así como a las personas detrás de él, es posible modificar los comandos de forma que el centro de la zona en la que los jugadores se detectan (y en el que los jugadores tienen que estar para recibir el mensaje) no es exactamente a Gary, pero a 1 cuadra delante de él?

enter image description here


Deliberaciones:

  • Si Gary siempre estaba en el mismo lugar, sería fácil mediante el uso de coordenadas absolutas como este:

    A: execute if entity @p[x=x_,y=y_,z=z_,distance=..2]
    B: tellraw @a[x=x_,y=y_,z=z_,distance=..2] "Hey!"
    

    x_, y_ y z_ ser el deseado coordenadas a 1 cuadra delante de Gary.

  • Desde la versión 1.13 es posible usar el símbolo de intercalación de notación para las coordenadas en algunos comandos haciéndolos coordenadas relativas considerando el comando del ejecutor de la dirección de visualización, pero parece que el destino selector de argumentos sólo apoyo coordenadas absolutas en Java edition.

Respuesta

Usted puede utilizar el símbolo de intercalación de notación (^) en execute positioned, lo que elimina la necesidad de la x, y y z objetivo selectores completo (a excepción de algunos que realmente nicho de los casos). El comando que necesitas es este:

execute at @e[type=villager] positioned ^ ^ ^2 run tellraw @a[distance=..2] "Hey!"

Como un bono, usted puede deshacerse de la comparador (y también evitar que a los jugadores por qué entrar en la radio varias veces llegar el mensaje varias veces) por poner este comando después de la primera:

execute at @e[type=villager] positioned ^ ^ ^2 run tag @a[distance=..2] add heardVillagerTalk

y modificando el primer comando:

execute at @e[type=villager] positioned ^ ^ ^2 run tellraw @a[distance=..2,tag=!heardVillagerTalk] "Hey!"

Esto evitará que el problema de la comparador había de que los jugadores pueden entrar y salir de la zona y hacer llegar el mensaje cada vez.


Si usted está usando un marcador en el mapa, por supuesto, usted puede hacer lo mismo con eso. Digamos que el estado 0 es antes de haber "escuchado" el "aldeano" "hablar" y el estado 1 es después. Hacer este comando el comando de segundo en la fila:

execute at @e[type=villager] positioned ^ ^ ^2 if entity @a[distance=..2] run scoreboard players set $game state 1

Y hará que ambos solo se activan en el estado 0. Esto supone que su estado marcador que se llama "estado" y el titular "$juego".