Minecraft【作るゲーム】1vs1PVPバトルv1.1。

2024-03-02

Java版1.19.4、統合版はv1.19.83で動作確認。

装備ガチャ(全6種類)を回してバトルスタート! プレイヤー対プレイヤーで対戦するミニゲームを作成。

1vs1PVPバトルv1.1。

待機エリアでバトルエントリー。対戦相手が見つかったらバトルステージに移動。来なければロビーへ戻ります(10秒)。「START!」が表示されたらバトル開始。1歩動くと装備が入った樽が出現するので、急いで装備します。対戦中はサバイバルモードになるので、ステージを破壊したり、ブロックを設置したり出来ます。制限時間は5分。相手を倒すか、残り時間が0になると試合終了。勝敗結果を表示してロビーに戻ります。※バトルエリアから出ると負け。引き分けの表示はありません。同じ操作方法での対戦推奨。

◻︎装置の特徴
・tagを使ったプレイヤー管理。
・ストラクチャーブロックを使ったステージ復元。
・中身が変わる装備ガチャ。
・「execute if score」を使ったスコアの検知。

 

完成動画(旧式)

動画は統合版v1.14.3マルチプレイ時のスキンバグで、相手と同じスキンになっています。

 

 

目次

1.作成準備
・フラットワールド。
・チャットコマンド。
2.コマンドブロックの設置
3.装置全体図
・1vs1PVPバトルv1.1の装置全体図。
4.バトルエリア
・ステージの大きさ。・壁と床。・ステージの土台。
5.待機エリア
・ロビー。・ホームと壁。
6.装置エリア
・スコアボードの作成。・ゲームルールの変更。・1P側(赤)。・2P側(空)とタイマー。・バトル開始と勝敗判定。・勝敗結果の表示。・エントリールーム(AND回路)。・リセット。
7.装備ガチャ
・防具立ての設置。・樽の中身。・装備ガチャ(赤)。・装備ガチャ(空)。
8.ステージの作成
・仕上げ。
9.ワールドデータ
・完成データのダウンロード。

 

更新履歴
2023-5-27/統合版の「test」を廃止して「execute if score」に変更しました。
2023-3-2/新設計!1vs1PVPバトルv1.1。コマンドブロックを大幅に減らし、統合版の新コマンドにも対応しました。

作成準備

フラットワールド。

マインクラフトのバージョンも上がり、フラットワールドの作成が簡単になりました。 詳しくは、下記の関連記事を参考に作成してください。

 

 

チャットコマンド。

チャットに大量のコマンドログが流れ、装置作成の邪魔になるのでログを非表示にしておきます。 ※Java版では、新規ワールド作成時にも非表示に出来ます。

◻︎コマンドログの非表示 ※表示する場合 「false」を「true」に変更。

/gamerule commandBlockOutput false

装置作成に必要なコマンドブロックを手に入れます。

◻︎コマンドブロックの入手

/give @s command_block

 

コマンドブロックの設置

Java版と統合版では、コマンドやブロックの名称など違いがあります。
装置の解説はJava版の名称で統一しています。

コマンドブロックは画像に合わせて配置。「ブロックの種類」「レッドストーン」を変更します。変更がある場合は、個別に解説していきます。

配置したコマンドブロックの状態/すべて無条件
※()内は統合版の名称。

コマンドブロックの色 ブロックの種類 レッドストーン
黄色 インパルス
(衝撃)
動力が必要
(レッドストーンが必要)
青色 チェーン 常時実行
(常にアクティブ)
紫色 リピート
(反復)
常時実行
(常にアクティブ)

 

装置全体図

1vs1PVPバトルv1.1の装置全体図。

大きく分けると3つのエリアがあり、コマンドブロックは解説しやすいように広げてあります。装置は開始点座標(0 -60 0)を基準に、南が正面がになるよう設置にしています。座標を合わせてブロックを設置していくと、コマンドはコピー&ペーストで作れます。

❶バトルエリア ❷待機エリア ❸装置エリア

◻︎南向きを確認するには
ストラクチャーブロックを設置して、境界線の青い線が伸びる方が南。※赤い線は東。
/give @s structure_block

 

バトルエリア

ステージの大きさ。

ストラクチャーブロックを使って、バトルステージの大きさを決めます。境界線は大型建築の時など、目安にもなるので便利です。

