どうもどうも! EIEIです!
前回、前編としてMCStackerというツールを使っての、オリジナルのmobをスポーンさせる方法を紹介しました!
この記事は、前回の記事の続きとなっているので、
まだ見ていない方は前回の記事も併せて読んでくださいね♪
ということで、今回は前回作ったボスに、コマンドを使ってオリジナルスキルを実装したいと思います!
コマンドが詳しくない方でも、記事の通り真似したら再現できるように、
わかりやすく丁寧に解説しますのでご安心を♪
配布マップなどで見るような、特別な攻撃をボスにさせることができちゃいます!
本日もLet’sマイクラ!
※この記事で使用しているコマンドは、Java版1.19.2のものです。
今回作るボスの設計図!
今回作っていくボスは、次のようなスキル? 能力? にしたいと思います!
- 周りのザコ敵を倒さないと、本体にダメージが入らないタイプのボス
- オリジナル実装の遠距離攻撃
- 体力が無くなったとき第二形態に!
- 第二形態になったらスキルや行動パターンが変化
割とよくある? 感じの仕様ではありますが、
これを頑張ってコマンドで実装したいと思います!
これくらいなら、コマンドとレッドストーン回路を駆使すれば作れちゃいます!
早速、ボスを作ってみましょう!
今回は、ゾンビをボスmobとして採用します!
ということで、MCStackerで次のようなゾンビを作ってみました。
前回の記事で、MCStackerの使い方を詳しく解説しているので、
僕の例だけでなく、皆さんのオリジナルボスを実装してみてください♪
- 最大体力、初期体力が20ではなく50に
- 攻撃力が3ではなく5に
- デスポーンせず、索敵範囲は40から80に(念の為です)
- 名前を常に表示させ、名前もつける!
- タグとして、「boss」と「first」をつけておく!(コマンド作成時に使います)
- エンチャントなどをつけた防具、武器を持たせる!
- 若干ノックバックを軽減し、若干移動速度を早く!
- 仲間を呼ぶ確率は5%から0%にして、大人ゾンビに限定(難易度の変動を防ぐため)
大雑把にですが、上の設定をしておきました。
スキルはコマンドで、多少強引に実装する部分もあるので、できる限りイレギュラーが発生しないように、
具体的には、子供ゾンビが出ないようにしたり… ということも重要だと思います。
ただ、もちろんこれは例なので、
参考にしつつ、皆さんのオリジナルボスを使ってみてくださいね!
そして、今回はタグを使いたいと思います。
そのほうが、ボスじゃない他のゾンビの干渉を受けることなく、コマンドを実行できますからね♪
今回は、ボス戦で使いますよ、という意味の「boss」と、
第一形態ということで「first」というタグをつけます。
コマンドがかなり長いので、具体的なコマンドを知りたい方は、
下のボタンをポチッとしていただくと、展開されてコマンドが表示されますので、興味のある方はぜひ!
戦場にギミックを持たせるためのコマンド作り!
せっかくなのでボスと戦うための戦場を作ってみました!
最悪なくてもボスは動作しますが、せっかくなのでね。
海底神殿をイメージして作ってみました!
そして、今回はボスが使う氷渡りのエンチャントで、床の水源が凍る、というギミック(?)を採用する都合上、
氷渡りで生成される薄氷が壊れるギリギリの明るさ、レベル13の光ブロックを敷き詰めて、天井をつけました!
コマンドを使わなくても、こんな感じでパッシブを作れたりするね!
薄氷は、氷渡りの効果で初めは年齢が0の状態で生成されます。
11ー年齢の明るさレベルを受けていると、年齢が進行してヒビが入っていき、
年齢が4になると同時に、水源へと戻りますよ~
戦場に入った時のギミック作り!
それでは、そこの入り口を作っていきます。
入り口が最初開いているけど、入ると塞がれてしまう、という簡単な内容を実装します!
コマンドを使えば、レッドストーン回路などよりも幅の広い入り口を作れますね!
どうやってプレイヤーが戦場に入ったかを確かめるかなのですが、
プレイヤーのX、Y、Zそれぞれの座標を、スコアボードに常に反映することによって、
スコアボードを見たときに、プレイヤーが戦場に入ったかどうか判断できるようにします!
スコアボードは非常に自由度が高いので、コマンドでギミックを作る時のお供ですね♪
まず、スコアボードを計5個作成します。いずれのコマンドも、チャット欄などでそれぞれ1回実行してください!
①プレイヤーのx座標を格納するためのスコアボードを作成
/scoreboard objectives add xposition dummy
②プレイヤーのz座標を格納するためのスコアボードを作成
/scoreboard objectives add zposition dummy
また、ここからコマンドの中に座標が出現しますが、ここは必要に応じて変更してくださいね。
ここで書いている座標は、あくまで僕の環境での座標なので、
真似して作られる場合はF3キーを押して座標を確認してくださいね!
③戦場への入り口のx座標をスコアボードで保持しておく
/scoreboard objectives add xstartposition dummy
/scoreboard players set @p xstartposition -273
④戦場への入り口のz座標の片側をスコアボードで保持しておく
/scoreboard objectives add zstartposition1 dummy
/scoreboard players set @p zstartposition1 353
⑤入り口のもう片側のz座標をスコアボードで保持しておく
/scoreboard objectives add zstartposition2 dummy
/scoreboard players set @p zstartposition2 350
なぜこんなにスコアボードを作るのか、ということですが、下の画像を見ていただければ分かりやすいと思うのですが、
この例の場合では、x座標が-273に等しい、かつz座標が350〜353の間なら、戦場に入ったとみなしています!
それの判断のために、わざわざスコアボードを増やしたんだね!
なので、もし皆さんが真似して作られる場合は、x座標について2つ、z座標について3つとは限らず、
入り口の方角によっては、x座標についてが3つ、z座標について2つになる可能性もありますね〜
入り口を天井に作ったりするなら、y座標について同じように作成していただければOKですね!
そして、プレイヤーの座標を常に更新し続けるため、次のコマンドを実行し続けます。
コマンドブロックで、リピート、無条件、常時実行にしてスコアボードに座標を常に反映させましょう♪
常に反映させておきたいので、リピートモードの出番です!
/execute store result score @p xposition run data get entity @p Pos[0]
/execute store result score @p zposition run data get entity @p Pos[2]
上のコマンドは、最も近くのプレイヤー(@p)の座標(Pos)を、最も近くのプレイヤーに紐付けられたスコアボードに代入するコマンドです。
今回の例では用いていませんが、y座標をypositionというスコアボードに代入したい場合は次のコマンドを常時実行すれば良いですね♪
/execute store result score @p yposition run data get entity @p Pos[1]
あとは、肝心のプレイヤーが戦場に入ったことを検知して、入り口を閉めるコマンドです!
入り口を閉めるのは、fillコマンドでブロックで塞いで実現していますよ。
こちらも、リピート、無条件、常時実行のコマンドブロックで常に監視させておきます。
/execute if score @p xposition = @p xstartposition if score @p zposition <= @p zstartposition1 if score @p zposition >= @p zstartposition2 run fill -272 -53 352 -272 -51 350 minecraft:prismarine_bricks
結構長いコマンドだけど、もし(if)座標が〇〇なら… という書き方ですね!
さらに、このリピートコマンドブロックに、3つのチェーンコマンドブロックを繋げて、
条件付き、常時実行にして、回路に使うレッドストーンブロックを設置したり、画面に文字を表示させましょう!
「入口が閉じた時」と同時に動作するコマンドを、ここのチェーンコマンドブロックに記述します!
①回路に使うためのレッドストーンブロックを設置(回路は後ほど紹介します)
/setblock -264 -54 356 minecraft:redstone_block
②画面にタイトル(大きな文字)を表示
/title @p title "神殿の最深部"
③画面にサブタイトル(タイトルの下に表示される中くらいの文字)を表示
/title @p subtitle " "
もちろん、タイトルやサブタイトルのダブルクオーテーションの間は、皆さんの好きな文字にしてくださいね!
他にも、BGMをスタートしたい、プレイヤーに装備を与えたい、なども入り口が閉まるタイミングで行いたい場合、
ここでさらにチェーンコマンドブロックを増やして実装します。
説明が長くなってしまいましたが、下の画像のようにコマンドブロックを繋いでくださいね!
ここまで作れば、戦場に入った時に、入り口が閉められて画面に文字が表示されるようになっています!
もし動かなかったら、座標やコマンド、そしてコマンドブロックの設定や向きを見直してみてね。
ボスの体力をボスバーに反映させる!
せっかくボスを作るなら、エンダードラゴンやウィザーみたいに、体力バーを表示させたいですよね!
コマンドを使えば、体力バー… ボスバーと言うのですが、これも自由自在に操れます。
オリジナルボスにも、ボスバーを作ってみましょう!
実はボスバーを作るコマンドは、そこまで難しくありません!
まずは準備として、次の4つのコマンドをチャット欄で良いので実行してください。
①ボスバーを作成して、表示される名前を設定するコマンド
/bossbar add boss1 "神殿の長"
②ボスバーの最大値(通常はボスの体力と同じ値)を設定するコマンド
/bossbar set boss1 max 50
③ボスバーの色を設定するコマンド(なくてもOK)
/bossbar set boss1 color blue
④ボスバーの区切りを設定するコマンド(なくてもOK)、この場合10等分のラインが入る
/bossbar set boss1 style notched_10
今回はこれだけサクッと紹介しましたが、
ネットでしっかり調べると、もっと詳しい設定などもできるかと思います!
そして、ボスの体力を常にボスバーに反映させるコマンドを、リピート、無条件、常時実行で作成!
ここで、どのmobの体力を反映すればいいか、ボスにつけたタグを用いて管理していますよ♪
このような時に使うために、わざわざボスにタグを付けました!
/execute as @e[tag=boss] store result score @s health run data get entity @s Health 1
まだボスを召喚していないのでもちろん動いていませんが、
先程紹介した、ボスをスポーンさせるとボスの体力が反映されるようになりますよ♪
ボスのスキルを作る! …準備編!
また、今回はボスに簡単なスキルを実装してみたいと思います! もちろんコマンドを使ってのオリジナルスキルです♪
せっかくボスを作るなら、普通のmobとは違う技を使わせたいよね~!
そこで、そのスキルを実装するのにいくらか準備が必要なので、
次のコマンドをチャット欄で良いので、1回実行しておいてください。
スコアボードやボスバーなど、予め準備しておくと楽なものをここで一気に準備しておきますよ~
①ボスの体力を常に反映するためのスコアボードを作成
/scoreboard objectives add health health
②ボスの直前の体力を保持しておくためのスコアボードを作成
/scoreboard objectives add subhealth dummy
③プレイヤーがガーディアンを倒したときに値が増えるスコアボードを作成
/scoreboard objectives add guardiankill minecraft.killed:minecraft.guardian
④ボスのスキルのクールタイムを管理するためのスコアボードを作成
/scoreboard objectives add cooltime1 dummy
⑤ボスのスキルのクールタイムを表示するためのボスバーを作成(先ほどのように、色や名前は自由にカスタマイズできます!)
/bossbar add cooltime1 " "
⑥クールタイムのボスバーの最大値を200に設定(この値を20で割った値が、クールタイムを秒数で表します)
/bossbar set minecraft:cooltime1 max 200
長々と6つも紹介しましたが、後ほどスキルを作る時にどれも利用しますよ!
さらに、スコアボードの値の変更だったり、ボスバーへのスコアボードの値の反映だったり、
リピートコマンドブロックを用いて、先に作ってしまいましょう!
リピートコマンドブロック2つを設置して、
そのうち片方だけ、条件付き、常時実行のチェーンをつなげます!
まず、リピート1つだけの方は、無条件、常時実行で次のコマンドを実行します。
/execute as @e[tag=first] store result bossbar minecraft:cooltime1 value run scoreboard players get @s cooltime1
ボスの体力をボスバーに反映させるコマンドと、後半の方は結構似ていると思います。
そして、チェーンの前についているリピートも、無条件、常時実行にして、次のコマンドを実行。
/kill @e[type=minecraft:armor_stand,tag=count]
チェーンの方は、条件付き、常時実行で、次のコマンドを実行します!
このコマンドが、要約すると1秒間に20だけ、クールタイムのスコアボードの値を減らします。
/scoreboard players remove @e[tag=first] cooltime1 1
チェーンの前のリピートコマンドブロックで、常に防具立てをkillし続けます。
防具立てが倒されたとき、スコアボードcooltime1の値を1減らすようにしています。
この後、防具立てを常に召喚し続けるコマンドを実装します!
この召喚の最大スピードが、1秒間に20回なので、スコアボードの値が1秒間に20減ります。
ボスを出現させるための回路&コマンド!
戦場に入っていきなりボスが目の前にポツンと現れても味気ないので、
レッドストーン回路の力も使って、ちょっと工夫していきたいと思います!
レッドストーンリピーターを使って、コマンドの実行タイミングをずらそう!
以下の画像のような回路を組んでみました。リピーターの数だったりはお好みでどうぞ!
戦場に入った時、入り口を閉じると同時に、レッドストーンブロックを設置するというコマンドを先ほど作りましたが、
設置されたレッドストーンブロックから、信号を供給しますよ〜
1つ目のコマンドは、扉が閉められたぞ、とチャット欄でプレイヤーに伝えるものです。
インパルス、無条件、動力が必要のコマンドブロックを使います。
チャット欄でプレイヤーに情報を伝えられるので、ボス作りにピッタリなtellrawコマンドです♪
/tellraw @p "なぜか入口が塞がれた。"
2つ目も、同じようにメッセージをチャット欄で送らせます。
リピーターをかませることで、小分けでメッセージを表示できますね。
/tellraw @p " 其方も… 海の秘宝を狙う無謀な冒険者か。"
3つ目… この調子で作れば何個でも作れちゃいますね。
/tellraw @p " 我に屈し諦めるがよい!!"
もちろん、ここのメッセージだったり、実行するコマンドも自由ですね♪
そして4つ目、実際にボスをスポーンさせるタイミングで、実行するコマンドがこちらになります。
最初はインパルス、無条件、動力が必要ですが、以降はチェーン、条件付き、常時実行で繋げます。
①ボスを実際にスポーンさせるコマンド(長いので見たい方はクリックしてね!)
②画面にタイトルを表示
/title @p title " "
③画面にサブタイトルを表示
/title @p subtitle "vs神殿の長"
④ボスの体力を表示する、ボスバーを表示
/bossbar set boss1 visible true
⑤プレイヤーのガーディアンを倒した回数をリセット
scoreboard players set @e guardiankill 0
⑥ボスバーの色をリセット
bossbar set boss1 color blue
⑦クールタイムのスコアボードを200に設定(この値を20で割ると、クールタイムを秒数で表します!)
scoreboard players set @e cooltime1 200
⑧プレイヤーにクールタイムのボスバーを表示
bossbar set minecraft:cooltime1 visible true
2つ目以降は、チェーンコマンドブロックで一気に実行しますよ!
ここまで正しく作ることができたら、次の流れを実行できるようになります!
- 戦場に入ると入り口が閉じられる
- メッセージがチャット欄に流れた後、ボスが出現する
- ボスの体力がボスバーに反映される
これで、ひとまずボスとの戦闘に入ることができるようになりました!
ボスのスキル1! 被ダメージ時一定確率で子分を召喚!
今回は、例として2つの簡単なスキルを紹介したいと思います! 1つ目がこちら。
- ボスがダメージを受けたとき、低確率で無敵化&ガーディアンを4体召喚
- ガーディアンが全員倒されたら、ボスの無敵化が解除
今回は、実装のハードルが高すぎず低すぎずなスキルを例として考えてきましたよ~
おそらく、このスキルを作る上で、コマンドで大事になるのが次の3ポイント。
- ボスがダメージを受けたことを検知する
- 低確率で発生する、を実現する
- ガーディアンを倒した数をカウントする
確かに、この辺はレッドストーン回路ではちょっと難しいかもね~
まず、ボスがダメージを受けたことを検知するために、リピート、無条件、常時実行のコマンドブロックを2つ用意。
そのうち片方だけに、チェーン、無条件、常時実行のコマンドブロックを接続します!
リピートコマンドブロック単体の方には、常にスコアボードにボスの体力を代入するコマンドを書きます。
/execute as @e[tag=boss] store result score @s health run data get entity @s Health 1
先ほどスキル作りの準備をした時に、スコアボードなどを作ってあります!
もう片方のリピートコマンドブロックには、次のコマンドを書きます。
座標は、戦場の外に後ほど設置する、軽量感圧版の1ブロックだけ上の位置にします!
/execute as @e[tag=boss] if score @s subhealth > @s health run summon minecraft:egg -252.5 -51 361.5
そして、そのリピートコマンドブロックにつながるチェーンコマンドブロックには、
次のコマンドを書きます! 実はこれだけで、ボスの体力が減ったことを検知できます。
/execute as @e[tag=boss] store result score @s subhealth run scoreboard players get @s health
おお、意外と簡単に被ダメージを検知できるんだね!
そして、ちらっと出てきた座標ですが、下の画像のように、軽量感圧版の上に設定してください。
感圧版の上に卵を落とすことで、ニワトリがたまに産まれます。これが「低確率」の実現に役立ちます!
ニワトリが1匹以上産まれる確率は、8分の1です。
なので、ボスがダメージを受けたとき、8分の1の確率でスキルを発動します!
ちなみに、軽量感圧版は上に乗っているエンティティの数だけの強さの信号を送るので、
レッドストーンダストで調節して、信号レベルが4以上の時のみ、コマンドブロックに信号が伝わるようにすることで、
ニワトリが4匹生まれる確率である、256分の1も利用出来ちゃいます…(笑)
そして、軽量感圧版が押されたときに実行されるコマンドが、計9個!
ここに書いたコマンドが、ボスがスキルを実際に発動した時に実行されるものになります!
初めのものはインパルス、無条件、動力が必要で、
2つ目のコマンドブロックは、チェーン、条件付き、常時実行、
3つ目以降はすべて、チェーン、無条件、常時実行にしてくださいね。
①ボスに耐性Ⅴ(ダメージ100%カットなので、無敵)を10万秒付与
/effect give @e[tag=first] minecraft:resistance 100000 5 true
②万が一、すでにガーディアンがいた場合は倒す
/kill @e[type=minecraft:guardian]
③~⑥ガーディアンを合計4体召喚(長いので見たい方はクリックしてね!)
⑦感圧版を押したニワトリを倒す
/kill @e[type=chicken]
⑧ボスの体力ゲージの色を変更
/bossbar set boss1 color purple
⑨プレイヤーがガーディアンを倒した数を0とする
/scoreboard players set @e guardiankill 0
だいぶ長いけど、これでボスがダメージを受けたときにたまに、スキルを使ってくれます!
ただ、このままだとボスが無敵化して、それが10万秒続いてしまう恐ろしい設定になっているので、
ガーディアンが4体倒された時のコマンドも組みましょう!
無条件、常時実行のリピートコマンドブロックに、
チェーン、条件付き、常時実行を2つ接続!
リピートコマンドブロックには、次のコマンドを書きます。
/execute as @a[scores={guardiankill=4..}] run effect clear @e[tag=boss]
そして、そこにつながっているチェーンコマンドブロックには、次の2つのコマンドを書きましょう!
/scoreboard players reset @e guardiankill
/bossbar set boss1 color blue
たくさん出てきたから気づいている方も多いかもしれませんが、
今回、executeを「もし~なら」で多様していますね! 便利!
これで1つ目のスキルが完成しました! お疲れ様です!
今戦場に入って、ボスを攻撃すると、たまにガーディアンを召喚してくるよ!
ボスのスキル2! 一定間隔で周辺のプレイヤーに防具貫通攻撃!
先ほど紹介した1つ目のスキルは、結構コマンドが長くなりましたが、
今度は単純に! 一定間隔で周辺に特別な攻撃をするようにしてみます!
こっちの方が、単純なコマンドで組まれていますよ~
実は、スコアボードなどをすでに用意しているので、あと必要なのは次のコマンドブロックたちだけ!
リピートは無条件、常時実行で、9つのチェーンはすべて条件付き、常時実行ですよ~
チェーンのコマンドブロックには、次のコマンドでクールタイムの終了を検知します。
クールタイムが終了したら、スキルを打ってすぐさまクールタイムを再設定していますよ!
/execute if entity @e[tag=first,scores={cooltime1=..0}] run scoreboard players set @e cooltime1 200
そして、2つ目に当たるチェーンコマンドブロックには、次のコマンドでボスを一瞬無敵化!
/effect give @e[tag=first] minecraft:resistance 1 6 true
そして、残りの8つのチェーンコマンドブロックで、ボスの周囲8方向にエヴォーカーの牙をスポーンさせます!
エヴォーカーの牙は、防具貫通でダメージを与えてくる特性がありますよ♪
8個も似たようなコマンドがあるから、見たい人は下のボタンを押してね!
これで2つ目のスキルも完成しました!
この状態でボスと戦うと、10秒毎に牙を出して攻撃してくると思います♪
ゾンビ特有の体当たり以外にも、攻撃手段を作れたね~
ボスの第一形態が完成!
なんとこれで、ボスの第一形態が完成しました! 皆さん長い解説にお付き合いいただきありがとうございます…!
簡単なものだけど、スキルを2つ作って、しかも戦場のギミックなどもコマンドで作れちゃいましたね!
コマンドが苦手な人でも、丸々真似していただければ同じものができるように工夫したつもりですので、
ぜひお時間のある時に挑戦してみてくださいね!
少しずつ知識が付いたら、自分なりのアレンジなどをしてみて楽しんでください♪
何を隠そう、僕もこの記事を書くにあたってたくさんググりましたし、
もしかしたらコマンドガチ勢の方々からしたら、信じられないコマンドを組んでいるかもしれませんが…(笑)
個人的に、まずはコマンドが苦手な方は、動くことを目標にしたらいいと思いますよ♪
何か質問や指摘などがあれば、コメント欄で教えていただけると嬉しいです…
また、現段階ではボスが倒れた時の処理がありませんが、こちらは後編で解説したいと思います。
ちなみに、次のコマンドをすべて実行すれば、とりあえずリセットが可能となっていますよ~
第二形態を作っていく解説は、後編に回したいと思いますので、お楽しみに!
(これ以上書くと記事の尺が大変なことになるので…)
今回は、オリジナルボスにスキルを作ったり、戦場を作ることをメインにしてみました! 後編をお楽しみに!
それでは皆さん、バイバ~イ!
よろしければ、この記事の前の前編や、続きの後編もご覧ください♪
コメント
匿名さんへ返信
データパックのほうがコマンドブロック等がなくてすっきりするのですが、
作成の難易度も高めなので、触れづらいので今回はコマンドブロックで紹介しておりますよ〜
データパックでもっと簡単にできると思います
匿匿の匿名さんへ返信
後編が遅くなってしまい申し訳ありません、本日投稿いたしました!
よろしければご覧ください♪
今度、これの後編も投稿して下さい。
123さんへ返信
本当ですね、僕が間違えて書いていました…(汗)
ご指摘ありがとうございます、修正しました!
スポイラーのタイトル(1)と牙をスポーンさせるためのsummonコマンド8つ
とか戦闘終了後のリセット用コマンド(デバック用と思っていただけるといいかもです)とスポイラーのタイトル(2)押しても何も出て来ません。
バグですか❓