【JEコマンド講習会】第12回、コマンドブロックで魔法でも作ってみようか【マインクラフト】

スポンサーリンク

ようこそ、ぷっこ村へ。ししゃもです。

(・∀・)ノ

さてさて、GW(ガッデムウィーク)も終わって、皆様におかれましては絶望の日々をお過ごしのことと拝察申し上げます。というわけで、今回はコマブロで作る魔法を紹介してみようかなと思います。別にGWの下りとは何の関係もないです。ではスタートゥ!!

花火か雷を呼ぶ魔法を作ろう

今回はこんな感じにしてみます。右手に杖(ニンジン棒)を持ち、左手に特定のアイテムを持つことで発動条件を満たします。MP、クールダウンの概念も導入してみましょう。今までのコマンドの応用だし、難しいこともしていないので、ゆっくりと見ていけば大丈夫なはずです。頑張ろうぜ!

実際に仕掛けを作る

前準備

今回は3つのタワーを使ってみます。

  • 左はタワーと呼ぶのか不明ですが、リピーターでループさせます。
  • 真ん中はメインで動くタワーで、リピートにします。計7個のコマブロを並べます。動力の有無はお好みで。
  • 右のタワーは魔法発動時(右クリック時)に動くタワーです。こちらは任意のタイミングで1回だけ発動しないといけないので、インパルスのタワーにします。計6個並べましょう。

使うコマンド

ここからは今回使うコマンドです。今回も4つの構成に分かれていますので、まずは全体を見て見ましょうか↓

scoreboard objectives add MP dummy
scoreboard objectives add Cool_Timer dummy
scoreboard objectives add Use_Wand minecraft.used:minecraft.carrot_on_a_stick

give @s minecraft:carrot_on_a_stick{ItemName:M_Wand,Tags:[M_Wand],display:{Lore:['{"italic":false,"color":"white","text":"右クリックで魔法発動"}'],Name:'{"italic":false,"color":"red","text":"魔法の杖"}'}}
scoreboard players add @a MP 1
execute as @a[scores={MP=..9,Use_Wand=1..},nbt={SelectedItem:{tag:{ItemName:M_Wand}}},tag=!Cooldown] run title @s actionbar {"text":"MPは10以上必要だ!!","color":"#ff0000"}
execute as @a[scores={MP=10..,Use_Wand=1..},nbt={SelectedItem:{tag:{ItemName:M_Wand}}},tag=!Cooldown] run tag @s add M_Fire
execute if entity @a[tag=M_Fire] run setblock 207 74 -1072 redstone_block
scoreboard players add @a[tag=Cooldown] Cool_Timer 1
tag @a[scores={Cool_Timer=100..}] remove Cooldown
scoreboard players reset @a[tag=!Cooldown] Cool_Timer
scoreboard players reset @a Use_Wand
execute at @a[tag=M_Fire,nbt={Inventory:[{Slot:-106b,id:"minecraft:apple"}]}] run summon lightning_bolt ^ ^ ^5
execute at @a[tag=M_Fire,nbt={Inventory:[{Slot:-106b,id:"minecraft:firework_rocket"}]}] run summon firework_rocket ^ ^1 ^5 {LifeTime:30,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:1,Trail:1,Colors:[I;11743532],FadeColors:[I;15435844]}]}}}}
scoreboard players remove @a[tag=M_Fire] MP 10
execute as @a[tag=M_Fire] run tag @s add Cooldown
execute as @a[tag=M_Fire] run tag @s remove M_Fire
setblock 207 74 -1072 air

左手にリンゴを持った場合は雷、花火の時は花火を召喚するようになってます。このやり方だと拡張性が高いと思います。それでは順にみていきましょう。

コマンドの解説

全体の流れですが、

  • リピーターループ回路で、一定時間ごとにMP自然回復
  • 右手に杖(ニンジン棒)、左手に特定アイテム(リンゴ or 花火)を持って右クリックで魔法判定
  • MPが10以上なら魔法発動、10未満なら警告

みたいな感じです。

1つ目のくくり、前準備

scoreboard objectives add MP dummy
scoreboard objectives add Cool_Timer dummy
scoreboard objectives add Use_Wand minecraft.used:minecraft.carrot_on_a_stick

give @s minecraft:carrot_on_a_stick{ItemName:M_Wand,Tags:[M_Wand],display:{Lore:['{"italic":false,"color":"white","text":"右クリックで魔法発動"}'],Name:'{"italic":false,"color":"red","text":"魔法の杖"}'}}

このくくりは前準備で、チャット欄に打ち込んで実行しておきます。

スコアボードは3つ使います。MP用、クールダウン用、杖を使った時の判定用です。

3行目は dummy でなく、minecraft.used:minecraft.carrot_on_a_stick となってますね。スコアボードは一定条件を満たした場合加算するように作ることができます。この場合、ニンジン棒を使った(右クリックした)場合に自動で加算するようにしています。その他、ブロックを置いた場合とか、壊した場合、死んだ回数とか、歩いた距離とか色々できますので調べてみましょう。

4行目の give ですが NBT 内に display ってのがあって、ここにJSONを記述することでアイテム名とか説明文を追加できます。