「A」は座標(0 -62 0)。

2ブロック下にストラクチャーブロックを設置して、セーブモードで座標を入力。ストラクチャーのサイズ X:「17」 Y:「22」 Z:「42」。

 

壁と床。

コマンドを使って、ステージの壁と床を作成。バリアブロックで箱を作り、中を空洞にします。床を草ブロックに変え、石レンガの床を設置。

「A」は座標(0 -62 0)。

【Java版】

①/give @s barrier
②/fill 0 -62 0 16 -41 41 barrier
③/fill 1 -60 1 15 -41 40 air
④/fill 1 -61 1 15 -61 40 grass_block
⑤/fill 1 -60 7 15 -59 34 stone_bricks

【統合版】①②③はJava版と同じ。

④/fill 0 -61 0 16 -61 41 grass
⑤/fill 1 -60 7 15 -59 34 stonebrick

 

ステージの土台。

階段を作り、プレイヤーの出現場所、装備ガチャの設置場所に色付きコンクリートを設置します。土台が出来たら、一度ストラクチャーブロックに保存します。

「T1」は座標(8 -61 39)、「赤」は座標(6 -59 34)。「T2」は座標(8 -61 2)、「空」は座標(10 -59 7)。

「T1、T2」はプレイヤーのテレポート場所。「赤、空」の上には装備の入った樽(タル)を設置します。 ストラクチャーブロックは草ブロックで埋め、座標(0 -60 0)に開花したツツジの葉を設置。

土台の保存
座標(0 -62 0)に設置したストラクチャーブロックをセーブモードにして座標を入力。ストラクチャーのサイズ X:「17」 Y:「22」 Z:「42」。ストラクチャー名を「stage1」にして保存します。

 

【Java版】

Java版では、ストラクチャーブロックのロード時に動力が必要なので、追加でコマンドブロックを設置します。※統合版は必要なし。

「A」は座標(0 -62 0)。①②は2ブロック下。②は動力が必要に変更。

①execute if block 0 -62 0 structure_block
②setblock 0 -62 0 barrier replace

①「A」にストラクチャーブロックがある時、信号を出します。
②信号がある時「A」をバリアブロックに置き換えます。

 

待機エリア

バトルにエントリーしたり、バトル終了後に戻ってくる場所(ロビー)を作ります。

ロビー。

「あ」は座標(23 -60 38)。「B」は座標(24 -60 33)。「P1」は座標(23 -60 27)、「P2」は座標(25 -60 27)。

「あ」の座標から3×3ブロックの足場を作成。高さは2ブロックにします。「B」はワールドスポーン位置にします。「P1、P2」はエントリールーム。座標を確認し、高さ3ブロックの壁を作ります。

 

ホームと壁。

「C」は座標(24 -58 39)。「赤壁」は範囲座標(23 -60 28)、(23 -58 28)。 「空壁」は範囲座標(25 -60 28)、(25 -58 28)。

「C」の座標はプレイヤーがロビーに戻る時に使います(ホームポイント)。ステータスや装置もリセットします。エントリールームでは「赤壁、空壁」を開け閉めして、バトルにエントリー出来るプレイヤーを制限します。

 

装置エリア

スコアボードの作成。

2種類のスコアボードを作成。「count」は、タイマーや勝敗装置、装備ガチャなどに使用。「Time」は残り時間を表示します。装置が完成するまで「count」をサイドバーに表示しておきます。※確認用

【Java版/統合版 共通】

/scoreboard objectives add count dummy
/scoreboard objectives add Time dummy
/scoreboard objectives setdisplay sidebar count

◻︎削除する場合。
/scoreboard objectives remove count
/scoreboard objectives remove Time

 

ゲームルールの変更。

コマンドを使ってゲームルールを変更します。※統合版は、コマンドを使わなくても設定から変更出来ます。

【Java版】

/gamerule doImmediateRespawn true
/gamerule doMobLoot false

◻︎戻す場合。
/gamerule doImmediateRespawn false
/gamerule doMobLoot true

死んだ時、メニューを出さすに即リスポーン。モブがアイテムを落とさない。

 

1P側(赤)。

プレイヤーが「P1」にいる時、動作する装置を作ります。

