Это очень обширная тема, тебе придётся прям ЗАШАРИТЬ за команды
Чтобы создать диалоговое окно (1.21.6+), воспользуйся этим сайтом. И закинув созданный диалог в папку saves\название мира\datapacks\название датапака\data\ещё одно название\dialog ты сможешь показывать его игрокам командой /dialog show. НО вообще, чтобы показать игроку диалог не обязательно прям датапак создавать, ты можешь воспользоваться ленивым методом и скопировать всю инфу о диалоге прямо в команду /dialog show. Не знаю насколько это профессионально, но я иногда этим пользуюсь ;)
/dialog show @s {type:"minecraft:server_links",body:{type:"minecraft:plain_message",contents:"квазибоба"},inputs:[],columns:1,title:"диалоговое окошко"}
После того как ты прохаваешь создание диалогов (моей инфы тебе вряд ли хватит) можно будет приступать к созданию NPС, использовать ты можешь разные способы, но более правильным наверное будет использование хайповой integration сущности, она представляет из себя пустой хитбокс с возможностью детектить по нему нажатия. Сущность невидимая, но в маине можно смотреть хитбоксы с помощью F3+B
/summon minecraft:interaction ~ ~ ~ {width:0.8f,height:2f,Tags:["nps_dimon"]}
execute as @e[type=minecraft:interaction,tag=nps_dimon] run data remove entity @s interaction
execute as @e[type=minecraft:interaction,tag=nps_dimon] on target run dialog show @s название
Теперь, когда у тебя на руках есть "кнопка" и показывающийся на её нажатие диалог, мы можем сделать красивую внешку, для этого можно использовать вообще всё что угодно, главное засунуть туда кнопку. Можно использовать block display или текстурпаки, но так как тебе нужно сделать передвигающуюся модельку я покажу способ с сущностью mannequin (1.21.9+).
/summon minecraft:mannequin ~ ~ ~ {Tags:["nps_dimon","conveer"]}
Теперь c помощью постоянной телепортации мы будем перемещать кнопку внутрь манекена, но если твой npc не будет двигаться то можно ограничиться одной телепортацией.
execute as @e[type=minecraft:mannequin,tag=nps_dimon] at @s run tp @n[type=minecraft:interaction,tag=nps_dimon] ~ ~ ~
Теперь подумаем над перемещением сущности. Хотя думать я не буду, а просто свой способ приложу. Заключается он в том, что если в двух блоках под сущностью c тегом "conveyor" оказывается блок розовой обожжённой терракоты (та что со стрелочкой) то он начинает двигаться и поворачиваться по направлению стрелочки.
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=west] run data modify entity @s Motion[0] set value 0.1
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=north] run data modify entity @s Motion[2] set value 0.1
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=east] run data modify entity @s Motion[0] set value -0.1
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=south] run data modify entity @s Motion[2] set value -0.1
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=west] run rotate @s facing ~1 ~ ~
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=north] run rotate @s facing ~ ~ ~1
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=east] run rotate @s facing ~-1 ~ ~
execute as @e[tag=conveyor] at @s if block ~ ~-2 ~ magenta_glazed_terracotta[facing=south] run rotate @s facing ~ ~ ~-1
Вообще наверное гайд надо сделать, тема слишком большая чтобы в ответе на вопрос её рассматривать