Talking to moving NPCs in Minecraft 1.13Inventory Slot DetectionUsing spreadplayers to tp them to armorstand in unloaded chunkMinecraft block detection for a specific block/tp Relative CoordinatesMinecraft floor crafting deletes previous resultsMinecraft 1.13 /give command syntaxMinecraft 1.7.10 commands to 1.13?How to teleport players from one radius to the same relative locations in another?Need to make target selector only select one entityIs there any way to add a “wildcard” text to an execute command?

How do you deal with characters with multiple races?

Word for giving preference to the oldest child

How can I convert a linear narrative into a branching narrative?

Why did Windows 95 crash the whole system but newer Windows only crashed programs?

Narset, Parter of Veils interaction with Matter Reshaper

What is a good example for artistic ND filter applications?

Can I attune a Circlet of Human Perfection to my animated skeletons to allow them to blend in and speak?

How to have poached eggs in "sphere form"?

Scam? Checks via Email

Why does the Rust compiler not optimize code assuming that two mutable references cannot alias?

Why does one get the wrong value when printing counters together?

Bouncing map back into its bounds, after user dragged it out

Did Vladimir Lenin have a cat?

How did astronauts using rovers tell direction without compasses on the Moon?

Why don't short runways use ramps for takeoff?

Why would anyone ever invest in a cash-only etf?

Why are subdominants unstable?

Was the Psych theme song written for the show?

Circle symbol compatible with square and triangle

Is it okay for me to decline a project on ethical grounds?

Prepare a user to perform an action before proceeding to the next step

Is it possible for a particle to decay via gravity?

Embedded C - Most elegant way to insert a delay

How to prevent a single-element caster from being useless against immune foes?



Talking to moving NPCs in Minecraft 1.13


Inventory Slot DetectionUsing spreadplayers to tp them to armorstand in unloaded chunkMinecraft block detection for a specific block/tp Relative CoordinatesMinecraft floor crafting deletes previous resultsMinecraft 1.13 /give command syntaxMinecraft 1.7.10 commands to 1.13?How to teleport players from one radius to the same relative locations in another?Need to make target selector only select one entityIs there any way to add a “wildcard” text to an execute command?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








2















Context:



In order to trigger a chat message "from" NPCs - say villagers - when approaching them, I am using an always-active repeat-command block (A), a redstone-signal-sensitive impulse-command block (B) and a redstone comparator between them, pointing from A to B.



enter image description here



Since I want to let the NPCs run free, I can't use absolute coordinates, so what I'm currently doing is:



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


This results in the chat message "Hey!" to appear once for every player with distance 2 blocks or less to an entity named Gary as soon as a player is detected in that space.




Question:



Since it is odd that Gary talks to people in front of him as well as to people behind him, is it possible to alter the commands in a way that the center of the area in which players are detected (and in which players have to be to get the message) is not at exactly Gary's position, but 1 block in front of him?



enter image description here




Deliberations:




  • If Gary always stood in the same spot, it would be easy by using absolute coordinates like this:



    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_ and z_ being the desired coordinates 1 block in front of Gary.



  • Since version 1.13 it is possible to use caret notation for coordinates in some commands making them relative coordinates considering the command's executor's viewing direction, but it seems that target selector arguments only support absolute coordinates in Java edition.










share|improve this question


























  • See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

    – SpiceWeasel
    Jan 15 at 3:21











  • @SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

    – Maevur
    Jan 15 at 4:14











  • I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

    – Fabian Röling
    Jan 15 at 7:10











  • I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

    – Fabian Röling
    Jan 15 at 8:15











  • @Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

    – Maevur
    Jan 15 at 11:05

















2















Context:



In order to trigger a chat message "from" NPCs - say villagers - when approaching them, I am using an always-active repeat-command block (A), a redstone-signal-sensitive impulse-command block (B) and a redstone comparator between them, pointing from A to B.



enter image description here



Since I want to let the NPCs run free, I can't use absolute coordinates, so what I'm currently doing is:



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


This results in the chat message "Hey!" to appear once for every player with distance 2 blocks or less to an entity named Gary as soon as a player is detected in that space.