①は座標(19 -60 24)。②にはレッドストーントーチ(のたいまつ)を設置。③は動力が必要(レッドストーンが必要)に変更。

【Java版】

①execute if entity @p[x=23,y=-60,z=27,dx=0,dy=2,dz=0]
②tag @p[x=23,y=-60,z=27,dx=0,dy=2,dz=0] add aka
③scoreboard players add ティック count 1
④scoreboard objectives setdisplay sidebar Time
⑤scoreboard players set 残り時間 Time 10
⑥fill 25 -60 28 25 -58 28 air
⑦fill 23 -60 28 23 -58 28 red_concrete
⑧fill 25 -60 28 25 -58 28 light_blue_concrete

【統合版】①〜⑥はJava版と同じ。

⑦fill 23 -60 28 23 -58 28 concrete 14
⑧fill 25 -60 28 25 -58 28 concrete 3

【タグ付け】
①「P1」にプレイヤーがいる時、信号を出す。
②「P1」にいるプレイヤーにタグ「aka」を追加。

【タイマー】
③④⑤「Time」をサイドバーに表示。 10秒のタイマーを起動。

【壁の開閉】
⑥「空壁」に空気ブロックを設置。
⑦「赤壁」に赤色のコンクリートを設置。
⑧信号がない時「空壁」に空色のコンクリートを設置。

 

2P側(空)とタイマー。

「P2」にいるプレイヤーにタグを付けます。また、ティック(tick)を数えたり、残り時間が0になった時、プレイヤーを移動させます。

レッドストーンリピーター(反復装置)は、2回クリック。④は条件付きに変更。

【Java版/統合版 共通】

