さて、今回でマイクラのガチャPVPの作り方についての連載は最後になります。
前回は、ガチャシステムまで作りました。
最後は闘技場に入り、プレイヤー同士が対戦してから勝敗が決するまでを、またコマンドブロックを使って制御していきます。

ミノクラ版の闘技場

少しだけ我が家のガチャPVPの闘技場をご紹介!
ただの平らな大地では飽きると思ったので、森・池・草原・溶岩の4つのエリアを作りました。
闘技場内のギミックは何でも構いませんので楽しく作りましょう!
敢えてモブが湧くようにしています。

また、闘技場の形は円型で、半径は30ブロックとしていますが、この情報は後にコマンドブロックの設定に関係するので、頭の片隅に入れておいてください。
対戦の開始と終了
前回のガチャシステム編では、闘技場以外でプレイヤー同士が攻撃できないようにゲームルールで制限していたので、プレイヤーが闘技場に入ったら対戦できるようにし、最後の1人まで生き残ったプレイヤーを勝者とします。
コマンドブロックを配置

中央にある紫色のコマンドブロックは、闘技場にいるプレイヤーの人数を検知するもので、ゲームを制御する上での要になります。
このコマンドブロックは必ず闘技場の中心に配置してください。
そこから、コンパレーターやレッドストーンパウダー、レッドストーントーチを使用して、各コマンドブロックに繋げます。
向かって左側の1つのコマンドブロックは、対戦を開始するためのもの。
向かって右側の2つのコマンドブロックは、対戦を終了するためのものです。
特定の範囲のプレイヤーを検知

まずは、特定の範囲にいるプレイヤーの人数を検知するためには、中央にある紫色の反復タイプのコマンドブロックで、testfor
コマンドを使用します。
まずはコマンドブロックの設定をします。
設定項目 | 設定値 |
---|---|
ブロックの種類 | 反復 |
条件 | 無条件 |
レッドストーン | 常にアクティブ |
最初のティックで実行 | オン |
ティックの遅延 | 0 |
次にコマンドを入力します。
このコマンドブロックから、半径60ブロック以内にいるプレイヤーの数をカウントします。
1 |
testfor @a[r=60] |
レッドストーンパウダーの数について
上記の画像を見ると分かる通り、上記のコマンドブロックからコンパレーターで信号を検知し、そこから2ブロック分だけレッドストーンパウダーを設置しています。
これは、testfor
コマンドで検知したプレイヤー数に応じて信号の強さが変わるからです。
例えば、testfor
コマンドで指定した範囲内にプレイヤーが1人いれば、1ブロック分の信号に。
プレイヤーが2人いれば、2ブロック分の強さの信号になります。

つまり、プレイヤーの数だけ信号が強くなる仕組みですね!
ここで、レッドストーンパウダーを2ブロック分設置しているということは、プレイヤーが2人以上になった場合に、左右のコマンドブロックが動作すると言った仕組みです。
ゲームルールを変更してPVP開始

闘技場にプレイヤーが2人以上入って来たら対戦できるようにします。
左側にある衝撃タイプのコマンドブロックに、ゲームルールを変更するコマンドを入力します。
設定項目 | 設定値 |
---|---|
ブロックの種類 | 衝撃 |
条件 | 無条件 |
レッドストーン | レッドストーンが必要 |
最初のティックで実行 | オフ |
ティックの遅延 | 0 |
以前ご紹介したgamerule
(ゲームルール)コマンドの中で、待機場所でプレイヤー同士が攻撃できないように設定っしていましたが、待機場所から闘技場に移動したプレイヤーが2人以上になったら、プレイヤー同士が攻撃できるように設定します。
1 |
gamerule pvp true |
その他のgamerule
の引数については、こちらをご覧ください。

勝敗とPVPの終了
最後の1人になったプレイヤーが勝者となり、ゲーム画面に勝ったプレイヤー名を表示して、元のスポーン位置へとテレポートさせます。
右側にあった2つのコマンドブロックが動作する条件は、間にレッドストーントーチを挟んでいたので、開始時の動作とは逆になります。
つまり、闘技場にいるプレイヤーの数が、2人以上から1人に減った場合に動作します。
勝利したプレイヤー名を表示

衝撃タイプのコマンドブロックの設定は先程と同じですので割愛します。title
コマンドを使用して、プレイヤー全員のゲーム画面に勝利したプレイヤー名を表示します。
1 |
title @a title @p のかち!! |
勝者をスポーン位置にテレポート

最後のチェーンタイプのコマンドブロックでは、tp
コマンドを使用して、勝者をスポーン位置にテレポートさせます。
設定項目 | 設定値 |
---|---|
ブロックの種類 | チェーン |
条件 | 無条件 |
レッドストーン | 常にアクティブ |
最初のティックで実行 | オフ |
ティックの遅延 | 0 |
tp
コマンドも前回の記事で紹介していますので、詳しい説明は割愛させていただきます。
1 |
tp @p 0 110 0 |
これでマイクラのガチャPVPが完成しました!
あとはみんなでマルチプレイを楽しんでください!


コメント