Question:



Since it is odd that Gary talks to people in front of him as well as to people behind him, is it possible to alter the commands in a way that the center of the area in which players are detected (and in which players have to be to get the message) is not at exactly Gary's position, but 1 block in front of him?



enter image description here




Deliberations:




  • If Gary always stood in the same spot, it would be easy by using absolute coordinates like this:



    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_ and z_ being the desired coordinates 1 block in front of Gary.



  • Since version 1.13 it is possible to use caret notation for coordinates in some commands making them relative coordinates considering the command's executor's viewing direction, but it seems that target selector arguments only support absolute coordinates in Java edition.










share|improve this question


























  • See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

    – SpiceWeasel
    Jan 15 at 3:21











  • @SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

    – Maevur
    Jan 15 at 4:14











  • I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

    – Fabian Röling
    Jan 15 at 7:10











  • I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

    – Fabian Röling
    Jan 15 at 8:15











  • @Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

    – Maevur
    Jan 15 at 11:05













2












2








2








Context:



In order to trigger a chat message "from" NPCs - say villagers - when approaching them, I am using an always-active repeat-command block (A), a redstone-signal-sensitive impulse-command block (B) and a redstone comparator between them, pointing from A to B.



enter image description here



Since I want to let the NPCs run free, I can't use absolute coordinates, so what I'm currently doing is:



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


This results in the chat message "Hey!" to appear once for every player with distance 2 blocks or less to an entity named Gary as soon as a player is detected in that space.




Question:



Since it is odd that Gary talks to people in front of him as well as to people behind him, is it possible to alter the commands in a way that the center of the area in which players are detected (and in which players have to be to get the message) is not at exactly Gary's position, but 1 block in front of him?



enter image description here




Deliberations:




  • If Gary always stood in the same spot, it would be easy by using absolute coordinates like this:



    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_ and z_ being the desired coordinates 1 block in front of Gary.



  • Since version 1.13 it is possible to use caret notation for coordinates in some commands making them relative coordinates considering the command's executor's viewing direction, but it seems that target selector arguments only support absolute coordinates in Java edition.










share|improve this question
















Context:



In order to trigger a chat message "from" NPCs - say villagers - when approaching them, I am using an always-active repeat-command block (A), a redstone-signal-sensitive impulse-command block (B) and a redstone comparator between them, pointing from A to B.



enter image description here



Since I want to let the NPCs run free, I can't use absolute coordinates, so what I'm currently doing is:



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


This results in the chat message "Hey!" to appear once for every player with distance 2 blocks or less to an entity named Gary as soon as a player is detected in that space.




Question:



Since it is odd that Gary talks to people in front of him as well as to people behind him, is it possible to alter the commands in a way that the center of the area in which players are detected (and in which players have to be to get the message) is not at exactly Gary's position, but 1 block in front of him?



enter image description here




Deliberations:




  • If Gary always stood in the same spot, it would be easy by using absolute coordinates like this:



    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_ and z_ being the desired coordinates 1 block in front of Gary.



  • Since version 1.13 it is possible to use caret notation for coordinates in some commands making them relative coordinates considering the command's executor's viewing direction, but it seems that target selector arguments only support absolute coordinates in Java edition.







minecraft minecraft-commands






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 28 mins ago









pppery

1,4351 gold badge7 silver badges20 bronze badges




1,4351 gold badge7 silver badges20 bronze badges










asked Jan 15 at 2:53









MaevurMaevur

134 bronze badges




134 bronze badges















  • See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

    – SpiceWeasel
    Jan 15 at 3:21











  • @SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

    – Maevur
    Jan 15 at 4:14











  • I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

    – Fabian Röling
    Jan 15 at 7:10











  • I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

    – Fabian Röling
    Jan 15 at 8:15











  • @Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

    – Maevur
    Jan 15 at 11:05

















  • See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

    – SpiceWeasel
    Jan 15 at 3:21











  • @SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

    – Maevur
    Jan 15 at 4:14











  • I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

    – Fabian Röling
    Jan 15 at 7:10











  • I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

    – Fabian Röling
    Jan 15 at 8:15











  • @Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

    – Maevur
    Jan 15 at 11:05
