①tag @p[x=25,y=-60,z=27,dx=0,dy=2,dz=0] add ao
②execute if score ティック count matches 18..
③scoreboard players set ティック count 0
④scoreboard players remove 残り時間 Time 1
⑤execute if score 残り時間 Time matches 0..0
⑥tp @p[tag=aka] 24 -58 39
⑦tp @p[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39
⑧scoreboard players set 勝敗 count 3

【タグ付け】
①「P2」にいるプレイヤーにタグ「ao」を追加。

【タイマー】
②③④18ティック(tick)を1秒に変換し「Time」の残り時間を1引く。

【プレイヤーの移動】◻︎待機エリア、ホームと壁を参照。
⑤⑥⑦残り時間が0になったら、タグ「aka」バトルエリアにいるプレイヤーを「C」に移動。
⑧「count」の勝敗を3にします。

 

バトル開始と勝敗判定。

プレイヤーがバトルエリアに入ったら、開始の合図とタイマーを起動。どちらかのプレイヤーがバトルエリア外に出た時、勝敗を決定します。※残り時間が0まで勝負がつかない場合は、引き分けになります。

⑨は動力が必要(レッドストーンが必要)に変更。

【Java版】

①execute if entity @p[tag=aka,x=0,y=-63,z=0,dx=16,dy=20,dz=41]
②scoreboard players set 勝敗 count 1
③tp @p[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39
④execute if entity @p[tag=ao,x=0,y=-63,z=0,dx=16,dy=20,dz=41]
⑤scoreboard players set 勝敗 count 2
⑥tp @p[x=0,y=-63,z=0,dx=16,dy=24,dz=41] 24 -58 39
⑦execute if entity @p[x=0,y=-63,z=0,dx=16,dy=20,dz=41]
⑧scoreboard players set 残り時間 Time 300
⑨scoreboard players add ティック count 1
⑩title @a title {"text":"START!","bold":true}

【統合版】①〜⑨はJava版と同じ。

⑩title @a title START!

【タグ「aka」の検知】◻︎待機エリア、ホームと壁を参照。
①バトルエリア内にタグ「aka」がいる時、信号を出す。
②「aka」が勝った時「count」の勝敗を1に設定。
③バトルエリア内のプレイヤーを「C」に移動。

【タグ「ao」の検知】◻︎待機エリア、ホームと壁を参照。
④バトルエリア内にタグ「ao」がいる時、信号を出す。
⑤「ao」が勝った時「count」の勝敗を2に設定。
⑥バトルエリア内のプレイヤーを「C」に移動。

【タイマー】
⑦バトルエリア内のプレイヤーを検知。
⑧⑨300秒(5分)のタイマーを起動。
⑩タイトルに「START!」と表示。

※バトルエリアから後に出る方が信号が遅れるのを利用して、勝敗を決めています。

 

勝敗結果の表示。

スコアボード「count」の勝敗のスコアに合わせて、結果をタイトルに表示します。また、ストラクチャーブロックをロードして、ステージを復元します。

リピーター(反復装置)は3回クリック。②④は動力が必要(レッドストーンが必要)に変更。

【Java版】

①execute if score 勝敗 count matches 1..
②execute if score 勝敗 count matches 1
③title @a title {"text":"RED WIN!","bold":true}
④execute if score 勝敗 count matches 2
⑤title @a title {"text":"BLUE WIN!","bold":true}
⑥scoreboard players set 勝敗 count 0
⑦setblock 0 -62 0 structure_block{mode:"LOAD",name:"stage1"}
⑧kill @e[type=!armor_stand,type=!player]

【統合版】③⑤⑦以外はJava版と同じ。

③title @a title RED WIN!
⑤title @a title BLUE WIN!
⑦structure load "stage1" 0 -62 0

【勝敗結果】
①「count」の勝敗が1以上の時、信号を出す(統合版は1〜3の時)。
②「count」の勝敗が1の時、信号を出す。
③タイトルに「RED WIN!」を表示。
④「count」の勝敗が2の時、信号を出す。
⑤タイトルに「BLUE WIN!」を表示。
⑥「count」の勝敗を0に設定。

【ステージの復元】◻︎バトルエリア、ステージの大きさを参照。
⑦「A」の座標にロードモード「stage1」のストラクチャーブロックを設置。
⑧落ちているアイテム削除。

 

エントリールーム。(AND回路)

タグ「aka、ao」が揃った時、プレイヤーをバトルステージに移動し、ゲームモードを変更します。

【Java版/統合版 共通】

①execute if entity @p[tag=ao]
②execute if entity @p[tag=aka]
③kill @e[type=item]
④tp @p[tag=aka] 8 -60 39
⑤tp @p[tag=ao] 8 -60 2
⑥gamemode survival @p[tag=aka]
⑦gamemode survival @p[tag=ao]

【タグ検知】◻︎バトルエリア、ステージの土台を参照。
①②タグ「aka、ao」がいる時、信号を出す。
③落ちているアイテムを削除。
④⑤タグ「aka、ao」をバトルエリア「T1、T2」に移動。
⑥⑦タグ「aka、ao」のゲームモードをサバイバルに変更。

リセット。

バトル終了後に、プレイヤーのステータスや装置をリセットします。

【Java版】

①execute if entity @p[x=23,y=-59,z=38,dx=2,dy=2,dz=2]
②fill 23 -60 28 23 -58 28 air
③tag @a remove aka
④tag @a remove ao
⑤gamemode adventure @a
⑥effect clear @a
⑦clear @a
⑧effect give @a instant_health 1 20
⑨effect give @a saturation 1 20

【統合版】⑥⑧⑨以外はJava版と同じ。

⑥effect @a clear
⑧effect @a instant_health 1 20
⑨effect @a saturation 1 20

【リセット】◻︎待機エリア、ホームと壁を参照。
①プレイヤーが金ブロックの上にいる時、信号を出す。
②「赤壁」に空気ブロックを設置。
③④タグ「aka、ao」を削除。
⑤ゲームモードをアドベンチャーに変更。
⑥⑦エフェクトを解除し、持ち物すべてを消す。
⑧⑨体力や空腹を回復。

 

装備ガチャ

防具立ての設置。

チャットコマンドを使って、名前を付けた防具立てを設置します。「RB」は装備ガチャに使用。

【Java版】

/summon armor_stand 21 -60 8 {CustomName:"\"R\""}
/summon armor_stand 21 -60 7 {CustomName:"\"B\""}

【統合版】

/summon armor_stand R 21 -60 8
/summon armor_stand B 21 -60 7

 

樽の中身。

樽の中に装備を入れます。バトルが面白くなるように、装備の組み合わせを調整してください。例として、配布ワールドに入れてあるものを紹介します。

6種類のマスター装備。

【ソードマスター】
攻撃力は高いが守備力は弱い。(溶岩と肉と草ブロック)
【ボウマスター】
遠距離戦は強いが接近戦は弱い。(毒矢と移動速度上昇ポーション)
【TNTマスター】
当たれば破壊力最強。攻撃手段が少ない。(ガラスと釣竿)
【ガードマスター】
守備力が高いが攻撃力は弱い。(弱体化ポーションとクモの巣)
【ポーションマスター】
毒ポーションが勝敗を決める!? 操作が難しい。(治癒、力、跳躍ポーション)
【エッグマスター】
モブの使い方が勝敗のカギ!? 装備は弱い。(ブロックとツルハシ)

 

装備ガチャ(赤)

ループ式抽選装置を使って、バトルステージに樽を設置します。

④は条件付きに変更。「いうえ」の座標はコマンド内に記載。

【Java版/統合版 共通】

①execute if entity @p[x=8,y=-60,z=39,dx=0,dy=0,dz=0]
②scoreboard players add @e[name=R] count 1
③execute if entity @e[name=R,scores={count=4..}]
④scoreboard players set @e[name=R] count 1
⑤execute if entity @e[name=R,scores={count=1}] run clone 24 -60 7 24 -60 7 6 -58 34
⑥execute if entity @e[name=R,scores={count=2}] run clone 25 -60 7 25 -60 7 6 -58 34
⑦execute if entity @e[name=R,scores={count=3}] run clone 26 -60 7 26 -60 7 6 -58 34
⑧setblock 8 -60 39 barrier

【リセット】◻︎バトルエリア、ステージの土台を参照。
①「T1」にプレイヤーがいる時、信号を出す。
②防具立て「R」の「count」を1足す。
③④防具立て「R」の「count」が4以上になったら、1に戻す(条件付き)。
⑤⑥⑦防具立て「R」の「count」のスコアに合わせて「いうえ」の樽を「赤」の上にクローン。
⑧何度も装備ガチャを引けないように「T1」にバリアを設置。

 

装備ガチャ(空)

ループ式抽選装置を使って、バトルステージに樽を設置します。

④は条件付きに変更。「おかき」の座標はコマンド内に記載。

【Java版/統合版 共通】

①execute if entity @p[x=8,y=-60,z=2,dx=0,dy=0,dz=0]
②scoreboard players add @e[name=B] count 1
③execute if entity @e[name=B,scores={count=4..}]
④scoreboard players set @e[name=B] count 1
⑤execute if entity @e[name=B,scores={count=1}] run clone 28 -60 7 28 -60 7 10 -58 7
⑥execute if entity @e[name=B,scores={count=2}] run clone 29 -60 7 29 -60 7 10 -58 7
⑦execute if entity @e[name=B,scores={count=3}] run clone 30 -60 7 30 -60 7 10 -58 7
⑧setblock 8 -60 2 barrier

【リセット】◻︎バトルエリア、ステージの保存を参照。
①「T2」にタグ「ao」がいる時、信号を出す。
②防具立て「B」の「count」を1足す。
③④防具立て「B」の「count」が4以上になったら、1に戻す(条件付き)。
⑤⑥⑦防具立て「B」の「count」のスコアに合わせて「おかき」の樽を「空」の上にクローン。
⑧何度も装備ガチャを引けないように「T2」にバリアを設置。

 

ステージの作成

仕上げ。

コマンドブロックの動作が確認出来たら、ステージを作り仕上げます。配布ワールドでは、和風ミニ庭園ステージにしてあります。

【ステージの仕上げ】◻︎バトルエリア、ステージの土台を参照。
座標(0 -62 0)に設置したストラクチャーブロックをセーブモードにして座標を入力。ストラクチャーのサイズ X:「17」 Y:「22」 Z:「42」。ストラクチャー名を「stage1」にして保存します。

 

ワールドデータ

完成データのダウンロード。

完成データでは、座標(32 -60 18)にリセットボタンを設置してあります。また、エントリールームに入る前に、スコアボードも作成されます。

【統合版】 v1.19.83
アプリで開くから、Minecraftを選びます。
ダウンロード/1vs1PVPバトルv1.1.mcworld

【Java版】 1.19.4
zipを解凍して、フォルダを「saves」に入れて起動します。
ダウンロード/1vs1PVPバトルv1.1.zip

※二次配布は禁止です。