ようこそ、ぷっこ村へ。ししゃもでっす。
(・∀・)ノ
順調に回を重ねているコマンド講習会も、なんと今回で10回目です。そろそろ免許皆伝を授けて、ししゃも教の布教活動に尽力してもらおう。これで寝てても上納金がガッポガッポ……グヘへ……。
基本的なコマンド自体ができっちゃてる気がするので、応用もやっていきたいと思います。今回は、tellraw を使ったナゾナゾが出題され、正解するとアイテムがもらえ、間違うと溶岩の海にボッシュートされるって仕掛けを作ってみましょう。
スーパーひ○し君的なボッシュート!!
↑のような感じで、特定の位置に立ち答えを選択すると状況に応じて反応が変わる仕掛けを作ってみましょう。今回の新コマンドは fill 。後は応用です。へー、こんな使い方もできるんだー、みたいな方法を紹介していきます。
fill をざっくり
広範囲を埋めるためのコマンドです。いちいち setblock するのが無理な場合に使いましょう。
基本の使い方
/fill <開始地点> <終了地点> <設置するブロック> <操作> <変えたいブロック>
例
/fill ~ ~ ~ ~10 ~10 ~10 dirt とすると範囲内を土ブロックで敷き詰めることができます。
/fill ~ ~ ~ ~10 ~10 ~10 dirt replace air とすると、範囲内の空気のみ土に置換できます。
立方体の縁だけ埋めるとかもできますが、ぶっちゃけ、このコマンドは個人的にはあんまり使いません。ストラクチャーブロックで置き換えできるし、置換とかWEでできるしね。たまーに使うくらいです。
実際に仕掛けを作る
前準備
まずは仕掛けのメインとなる会場を作ります。まぁ好みでお好きに作ってもらって、肝心なのは中央にあるネコが座ってる金ブロックの部分です。
横から見た図。間違った答えを選択した場合にプレイヤーを押し出すための仕掛けです。適当に隠しておきましょう。
ナゾナゾに間違えるとこうなる。
こんなふうに隠しておけばヨシ。黒曜石とかの、スライムブロックに引っ付かないブロックで覆わないとめんどくさいことになるので注意。
最後にボッシュート用の落とし穴を掘っておきましょう。これで構造物は完成です。
コマブロの準備
さてさて、次はコマブロの準備をしていきます。今回は、仕掛け起動用に感圧板下に埋め込む2つのコマブロと、小さめのタワー2つでできます。
感圧板下のコマブロ。少し位置の調整がいるので、赤石粉でずらしてます。
2つのタワー、白い羊毛が置かれている位置に赤石ブロックが出現します。左が正解用で、右が不正解用です。不正解用は落とし穴の起動後に再度塞ぐために、リピーターで遅延をかけ、遅れて穴を塞ぐコマンドを実行します。
使うコマンド
ここからは今回使うコマンドです。今回も4つの構成に分かれていますので、まずは全体を見て見ましょう↓
summon cat 247.5 76 -1077.5 {NoAI:1,Invulnerable:1,NoGravity:1,Rotation:[0,0],Sitting:1}
gamerule sendCommandFeedback false
execute positioned 247 74 -1077 as @p[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tag @s add Talking_Cat
execute positioned 247 74 -1077 as @p[x=247,y=74,z=-1077,dx=0,dy=1,dz=0,tag=Talking_Cat] run tellraw @s [{"text":"\n謎に答えよ!!パンはパンでも食べられるパンは?\n------------------------------------------\n\n"},{"text":" フライパン","color":"aqua","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block"}},{"text":" いや、パンだろ","color":"red","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 255 74 -1077 redstone_block"}},{"text":" みたらし団子","color":"green","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block"}},{"text":"\n\n------------------------------------------\n\n"}]
execute as @a if entity @s[tag=Talking_Cat] unless entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nあそこでで答えないとダメらしい\n"}]
execute as @a if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nせいかーい!!じゃあこれをあげるよ!!\n"}]
execute as @a at @s if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run summon item ~ ~ ~ {Item:{id:"minecraft:netherite_scrap",Count:1b,tag:{display:{Name:'{"text":"猫まっしぐらジャーキー","color":"white","italic":false}',Lore:['{"text":"どんな猫もイチコロ","color":"white","italic":false}']}}}}
tag @a remove Talking_Cat
setblock 255 74 -1077 air
execute as @a if entity @s[tag=Talking_Cat] unless entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nあそこでで答えないとダメらしい\n"}]
execute as @a if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tag @s add False_Answer
tag @a remove Talking_Cat
execute as @a if entity @s[tag=False_Answer] run tellraw @s [{"text":"\nブブー!!バーカバーカ!!来世はミジンコになれ!!\n"}]
execute if entity @a[tag=False_Answer] run setblock 247 75 -1081 redstone_block
execute if entity @a[tag=False_Answer] run fill 246 73 -1076 248 73 -1075 air
execute if entity @a[tag=False_Answer] run fill 246 73 -1076 248 73 -1075 polished_diorite
tag @a[tag=False_Answer] remove False_Answer
setblock 257 74 -1077 air
setblock 247 75 -1081 air
分けてはあるけど、そんなに難しくはないです。ただし、会話系は複数人でワチャワチャするとすぐバグるので、できれば仕掛けは一人で作動させれるように工夫するのがいいです。
コマンドの解説
全体の流れですが、
- 開始位置の感圧板を踏むとタグを付け会話開始
- 開始位置から離れた状態で答えを選択すると、警告
- 開始位置で正解を選ぶとアイテム入手
- 開始位置で不正解を選ぶと落とし穴に落とされる
会話は分岐が多くなるので、1方向に流れを説明するのが難しいですが、まぁだいたいこんな感じ。1つずつくくりを見ていきましょう。
1つ目のくくり、前準備
summon cat 247.5 76 -1077.5 {NoAI:1,Invulnerable:1,NoGravity:1,Rotation:[0,0],Sitting:1}
gamerule sendCommandFeedback false
このくくりは直接仕掛けと関係はないんですが一応。
- 1行目は猫の召喚ですね。ポイントはNBTの部分。 NoAI は動かなくするNBT。Invulnerable は無敵、NoGravity は重力の影響を無視するNBTです。
- 2行目はコマンドの実行結果を表示させないコマンドです。
特に難しいこともないので次行きます。
2つ目のくくり、ナゾナゾの出題。
execute positioned 247 74 -1077 as @p[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tag @s add Talking_Cat
execute positioned 247 74 -1077 as @p[x=247,y=74,z=-1077,dx=0,dy=1,dz=0,tag=Talking_Cat] run tellraw @s [{"text":"\n謎に答えよ!!パンはパンでも食べられるパンは?\n------------------------------------------\n\n"},{"text":" フライパン","color":"aqua","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block"}},{"text":" いや、パンだろ","color":"red","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 255 74 -1077 redstone_block"}},{"text":" みたらし団子","color":"green","clickEvent":{"action":"run_command","value":"/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block"}},{"text":"\n\n------------------------------------------\n\n"}]
感圧板の下に仕込んだコマブロに打ち込むコマンドです。
- 1行目、感圧板を踏んだプレイヤーに会話中のタグを付けるためのコマンドです。execute positioned で実行位置を指定し、最寄りのプレイヤーを実行者にしてます。セレクタで[x=247,y=74,z=-1077,dx=0,dy=1,dz=0]としてますが、x,y,z はそのものずばり座標です。dx,dy,dz ですが、座標からの範囲です。まぁ、こう書いておくと人一人分の範囲になる感じなので、セットで覚えときましょう。
- 2行目、ナゾナゾの出題コマンドです。くっそ長いですがしょうがないんで我慢してください。clickEvent ではコマンドの実行もでき、今回はその機能を使ってます。各答えをクリックすると対応する位置に赤石ブロックが置かれ、タワーが実行されます。このようにすることで、複数のコマンドを実行することができます。
もうちょい詳しく補足
tellraw はJSONを扱うことができるわけなんですが、どういうことやねんってのをちょっと補足。例えば
{“text”:” フライパン”,”color”:”aqua”,”clickEvent”:{“action”:”run_command”,”value”:”/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block”}}
こういう文章があってゴチャゴチャでよくわからんのですが、結局JSONなんですね。
{
"text": " フライパン",
"color": "aqua",
"clickEvent": {
"action": "run_command",
"value": "/execute if entity @s[tag=Talking_Cat] run setblock 257 74 -1077 redstone_block"
}
}
こういう文章の改行やインデント(空白)を詰めた文章を使ってるわけです。多少はイメージが付きやすくなった?
3つ目のくくり、正解を選んだ場合
execute as @a if entity @s[tag=Talking_Cat] unless entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nあそこでで答えないとダメらしい\n"}]
execute as @a if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nせいかーい!!じゃあこれをあげるよ!!\n"}]
execute as @a at @s if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run summon item ~ ~ ~ {Item:{id:"minecraft:netherite_scrap",Count:1b,tag:{display:{Name:'{"text":"猫まっしぐらジャーキー","color":"white","italic":false}',Lore:['{"text":"どんな猫もイチコロ","color":"white","italic":false}']}}}}
tag @a remove Talking_Cat
setblock 255 74 -1077 air
このくくりのポイントですが、いかに離れた座標でコマンドを実行させないか、です。tellraw だとどこにいてもチャット欄からクリックイベントを実行できちゃいます。当たり前だけどバグるよね。なのでタグや座標を組み合わせて、できるだけ条件を絞る工夫をしましょう。
- 1行目、if entity @s[tag=Talking_Cat] unless entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] の部分で、会話中のタグがあり、感圧板の位置にいない場合を判定してます。要は答えずに離れた場合です。この場合、警告がでます。
- 2行目、今度は感圧板の位置で答えた場合です。褒めてくれてますね。
- 3行目、同じく感圧板の位置で答えた場合、景品が出ます。give でもおk。give や summon はNBTでアイテム名や説明文を設定できます。
- 4行目、会話中のタグを消します。
- 5行目、次回実行のために、このタワーの赤石ブロックを取り除いておきます。
よりバグりにくくするために、一度別のタグを噛ませた方がいいかもしれません。その辺は適宜見極めましょう。
4つ目のくくり、不正解を選んだ場合
execute as @a if entity @s[tag=Talking_Cat] unless entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tellraw @s [{"text":"\nあそこでで答えないとダメらしい\n"}]
execute as @a if entity @s[tag=Talking_Cat] if entity @s[x=247,y=74,z=-1077,dx=0,dy=1,dz=0] run tag @s add False_Answer
tag @a remove Talking_Cat
execute as @a if entity @s[tag=False_Answer] run tellraw @s [{"text":"\nブブー!!バーカバーカ!!来世はミジンコになれ!!\n"}]
execute if entity @a[tag=False_Answer] run setblock 247 75 -1081 redstone_block
execute if entity @a[tag=False_Answer] run fill 246 73 -1076 248 73 -1075 air
execute if entity @a[tag=False_Answer] run fill 246 73 -1076 248 73 -1075 polished_diorite
tag @a[tag=False_Answer] remove False_Answer
setblock 257 74 -1077 air
setblock 247 75 -1081 air
このくくりもポイントは同じで、いかに離れた座標でコマンドを実行させないか、です。タグや座標を組み合わせて、できるだけ条件を絞る工夫をしましょう。物理的に通路を狭くしたりする工夫も有効ですね。
- 1行目、離れて答えた場合です。
- 2行目、初期位置で不正解を選んだ場合です。不正解用のタグをまず付けます。
- 3行目、会話中のタグを外します。全員外れるので、もう少し工夫したほうがいいですね。
- 4行目、不正解タグがあるプレイヤーにバカにする文章を表示します。
- 5行目、不正解タグがあるプレイヤーがいた場合、落とし穴用の赤石ブロックを置きます。粘着ピストンが伸びるやつですね。
- 6行目、不正解タグがあるプレイヤーがいた場合、落とし穴が開きます。
以降は遅延で発動するコマンドです。
- 1行目、落とし穴を塞いでます
- 2行目、不正解タグを消します
- 3、4行目、このタワーとピストン用の赤石ブロックを消して次回以降用にリセットしてます
遅延は短すぎるとおかしくなる時があるので、最大にしとくと安心でした。ぶっちゃけ、わざわざ fill で穴掘らなくても tp すればよかったんですけどソコは気分でした。
まとめ
というわけで、今回はほぼほぼ応用と言った内容でした。会話系は選択肢が多くなりがちで、末広がりで結果が増えていくので、できるだけ増やさない工夫を考える方に労力を使いましょう。また、tellraw は色んなことができるのでJSONも簡単にでいいので読み書きできるような練習をしていきましょう。
コマンドも出尽くしてる感じなので、今後は目からウロコ的な使い方も紹介出来たら面白いよね。
それではこの辺で、お帰りの際はお気を付けて~(・∀・)ノシ
コメント