See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

– SpiceWeasel
Jan 15 at 3:21





See if this works: /execute at @e[type=villager] as @s positioned ^ ^ ^2 run tellraw @a[distance=..2] "text":"Hey!"

– SpiceWeasel
Jan 15 at 3:21













@SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

– Maevur
Jan 15 at 4:14





@SpiceWeasel This seems to work if I paste it into the chat by myself standing in front of a villager (regardless of my viewing direction which is good), but running in a command block it does nothing. Isn't "at" the same as "positioned" with the difference that "at" uses all three, the position, the rotation and the dimension of the subject and "positioned" only uses the position? So "execute at @e[type=villager]" would be the same as "execute positioned as @e[type=villager] rotated as @e[type=villager] in minecraft:overworld" if the villager resides in the overworld?

– Maevur
Jan 15 at 4:14













I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

– Fabian Röling
Jan 15 at 7:10





I haven't read the entire question yet, but I'm wondering about your setup. When do you expect the comparator to activate? How I understand it, it would never do it.

– Fabian Röling
Jan 15 at 7:10













I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

– Fabian Röling
Jan 15 at 8:15





I can't access Minecraft currently, so my answer will have to wait some hours, but you can definitely use the caret notation with execute positioned, then you don't even need xyz in the selector anymore. Also, your two commands don't need to be two. Just make one, it does the same. Not sure what your comparator is supposed to do, but if you want to tell the player only once, just give him a tag and make the speaking command only target players without the tag.

– Fabian Röling
Jan 15 at 8:15













@Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

– Maevur
Jan 15 at 11:05





@Fabian: Why this setup? You guessed it: I want the message to only show up once instead of every tick the player is standing in the right area. (A) constantly checks if a player is standing in the area and if so, the comparator activates and stays activated as long as the player's position matches the condition. As a result, (B) gets only activated once, that is when the player enters the area and (A)'s output is true for the first time. Both of my example command pairs work perfectly.

– Maevur
Jan 15 at 11:05










1 Answer
1






active

oldest

votes


















0














You can use the caret notation (^) in execute positioned, which removes the need for the x, y and z target selectors entirely (except in some really niche cases). The command you need is this one:



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



As a bonus, you can get rid of the comparator (and also prevent that players why enter the radius multiple times get the message multiple times) by putting this command after the first:



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


and modifying the first command to:



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


This will prevent the issue the comparator had that players could walk in and out of the area and get the message every time.




If you're using a state scoreboard in your map, you can of course do the same with that. Let's say that state 0 is before having "heard" the "villager" "talk" and state 1 is afterwards. Make this command the second command in the row:



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


And make both only activate in state 0. This assumes that your state scoreboard is called "state" and the holder "$game".






share|improve this answer

























  • Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

    – Fabian Röling
    Jan 15 at 17:23











  • Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

    – Maevur
    Jan 15 at 17:35













Your Answer








StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "41"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgaming.stackexchange.com%2fquestions%2f345056%2ftalking-to-moving-npcs-in-minecraft-1-13%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














You can use the caret notation (^) in execute positioned, which removes the need for the x, y and z target selectors entirely (except in some really niche cases). The command you need is this one:



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



As a bonus, you can get rid of the comparator (and also prevent that players why enter the radius multiple times get the message multiple times) by putting this command after the first:



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


and modifying the first command to:



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


This will prevent the issue the comparator had that players could walk in and out of the area and get the message every time.




If you're using a state scoreboard in your map, you can of course do the same with that. Let's say that state 0 is before having "heard" the "villager" "talk" and state 1 is afterwards. Make this command the second command in the row:



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


And make both only activate in state 0. This assumes that your state scoreboard is called "state" and the holder "$game".






share|improve this answer

























  • Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

    – Fabian Röling
    Jan 15 at 17:23











  • Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

    – Maevur
    Jan 15 at 17:35















0














You can use the caret notation (^) in execute positioned, which removes the need for the x, y and z target selectors entirely (except in some really niche cases). The command you need is this one:



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



