村人シリーズその3。
村人のセリフをランダムに変更する方法を教えてもらったので備忘録に。
ちなみに村人に話しかける方法は以前書いたこちらを参照。
ばんごはんのメニューに迷うお母さんを作ります。
まずはお母さんを召喚。村人ははーはんうるさいので今回はSilentをtrueにします。
summon minecraft:villager ~ ~ ~ {Silent:1b,NoAI:1b,Tags:["mother"],CustomName:'{"text":"母"}'}
いつもの通りscoreboadを作ります。もう面倒なので前のをそのまま使っちゃう。
一応書いておくと
/scoreboard objectives add aisatsu minecraft.custom:minecraft.talked_to_villager
で、村人に話しかけた回数がaisatsuというscoreboadに自動で設定されます。
ここまでは今までと同じ。
メニュー案を設定した防具たてを召喚する
tagをGOHAN、CustomNameをメニューの名前にして、防具たてをいくつか召喚します。
たとえばカレーライスだとこんな感じ。
/summon minecraft:armor_stand ~ ~ ~ {Tags:["GOHAN"],CustomName:'{"text":"カレーライス"}'}
「いっぱい防具たてがあると見栄えが悪いしこわい!」という場合はInvisibleをtrueにすればよし。
/summon minecraft:armor_stand ~ ~ ~ {Invisible:1b,Tags:["GOHAN"],CustomName:'{"text":"ぎょうざ"}'}
コマンドブロックの設定
①リピート、常時実行
/execute as @e[type=minecraft:villager,tag=mother,name='母'] if score @a[distance=..3,limit=1] aisatsu matches 1.. run say 今日のばんごはんは@e[type=armor_stand,limit=1,sort=random,tag=GOHAN]にしようかしら
say の後に「今日のばんごはんは@e[type=armor_stand,limit=1,sort=random,tag=GOHAN]にしようかしら」と言っていることに注目。@eでtagとsort、limitを指定してあげることによって、タグが一致するエンティティの中からランダムでひとつ名前をとってきてくれるようになります。
つまり、さっき作った防具たての中からひとつ選んでくれます。
②チェーン、常時実行、条件付き
scoreboard players reset @a aisatsu
あとはいつもの何回も言うの防止のためにscoreboadをリセットします。
さて話しかけてみましょう。
もういっかい。
首をかしげてメニューを考える可愛いお母さんですね。できればぎょうざがいい。
おまけ
limit=2に変更してみます。①のリピートコマンドの中身を次のように変更します。
/execute as @e[type=minecraft:villager,tag=mother,name='母'] if score @p[distance=..6] aisatsu matches 1.. run say 今日のばんごはんは@e[type=armor_stand,limit=2,sort=random,tag=GOHAN]のどっちがいい?
すると、タグが一致するエンティティの中からランダムで2つ選んでくれるようになります。
こんな感じ。
うどんとからあげ両方で!
コメント