/BasicControlSystem-mcdatapack

The Basic Control System is a data pack developed for Minecraft's Battle Royale.

Primary Languagemcfunction

BasicControlSystem-mcdatapack

Basic Control Systemはマインクラフトでバトルロワイアルを遊ぶために開発されたデータパックです。

このデータパックは専用のワールドに合わせて開発されたため、他のワールドにそのまま使用することができません。 他のワールドで使用するには、各種コマンドを使用するワールドに合わせて修正する必要があります。

2年以上前から制作を始め、完成してから1年以上経過しているため(2021年1月時点)、私自身仕様を忘れてしまっている部分が多くあります。 公開にあたり、本データパックの構造と仕様をできる限り、随時記していきます。コマンドの参考にでもご利用ください。

※注意 データパックは〈データパック/pack.mcmeta〉というフォルダ構造でなければいけません。 GitHubからダウンロードした場合〈データパック.zip/データパック/pack.mcmeta〉となっているので注意してください。

また、構造さえ正しければzipであっても読み込むことができます。なので〈データパック.zip/pack.mcmeta〉でも問題ありません。ただし、フォルダ内に日本語名のファイルがある場合はzipとして正常に読み込むことができませんのでご注意ください。

2021/02/01 bcs解説

BasicControlSystem(以降bcs)はf3.0→ 1.0→ renewed1.0という順にナンバリングが進んでいます。 また1.0より先のコミットから、使用するワールドが変更されて、座標・ワールドの範囲を扱うコマンドが大幅に編集されているはずです。確認できてないので、フォルダの状況からの予想になりますが。

古いコミットの解説はすっ飛ばして、一番最新のコミットから解説していきます。
まず、ほぼすべてのファンクションは〈./data/minecraft/tags/functions〉に記述されている〈bcs:control〉で制御されています。なので、〈bcs:control.mcfunction〉を辿っていけばすべての仕様を把握することができるはず……ですが、フォルダ構成がむちゃくちゃ複雑なので、少しだけわかりやすくするために解説します。

ちなみに、〈./data/bcs〉の古いフォルダ名は〈./data/system〉です。他のデータパックとの競合を避けるために、自分のデータパック名の短縮形を名前空間に設定しています。データパックの名前空間が被ることなんてめったにないと思いますけどね。

  • functionsフォルダ直下
    functionsフォルダにはgame、library、mainのフォルダがあり、gameにはゲームをするのに必要なコマンド、libraryにはほかのゲームにも使える汎用的なコマンドが入っています。mainにはログイン関連のコマンドが入っています。最新のコミットからは削除されていますが、古いバージョンにはバトロワ以外に、デスマッチのゲームも実装されていました。
フォルダ名 仕様
game ゲームに必要なコマンドが入っています。
library 他のゲームにも使える、汎用可能なコマンドが入っています。
main ログイン関連の制御コマンドが入っています。
  • スコアボードの解説
    詳しくはsetup.mcfunctionと、〈./library/general/initial_settings/scoreboard.mcfunction〉を参照ください。
    以下に軽いbcs.controlオブジェクトの変数の解説を載せておきます。
変数名 仕様
game どのゲームを設定中か判定するための変数です。主にcontrol.mcfunctionで使用しています
phase ゲームの進行を格納します。
players プレイヤー人数を格納します。
return 戻り値を格納します。
remove_column スコアから特定の桁を抜き出すための変数です。
select_column スコアから特定の桁を抜き出すための変数です。
time_m,s,t タイマー用の変数です。

libraryフォルダのscoreboardにselect,remove_column変数を用いたコマンドがあるのですが、ばかみたいな処理をしてたので恥ずかしい。。;

  • control.mcfunction
    スコアボードの解説を踏まえてcontrol.mcfunctionを見ると、10~12行目のコマンドの意味が分かると思います。game変数が2のとき、バトロワのcontrolが動いています。このバトロワのcontrolを辿っていけば、仕組みが理解できるはずです。あとは頑張ってくだあし。

2021/02/08 bcs解説2

まとまりなく思いついたことから書いてるので非常に見ずらいこと。フォルダ構成の概要について少し解説していきます。

  • フォルダ構成の概要
    どこにどんな処理を書くかは、処理の主題(ざっくりどんな処理をしているか)で分けられます。例えば、タイトルアクションバーに文字を表示するコマンドは、処理の主題がメッセージというふうに考えられるので、functionsのmessageフォルダを見ればその処理がある。という感じ。なので大体のコマンドの場所は想像で特定できると思います……がbcsはリファクタリングしきれなかった部分が多くあって、ごちゃついてるとこもあるので、特定するのは簡単じゃないかもしれません。。

    マイクラのコマンドは、規模が大きくなるほど変更したことの影響範囲(変更に合わせて修正が必要な範囲)がどうしても大きくなってしまうので、少しでも変更が容易になるように、修正箇所が特定しやすいようなフォルダ構成にすることが大切なのです。

  • bcsを自分のワールドで使用する
    別のワールドで使用するときのために、絶対座標などを記述している個所を覚えてるだけ書いておきます。
    ※私も変更箇所を完全に把握しているわけではないので、変更したとして別のワールドで使用できるかは分かりません。

    場所 内容
    game/battle_royale/world/set_world マップの中心座標を指定します。
    game/battle_royale/world/air_plane/ マップ範囲とマップ端を指定します。
    game/battle_royale/world/air_plane/set_objective ワールド端の、エンドラの目的地を指定します。4つファイルがあるのは、マップの中心を通らせるために、マップを4分割しエンドラの位置で目的地を分岐させるためです。
    game/battle_royale/worldborder/ マップのサイズにワールドボーダーを合わせます。
    game/battle_royale/player/button/ join_the_gameとspectate_the_gameには待機場所の座標を、spectate_the_in_gameにはマップの中心と半径を指定します。
    game/battle_royale/player/game/set_lobby ロビーの座標を指定します。
    library/world/lobby_guard ロビーの範囲を指定します。
    library/player/return_to_lobby ロビーの座標を指定します。