マイクラ ビヘイビアーパック 階層構造とjsonデーター構造

ビヘイビアーパックのファイルを編集すると、オリジナルのゲーム設定いわばmodを作ることができます。

modを作るためには、json形式ファイルの操作と階層構造を理解する必要があります。まずは、ビヘイビアーパックのファイルの構造についてまとめてみました。今回は、言語がそこまで理解できていなくても、プログラムの中身を変更するだけで遊べるよう解説していきます。

ビヘイビアーパック階層構造ってなんだろう?

ビヘイビアーパックをダウンロードして開いてみましょう。
展開すると、以下のようなファイルとフォルダーの階層構造になっています。

階層構造ってなに?

階層構造とは、いくつものフォルダーやファイルが決められた場所に配置された形で、フォルダーが枝分かれして広がってプログラムが実行される構造のことを階層構造といいます。

このフォルダ、ファイルの構成のことを、フォルダ構造と言い、このフォルダ構造のことをディレクトリ構造とも言います。

ビへイビアーパックの階層構造は、以下になります。

documentation 英文で書かれたビヘイビアーパックの解説ページ
※htmlファイルで作成されている。
entities ワールド内のエンティティ
items ワールド内にあるアイテム
loot_tables ゲームの振る舞い(ルール)
recipes ワールド内で生成されるアイテムのレシピ
scripts jsサンプル
spawn_rules スポーン条件
trading 取引条件
manifest.json ビヘイビアーパックの基本的な情報
pack_icon.png ビヘイビアーパックのサムネイル画像

ビヘイビアーパックのjsonファイルを変更することで、通常のゲームルールからオリジナルmodの有効化・無効化することが可能になります。

mod(ビヘイビアーパック)の拡張子は.json

ビヘイビアーパックのフォルダーの中身をみると、「.json」と書かれたファイルがいくつも入っています。この.jsonの部分を「拡張子」と言います。

拡張子(かくちょうし)は、ファイルの種類を識別(しきべつ)するためにファイルの名前(ファイル名)の最後につけられる文字になります。

マインクラフト(統合版)ビヘイビアーパックやリソースパックで主に使われている拡張子は以下になります。

.zip 圧縮されたファイルの拡張子
.json データーフォーマットの拡張子
.McWorld / .McPack マインクラフトのワールド拡張子
.fsb xboxやプレイステーション用のサウンド拡張子
.png 画像の拡張子
.lang 言語の拡張子
.js javascript(ジャバスクリプト言語)の拡張子
.html html(エイチティーエムエル言語)の拡張子

jsonってなんだろう?

jsonとは、「JavaScript Object Notation(ジャヴァスクリプト・オブジェクト・ノーテーション)」の略でJavaScriptのデーターフォーマット(初期の状態にして使えるようにする工程)になります。軽量で、一度にたくさんのデータを簡単に扱えるので、最も人気のあるプログラムのデーター形式のひとつです。

jsonを理解して本格的にmod開発を学習するためには、オブジェクト指向型のプログラミング言語を学ぶとよりいいです。
(JavaScript PHP java Pythonなど・・・・)

JSONファイルってどう書くの?

jsonファイルの基本の書き方は、以下の通りになります。
{ } の中に、変数名と値をコロン(:)で区切ります。

jsonでは数値、文字列、真偽値(true、false)、配列、オブジェクト、nullのデータ型を利用することができます。

{ "変数名": "値" }

jsonデーター形式を見てみよう!

マインクラフトのmodのデーター形式は2つで構成されています。
階層構造を持たないオブジェクトだけでなく、オブジェクトや配列を要素(値)にしたオブジェクトをつくることができます。

オブジェクトってなに?

オブジェクトとは、簡単に言えばプログラムの中身です。
オブジェクトの中には、データ(属性)と機能(手続き)をひとかたまりにした処理が入っています。

オブジェクトは{}(波カッコ)で全体を囲み、キーと値のペアをコロン(:)で区切って書きます。

//オブジェクトのはじまり
例:{ 
 ~処理の内容~
}
//オブジェクトのおわり

順序付けされない、単一または複数の、名前と値の組の集まりになります。

単一の値の場合

例:{
  "名前": 値, 
}

複数の値の場合

例:{ 
 "名前": 値, 
 "名前": 値 
}

配列を持つオブジェクト

配列を用意したとして、値をコンマで区切りで格納したものです。
※配列とは、複数の値を入れられる箱になります。

例:{
"属性":{  
"配列名": [ "値", "値", "値" ] 
} 
}

これらのオブジェクトがいくつもつながって一つのプログラム(データー)で動かすことができます。

プロパティの値を変更してmodを開発してみよう

プロパティの値を変更して、行動・目的とその値を設定してゲームを変更してみましょう。
entities(エンティティ)の情報を変更する場合は、以下のようになります。

見た目のサイズを変えてみよう!

{
  "minecraft:scale": {//エンティティの見た目のサイズを設定する行動名
    "value": 0.5     //数値が大きいほど、エンティティが大きくなる。
  }

当たり判定を変えてみよう!

{
  "minecraft:collision_box": {//エンティティの当たり判定の幅と高さを設定する行動名
    "width": 0.9,  //幅
    "height": 0.5  //高さ
}

jsonファイルのプロパティと値を変更して簡単にmodを開発しよう

マインクラフトのmodを作るために、ビヘイビアーパックの階層構造を理解してどのフォルダーの中に、どのゲームの振る舞いを変更するファイルがあるのか研究してみましょう。
今回はエンティティについて例題をだしてみました。

公式ページ属性の書かれたチュートリアルがあるので、振る舞いを書き直してオリジナルのmod開発をしてみましょう。

エンティティデーター

プログラミング言語をデータ形式にしたjsonファイルをカスタマイズして、オリジナルのmod開発を楽しんでくださいね!