display:{Lore:[‘{“italic”:false,”color”:”white”,”text”:”右クリックで魔法発動”}’],Name:'{“italic”:false,”color”:”red”,”text”:”魔法の杖”}’}

このようにすることで

こんな感じになります。Loreが説明文、Nameが名前です。

2つ目のくくり、MP回復用、リピーターでループ

scoreboard players add @a MP 1

解説いらないと思うけど、MPを自然回復させてます。自由にタイミング、量を調整してね❤

3つ目のくくり、メインループ

execute as @a[scores={MP=..9,Use_Wand=1..},nbt={SelectedItem:{tag:{ItemName:M_Wand}}},tag=!Cooldown] run title @s actionbar {"text":"MPは10以上必要だ!!","color":"#ff0000"}
execute as @a[scores={MP=10..,Use_Wand=1..},nbt={SelectedItem:{tag:{ItemName:M_Wand}}},tag=!Cooldown] run tag @s add M_Fire
execute if entity @a[tag=M_Fire] run setblock 207 74 -1072 redstone_block
scoreboard players add @a[tag=Cooldown] Cool_Timer 1
tag @a[scores={Cool_Timer=100..}] remove Cooldown
scoreboard players reset @a[tag=!Cooldown] Cool_Timer
scoreboard players reset @a Use_Wand

ここはちょっと解説いれます。このくくりはメインで毎tickループさせます。

  • 1行目、セレクタがちょっと複雑なので順に見ていきます。スコアボードの値が MP 9以下、かつ Use_Wand 1以上。SelectedItem は右手のことと思ってオッケーです。なので、右手にM_Wand所持。、最後に Cooldown タグがない場合です。要は魔法使いたいけどMPが足りないって場合、警告文を表示します。actionbar は後述の画像位置です。
  • 2行目、こちらは反対にMPが足りててクールダウン中じゃない場合です。M_Fire タグを付けます。
  • 3行目、魔法を使ったプレイヤーがいる場合(M_Fireタグのあるプレイヤーが存在する場合)、赤石を置いて3つ目のタワーにバトンタッチします。
  • 4行目、ここからは後処理です。クールダウン中のプレイヤーの Cool_Timer に1加算してクールダウンを進めます。
  • 5行目、Cool_Timer が 100(5秒経過)に達したら Cooldown タグを外します。
  • 6行目、Cooldown タグがないプレイヤーの Cool_Timer をリセットします。次回クールダウン用です。
  • 7行目、全プレイヤーの Use_Wand をリセットします。

↑actionbar の位置、ホットバーでアイテム名とかが出るところです。

4つ目のくくり、魔法の処理

execute at @a[tag=M_Fire,nbt={Inventory:[{Slot:-106b,id:"minecraft:apple"}]}] run summon lightning_bolt ^ ^ ^5
execute at @a[tag=M_Fire,nbt={Inventory:[{Slot:-106b,id:"minecraft:firework_rocket"}]}] run summon firework_rocket ^ ^1 ^5 {LifeTime:30,FireworksItem:{id:firework_rocket,Count:1,tag:{Fireworks:{Flight:2,Explosions:[{Type:1,Flicker:1,Trail:1,Colors:[I;11743532],FadeColors:[I;15435844]}]}}}}
scoreboard players remove @a[tag=M_Fire] MP 10
execute as @a[tag=M_Fire] run tag @s add Cooldown
execute as @a[tag=M_Fire] run tag @s remove M_Fire
setblock 207 74 -1072 air

このくくりは、何の魔法を使ったか、その後の処理などをまとめてます。常時実行はちょっと無駄が多い気がするので、別グループとしておくことにしてます。セレクタの nbt は重くなる元なので気を付けましょう。

  • 1行目、nbt={Inventory:[{Slot:-106b,id:”minecraft:apple”}]}の部分ですが、 Slot の -106 は左手のことです。M_Fire タグがあり左手にリンゴを持ったプレイヤーを対象に、雷を召喚します。
  • 2行目、1行目と同じく、左手に花火を持ったプレイヤーの前に花火を召喚します。花火は細かく色や大きさを決めることができます。今回は趣旨と違うのでまたいつか。
  • 3行目、MPを10減らします。一律同じにしてます。使用MPを変えたい場合は1,2行目はタグ付けにし、それぞれ分ける必要があります。
  • 4行目、ここでクールダウン用のタグを付けます。
  • 5行目、ニンジン棒使用時につけたM_Fire タグを消します。
  • 6行目、最後に、このタワーの赤石ブロックを消して終了です。

これで魔法が完成です。

まとめ

今回は今までのコマンドのおさらい & 応用として基礎的な魔法を作ってみました。新しいコマンドはなかったし、複雑なこともしてないですね。結局魔法もプログラムで動く科学なんやなって……。こんな風にやってんのねってのが分かってもらえたら、後は好きなように作っていけるはずです。

タワー増やせばクールダウン用のスコアボードいらなくなるし、さらに行数減らせますが、その辺はお好みですね。どうやったらできるか考えてみるのも楽しいでしょう。もっと工夫して、色んな魔法を作りましょう。

こちらに色んな魔法作ったデタパがあるよ

ちなみに、デタパで作ればもっとスッキリ書けるし、セレクタで nbt 使わなくていいから軽いし、半分くらいで作れます。デタパはいいゾ~。同じものをデタパで作るとどうなるのかってのを見比べてみると面白いかもしれないです。次回以降どこかでやってみましょう。

それではこの辺で、お帰りの際はお気を付けて~(・∀・)ノシ

コメント