以前作ったのにワールドを削除したらもうやり方を忘れてしまったので自分のメモがてら。
配布ワールドやイベントなどで、村人に話しかけたら何か反応がある仕組みを作ろうと思います。
使用しているマインクラフトのバージョンは1.15.1です。
通学路を見守ってくれる、小学生の味方、セーフティボランティアさんを作ります。セーフティボランティアさんなので、話しかけると挨拶してくれます。
話かける村人を召喚
まずは、話しかける対象の村人を召喚します。この村人は、
- 目印となるように名前をつけたい
- あちこち動かないようにしたい
ので、以下のコマンドで召喚しました。
/summon minecraft:villager ~ ~ ~ {Invulnerable:1b,CustomNameVisible:1b,NoAI:1b,CustomName:'{"text":"セーフティボランティアさん"}'}
NoAIを設定することで、勝手に動かなくなります。
Invulnerableを設定することで、クリエイティブ以外で倒せなくなります。
CustomNameは名前ですね。適当な名前をつけてあげてください。今回は「セーフティボランティアさん」と名前をつけました。
scoreboadを作成する
まず、事前準備として村人に話しかけたことを検知するためのscoreboadを作成します。チャット画面で以下のコマンドを実行します。
/scoreboard objectives add aisatsu minecraft.custom:minecraft.talked_to_villager
aisatsu の部分は変数名みたいなものなので、なんでもいいです。好きな名前をつけてください。
コマンドブロックを用意する
①リピートブロック、常時実行
/execute if score @p[distance=..10] aisatsu matches 1.. run say hello
先ほど作成したaisatsuは、村人が話しかけられる(=右クリックされる)と数が増えます。なので、aisatsuが1以上(1..)の場合に「say hello」が実行されるように設定しました。
②チェーンブロック、常時実行
/scoreboard players reset @a aisatsu
このままではいつまでも「hello」 「hello」 と言い続けてしまいかなりうるさいのでaisatsuをリセットします。
プレイヤー名を呼んでくれるようにする
今のままでは「hello」というだけなのでちゃんと名前を呼んで挨拶してくれるようにします。
MINECRAFT TOOLSの/tellraw editorを使います。
まず、Text:エリアに以下のように入力します。
次に、@pの部分だけドラッグで選択してから
を押します。
その後、「PREVIEW THE COMMAND OUTPUT」のボタンを押すとプレビューが表示されますが、この時点ではまだ@pのままでOK。
「GENERATE THE COMMAND」ボタンを押します。
すると、コマンドが生成されるので、右端にあるコピーボタンを押してコピーします。
あとは、リピートブロックで先ほど「say hello」にした部分をコピーしたものに置き換えるだけ。
/execute if score @p[distance=..3] aisatsu matches 1.. run tellraw @p ["",{"selector":"@p"},{"text":"\u3055\u3093\u304a\u306f\u3088\u3046\u3002\u3044\u3063\u3066\u3089\u3063\u3057\u3083\u30fc\u3044\uff01"}]
こんな感じです。
セーフティボランティアさんありがとう!行ってきまーす。
これにtellrawコマンドのclickEventを組み合わせたりすると色々できることが広がるかなと思います!
コメント