■ 概要
マイクラでコマンドを使って、バトロワを作ってみた。
ワールドデータをダウンロードして、realmsやサーバーにアップロードすればフレンドと遊べると思います。
ワールドデータ↓(データパックも入ってる)
データパック↓(ワールドデータないと動かないのでコード確認用)
■ 環境
minecraft : 1.20.4
■ ゲームの内容
● ゲームルール
ゲームエリアで武器などを拾い、一人になるまで戦う
最終的にキル数と順位によって一番ポイントの高い人が優勝
● ゲームエリア
150x150マスの中で戦う
ゲーム開始から一定時間経つとワールドボーダーによってエリアが小さくなる
● プレイヤーのスポーン位置
真ん中のチェストを囲んで丸形でスポーン
ゲームタイマーがスタートしてからプレイヤーが移動できるようになる
● 戦闘用アイテムの入ったチェストについて
チェストの種類は4種類
・メイン
プレイヤーで囲んだ真ん中にあるチェスト
チェストの中身はランダム(20種類)、食料が充実している
・ベース
固定の場所に置かれているチェスト
チェストの中身はランダム(20種類)、武器が充実している
・ランダム
ランダムに生成される5つチェスト
中身は固定、金にんじんが入っている
・レア
マップの端にあるチェスト
チェストの中身はランダム(5種類)、ネザライト防具などが入っている
■ データパックの中身
● メイン実行ファイル
コマンドブロックとして使用するファイル
#ゲームスタート
data\battle\functions\game_start.mcfunction
#ゲームストップ
data\battle\functions\game_stop.mcfunction
#ゲームデータをリセット(game_startとgame_stopで使用)
data\battle\functions\game_reset.mcfunction
● ゲームの状況によるフォルダごとの処理内容
#エントランスでの処理
data\battle\functions\functions\standby
#ゲームエリア内でゲーム開始までの処理
data\battle\functions\functions\ready
#ゲームエリア内でゲーム終了までの処理
data\battle\functions\functions\play
#ゲーム終了からエントランスに戻るまでの処理
data\battle\functions\functions\end
● その他のファイル、フォルダ
#ゲームデータを編集する関数まとめ
data\battle\functions\functions\data_edit\data_setup.mcfunction #ゲームデータ作成
\data_delete.mcfunction #ゲームデータ削除
#ゲームの設定を変更するコマンドブロック一覧
data\battle\functions\functions\setting
■ 個人的に実装で学べたところ
● チェストの中身をランダム化する
- ストラクチャーブロックでチェストを保存し、名前を
chest_base1
,chest_base2
のように割り当てる -
random value 1..2
で乱数を実行して、scoreboard
に記録する - if文で
scoreboard
と同じ数字のチェストをplace template
で生成する
execute store result score baseChest Chest run random value 1..2
execute if score baseChest Chest matches 1 run place template minecraft:chest_base1 300 26 128
execute if score baseChest Chest matches 2 run place template minecraft:chest_base2 300 26 128
↑ 頭の悪いコードを書いている気がするので他の方法があるなら知りたい...
● チェストをランダムに生成する
- ストラクチャーブロックでチェストを保存し、名前を
chest_random
でつける - アーマースタンドに、tag名で
randomChest
をつける -
spreadplayers
で、tag名がrandomChest
のアーマースタンドをランダムに移動 - tag名が
randomChest
のアーマースタンドの位置に、place template
でchest_random
を生成する
spreadplayers 275 75 1 74 under 32 false @e[type=minecraft:armor_stand,tag=randomChest]
execute as @e[type=armor_stand,tag=randomChest] at @s if block ~ ~ ~ air run place template chest_random
参考にしたサイト↓
● 雪玉でフグを生成する
- 雪玉に名前
どくどくだま
を付ける -
execute as @e at @s
で着弾を検知して、summon
でフグを生成する
execute as @e[type=minecraft:snowball,nbt={Item:{tag:{display:{Name:'[{"text":"どくどくだま"}]'}}}}] at @s unless block ~ ~-1 ~ air run summon minecraft:pufferfish ~ ~ ~
参考にしたサイト↓
■ 使用感、感想
twitch配信者のだみあさんの企画で使用してもらいました。
ゲームバランスの不安があったんですが、そこまで悪くなかった印象。
初めて作ったデータパックにしては、まあまあかなといった感じでした。
四枚目の写真がプレイしている様子↓