基本的なブロックの作り方

はじめに

この記事では、基本的なブロックを追加する方法について解説しています。

この記事は、マイクラ統合版26.40のときに作成されました。マイクラ統合版のアップデートにより、うまく機能しなくなる場合もあります。

今回作成するブロックは、以下の画像のような立方体のブロックです。

ビヘイビアーパック側の作成

まずは、ビヘイビアーパック側で必要となるファイルの作成や編集を行っていきます。

ビヘイビアーパックのフォルダの中に新しく📁blocksを作成してください。この📁blocksは追加するブロックのjsonファイルを保存するための場所になります。追加するブロック1つにつき1つのjsonファイルが必要となります。

ブロックを追加するために新しくファイルを作成します(ここで作成したファイルをビヘイビアーブロックファイルと定義します)。ファイル名はなんでも良いのですが、📝[ブロック名].jsonとするのが一般的です。この記事では、白いブロックを作成するため、📝white_block.jsonとしています。

ビヘイビアーパックの構造
📁[ビヘイビアーパック]
┣📁blocks
┃┗📝white_block.json
┗📝
manifest.json

ここで作成したファイルには、以下のコードを記述します。

{
	"format_version": "1.26.40",
	"minecraft:block": {
		"description": {
			"identifier": "practice:white_block",
			"menu_category": {
				"category": "construction"
			}
		},
		"components": {
			"minecraft:geometry": {
				"identifier": "minecraft:geometry.full_block"
			},
			"minecraft:material_instances": {
				"*": {
					"texture": "white_block",
					"render_method": "opaque"
				}
			},
			"minecraft:selection_box": true,
			"minecraft:collision_box": true
		}
	}
}

ビヘイビアーブロックファイルの構造

ビヘイビアーブロックファイルの最低限必要な内容を大きく分けると、format_version、description、componentsの三つの要素が最低限必要となります。

format_version(文字列型)

format_versionはビヘイビアーブロックファイルの書き方のバージョンを設定します。マイクラ統合版のバージョンを文字列型で書く必要があります。特別な理由が無い限り、ファイルを作成する時の最新のマイクラ統合版のバージョンを記述します。

minecraft:block(オブジェクト型)

このファイルがブロックに関するファイルであるということを定義します。

description(オブジェクト型)

ブロックの説明を記述します。ここでは、ブロックのIDの設定とブロックのカテゴリをこの中で設定しています。

identifier(文字列型)

ブロックのIDを設定します。文字列型ですが、名前空間:ブロック名の形式で設定する必要があります。名前空間とは、別のアドオンとIDが重複しないように管理するための仕組みです。例えば、バニラのブロックで草ブロックのIDは、grass_blockですが、本来のIDはminecraft:grass_blockになっています。このIDのminecraft部分がバニラの名前空間です。

名前空間に付け方のルールは特にありませんが、制作者や制作チームの名前、アドオン名などにすることが多いです。

menu_category(オブジェクト型)

ブロックのカテゴリーなどを設定します。このカテゴリーはクリエイティブインベントリや作業台などのクラフトレシピなどで表示される部分に使われています。

category(文字列型)

ブロックのカテゴリーを設定します。設定できる文字列は、「construction」「equipment」「items」「nature」「none」です。constructionは構築カテゴリー、equipmentは所持品カテゴリー、itemsはアイテムカテゴリー、natureは性質カテゴリーです。noneにした場合、クリエイティブインベントリやクラフトレシピ画面に表示されません。

components(オブジェクト型)

ブロックのコンポーネントを記述します。

minecraft:geometry(オブジェクト型)

ブロックのジオメトリ(モデル)情報を記述します。

identifier(文字列型)

ブロックのジオメトリIDを設定します。文字列型ですが、ジオメトリのIDのみを設定できます。ブロックのジオメトリは自分で作成することもできますが、カスタムジオメトリブロックは別の記事で解説予定です。

ジオメトリのIDは、既に用意されているものもあり、「minecraft:geometry.full_block」「minecraft:geometry.cross」の二種類があります。minecraft:geometry.full_blockは、一般的な立方体のブロック(フルブロック)のジオメトリです。minecraft:geometry.crossは、草や花などの交差したブロックのジオメトリです。

minecraft:material_instances(オブジェクト型)

ブロックのマテリアル情報を記述します。ブロックの面に表示するテクスチャを設定することができます。

*(オブジェクト型)

*は「すべての面」という意味があり、この中に設定した情報をブロックのすべての面に適用するという意味になります。

  • texture(文字列型)
    • ブロックのテクスチャIDを設定します。テクスチャIDの登録はリソースパック側の説明部分で解説します。
  • render_method(文字列型)
    • 設定したテクスチャの表示方法を設定します。設定できる値は何種類かあるのですが、よく使われるものとして、「opaque」「blend」「alpha_test」があります。opaqueは、透明や半透明が許可されず、すべて不透明で表示されます。ほとんどのブロックに使用されています。blendは、透明と半透明も許可されて表示されます。alpha_testは、半透明が許可されず、半透明部分は不透明で表示され、透明部分は透明で表示されます。