As a bonus, you can get rid of the comparator (and also prevent that players why enter the radius multiple times get the message multiple times) by putting this command after the first:



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


and modifying the first command to:



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


This will prevent the issue the comparator had that players could walk in and out of the area and get the message every time.




If you're using a state scoreboard in your map, you can of course do the same with that. Let's say that state 0 is before having "heard" the "villager" "talk" and state 1 is afterwards. Make this command the second command in the row:



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


And make both only activate in state 0. This assumes that your state scoreboard is called "state" and the holder "$game".






share|improve this answer

























  • Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

    – Fabian Röling
    Jan 15 at 17:23











  • Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

    – Maevur
    Jan 15 at 17:35













0












0








0







You can use the caret notation (^) in execute positioned, which removes the need for the x, y and z target selectors entirely (except in some really niche cases). The command you need is this one:



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



As a bonus, you can get rid of the comparator (and also prevent that players why enter the radius multiple times get the message multiple times) by putting this command after the first:



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


and modifying the first command to:



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


This will prevent the issue the comparator had that players could walk in and out of the area and get the message every time.




If you're using a state scoreboard in your map, you can of course do the same with that. Let's say that state 0 is before having "heard" the "villager" "talk" and state 1 is afterwards. Make this command the second command in the row:



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


And make both only activate in state 0. This assumes that your state scoreboard is called "state" and the holder "$game".






share|improve this answer













You can use the caret notation (^) in execute positioned, which removes the need for the x, y and z target selectors entirely (except in some really niche cases). The command you need is this one:



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



As a bonus, you can get rid of the comparator (and also prevent that players why enter the radius multiple times get the message multiple times) by putting this command after the first:



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


and modifying the first command to:



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


This will prevent the issue the comparator had that players could walk in and out of the area and get the message every time.




If you're using a state scoreboard in your map, you can of course do the same with that. Let's say that state 0 is before having "heard" the "villager" "talk" and state 1 is afterwards. Make this command the second command in the row:



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


And make both only activate in state 0. This assumes that your state scoreboard is called "state" and the holder "$game".







share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 15 at 17:22









Fabian RölingFabian Röling

10.9k3 gold badges18 silver badges50 bronze badges




10.9k3 gold badges18 silver badges50 bronze badges















  • Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

    – Fabian Röling
    Jan 15 at 17:23











  • Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

    – Maevur
    Jan 15 at 17:35

















  • Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

    – Fabian Röling
    Jan 15 at 17:23











  • Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

    – Maevur
    Jan 15 at 17:35
















Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

– Fabian Röling
Jan 15 at 17:23





Additional hint: Never use scoreboard players add for the game state, otherwise there might be bugs that increase it multiple times, skipping important states or even parts of the map. Credits warp!

– Fabian Röling
Jan 15 at 17:23













Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

– Maevur
Jan 15 at 17:35





Ah, so SpiceWeasel's code can either be fixed by swapping at with as or by leaving out as completely. Good to know! Also thanks for the instructions for tags and the game state (and the additional hint).

– Maevur
Jan 15 at 17:35

















draft saved

draft discarded
















































Thanks for contributing an answer to Arqade!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgaming.stackexchange.com%2fquestions%2f345056%2ftalking-to-moving-npcs-in-minecraft-1-13%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

ParseJSON using SSJSUsing AMPscript with SSJS ActivitiesHow to resubscribe a user in Marketing cloud using SSJS?Pulling Subscriber Status from Lists using SSJSRetrieving Emails using SSJSProblem in updating DE using SSJSUsing SSJS to send single email in Marketing CloudError adding EmailSendDefinition using SSJS

Кампала Садржај Географија Географија Историја Становништво Привреда Партнерски градови Референце Спољашње везе Мени за навигацију0°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.340°11′ СГШ; 32°20′ ИГД / 0.18° СГШ; 32.34° ИГД / 0.18; 32.34МедијиПодациЗванични веб-сајту

19. јануар Садржај Догађаји Рођења Смрти Празници и дани сећања Види још Референце Мени за навигацијуу