minecraft:selection_box(ブーリアン型)

ブロックを設置する際や破壊する際に表示される選択範囲を設定します。trueにすることで、選択範囲をフルブロックの大きさに設定し、falseにすることで、選択範囲を無しにできます。

minecraft:collision_box(ブーリアン型)

ブロックの当たり判定を設定します。trueにすることで、当たり判定の大きさがフルブロックと同じように設定でき、falseにすることで、当たり判定を無しにできます。

リソースパック側の作成

次に、リソースパック側の作成に入ります。

リソースパックのフォルダの中に新しく📁texturesを作成してください。このフォルダ内に📝terrain_texture.jsonを作成します。このファイルは後ほど解説します。さらに、📁texturesの中に📁blocksを作成します。📁texturesは、テクスチャに関するファイルを保存するためのフォルダです。このフォルダ内であれば、どこにテクスチャ画像を設置してもいいのですが、大きなアドオンになるとテクスチャの数が増えて管理しにくくなるため、ブロックのテクスチャは📁blocksとしてまとめます。

作成するブロックのテクスチャは任意のペイントソフトなどを使って作成します。バニラのテクスチャは16×16ピクセルの大きさです。ピクセル数を増やせば増やすほど滑らかなテクスチャが作成できますが、ゲーム内での描画負荷が上がることに注意してください。

作成したテクスチャ画像は📁blocksに保存します。

リソースパックの構造
📁[リソースパック]
┣📁textures
┃┣📁blocks
┃┃┗🖼white_block.png
┃┗📝terrain_texture.json
📝manifest.json

📝terrain_texture.jsonには、以下のコードを記述します。

{
	"resource_pack_name": "",
	"texture_name": "atlas.terrain",
	"padding": 8,
	"num_mip_levels": 4,
	"texture_data": {
		"white_block": {
			"textures": "textures/blocks/white_block"
		}
	}
}

resource_pack_name(文字列型)

リソースパックの名前を記述するところですが、今のところここに記述した内容が意味することが無く、空欄のままで問題ありません。

texture_name(文字列型)

このファイルに記述するテクスチャの種類を設定します。ブロックの場合は、atlas.terrainと設定します。

padding(数値型)

テクスチャのパディングを設定します。バニラのファイルで8が設定されているため、8と設定します。

num_mip_levels(数値型)

ミップマップレベルを設定します。遠い場所にあるブロックのテクスチャの解像度を落として描画処理を軽くする設定です。バニラのファイルで4が設定されているため、4と設定します。

texture_data(オブジェクト型)

テクスチャ名とテクスチャ画像のファイルパスの紐付けを行います。書き方は以下の通りです。

"texture_data": {
	"[テクスチャ名]": {
		"textures": "[テクスチャ画像のファイルパス]"
	}
}

翻訳の追加

すでに、今の状態でもゲーム内に新しくブロックを追加することができています。しかし、今の状態だとブロック名の翻訳が行われていないため、ブロック名はtile.practice:white_block.nameと表示されてしまいます。このままだと、何のブロックなのか分かりにくいため、翻訳を行います。

リソースパックのフォルダの中に新しく📁textsを追加します。その中に、📝ja_JP.langと📝languages.jsonを追加します。

リソースパックの構造
📁[リソースパック]
┣📁texts
┃┣📝ja_JP.lang
┃┗📝languages.json
📁textures
┃┣
📁blocks
┃┃┗
🖼white_block.png
┃┗
📝terrain_texture.json
📝manifest.json

📝ja_JP.langは、ゲーム内の言語設定を日本語に設定している場合に使用する翻訳ファイルです。📝languages.jsonは、このアドオンがどの言語に対応しているのかを記述するためのファイルです。このファイルは無くても今回は動作しますが、このファイルが無いと正しく動作しない部分もあるため、作っておいた方が良いです。

languages.jsonの設定

📝languages.jsonには、以下のように設定します。

[
	"ja_JP"
]

配列型で設定するため、もし他の言語を設定する場合は、カンマで区切って追加します。

ja_JP.langの設定

📝ja_JP.langには、以下のように設定します。

tile.practice:white_block.name=白いブロック

翻訳ファイルは、真ん中のイコール(=)の左と右で分かれており、左には翻訳キーを、右には、翻訳名を設定します。

今回は、ブロックの名前を翻訳するため、左に追加したブロックの翻訳キーを、右には、表示したいブロック名を設定しています。

ブロックの翻訳キーは特殊で、tile.[ブロックID].nameという構成になっています。

動作確認

作成したブロックがゲーム内に追加されているか確認してみましょう。この記事で追加したブロックのカテゴリーは「construction」に設定したので、クリエイティブインベントリの構築タブ内に追加されていると思います。

タイトルとURLをコピーしました