ブロックの追加(基礎編)

スポンサーリンク

この記事では、ブロックを追加する方法について紹介しています。

今回、作るブロックはこのようなブロックです。

この記事で説明するファイル構造はこちらです。

ビヘイビアーパック内

ブロックを追加する際、ビヘイビアーパック内に「blocks」フォルダを作り、その中に任意の名前のファイルを作ります。ここで作るファイルにはブロックの機能や設定の記述を行っています。

block0.json内のコード

{
    "format_version": "1.21.20",
    "minecraft:block": {
        "description": {
            "identifier": "sample:block0",
            "menu_category": {
                "category": "construction"
            }
        },
        "components": {
            "minecraft:geometry": "minecraft:geometry.full_block",
            "minecraft:material_instances": {
                "*": {
                    "texture": "block0",
                    "render_method": "opaque"
                }
            }
        }
    }
}

format_versionはできるだけ最新のマイクラ統合版のバージョンにすることで最新の機能を使用することができます。また、古すぎるバージョンや存在しないバージョンを指定すると動かないです。

minecraft:blockはブロックを定義している場所です。この中に、いろいろと機能を書いていきます。

description

ブロックについてのIDの登録やメニューのカテゴリーを設定したりする場所です。

identifier(必須)

ブロックのIDを設定します。

"identifier": "(名前空間):(ブロック名)"

このような形で記述します。

名前空間はなんでもいいですが自分の名前やアドオン名の省略形が使用される場合が多いです。バニラデータには「minecraft」が使用さていますが新たに追加するブロックに「minecraft」を使用することはできません。

ブロック名は基本的になんでもいいですが、日本語名などは使用できません。

menu_category

ここに、メニューカテゴリーの設定を記述します。

menu_categoryには「category,group,is_hidden_in_commands」があります。

category(必須)

クリエイティブのインベントリー画面やクラフト画面で表示されるメニュー内でどのタブにブロックを表示させるかの設定です。

「menu_category」を追加した場合、この項目を設定しないとエラーになります。

設定できる種類は以下の通りです。

  • items(アイテム)
  • construction(構築)
  • equipment(所持品)
  • nature(性質)
  • none(表示させない)

なにも設定しない場合、メニューには表示されません。

例:

"menu_category": {
   "category": "construction"
}
group(オプション)

アイテムグループの設定ができます。板材やガラスなど、複数のブロックがまとまられているのがグループです。

新しくカテゴリーを作ることはできませんが、既存のカテゴリーに追加することは可能です。

ここで設定できるグループは多いので設定できるグループIDは省きますがバニラデータのlangファイル内に「itemGroup.name.○○」という場所がありますのでそこを参考にしてください。

例:

"menu_category": {
   "category": "construction",
   "group": "itemGroup.name.glass"  // ガラスブロックに追加
}
is_hidden_in_commands(オプション)

コマンドでブロックを指定できるかの設定です。「true」か「false」で設定します。「true」にすることで、giveコマンドやsetblockコマンドなどでブロックを指定できなくなります。無理やり指定するとコマンドエラーになります。

例:

"menu_category": {
   "category": "construction",
   "is_hidden_in_commands": "true"
}

components

コンポーネントを設定する場所です。ブロックの仕様について設定する部分です。

minecraft:geometry(必須)

ブロックのジオメトリ(モデル)を設定する部分です。今回は、立方体のジオメトリを使用するので、もともと用意されているジオメトリを使用しています。

用意されているジオメトリ

  • minecraft:geometry.full_block(立方体のモデル)
  • minecraft:geometry.cross(花や草などのクロスされたモデル)

また、自分でジオメトリを作成して適用させることもできます。ブロックのジオメトリについては別の記事で解説します。

minecraft:material_instances(必須)

ブロックのテクスチャやテクスチャのレンダー方法について設定します。

ブロックのテクスチャは石のようにすべての面に同じテクスチャを指定されてる場合もあれば、草ブロックのように面によって異なるテクスチャを指定している場合もあります。

すべての面に同じテクスチャを指定する場合はこのように記述します。

例:

"minecraft:material_instances": {
   "*": {
      "texture": "(テクスチャ名)",
      "render_method": "opaque"
   }
}

「*」はすべての面を設定する場合に使用します。

また、各面に異なるテクスチャを指定する場合は以下の通りです。

  • up
  • down
  • north
  • south
  • east
  • west

例:

"minecraft:material_instances": {
   "up": {
      "texture": "(テクスチャ名)",
      "render_method": "opaque"
   },
   "down": {
      "texture": "(テクスチャ名)",
      "render_method": "opaque"
   },
   "*": {
      "texture": "(テクスチャ名)",
      "render_method": "opaque"
   }
}

このコード例はup(上側)とdown(下側)のテクスチャは個別に指定し、それ以外の面は「*」を使用してまとめて指定しています。

このように、「*」は個別で指定していない面、すべてを指定する場合にも使用します。

texture(必須)

テクスチャを指定します。ここで指定する際に使うテクスチャ名はリソースパックのterrain_texture.jsonで定義したものです。

render_method(オプション)

テクスチャのレンダー方法を設定します。

設定できる種類は以下の通りです。

  • opaque
    • 透明な部分がないテクスチャに使用します。透明や半透明の部分が含まれていても不透明になって表示されます。
  • double_sided
    • バックフェースカリングを完全に無効にする。
  • blend
    • 透明な部分は透明に、不透明な部分は不透明に、半透明な部分は半透明にして表示されます。
  • alpha_test
    • 透明な部分は透明に、不透明な部分は不透明に、半透明な部分は不透明にして表示されます。

指定しない場合、デフォルトのopaqueが使用されます。

リソースパック内

次にリソースパック部分を作っていきます。

まずは、テクスチャを用意しましょう。今回は以下の画像を使用しています。

terrain_texture.json内のコード

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

texture_name(必須)

テクスチャの名前です。atlas.terrainを使用してください。動きません。

resource_pack_name(必須)

リソースパックの名前です。任意の文字列で大丈夫です。

padding(必須)

テクスチャの余白ですが、特に変更する必要がない項目です。

num_mip_levels(必須)

ミップマップレベルを設定します。ミップマップは遠いブロックのテクスチャの解像度を落として処理を軽くする設定です。デフォルトの4のままで大丈夫です。

texture_data(必須)

テクスチャのデータについて設定します。主にテクスチャ名とテクスチャ画像との紐付けを行います。

"texture_data": {
   "(ブロック名)": {
      "textures": "(テクスチャパス)"
   }
}

動作確認

今回作成したブロックはコマンドもしくはクリエイティブインベントリ内にあります。

この記事で追加したブロックのカテゴリーは「construction」を指定したので、クリエイティブインベントリ内では「構築」タブ内に入っているはずです。

コマンドで出す場合は以下のコマンドを打つと入手できます。

/give @s sample:block0

もし、ブロックがクリエイティブインベントリ内やコマンドで入手できない場合はブロックのコードが間違っている可能性があるので確認しなおしてみてください。

コンポーネントの追加

ここまで解説したブロックは何の機能も持たない普通のブロックですが、カスタムブロックにはコンポーネントを追加することで機能を追加することができます。

すべてのコンポーネントの書き方例を書くと多いので、簡単なブロックの摩擦と光源の設定を例とします。

ブロックの摩擦は0.0~0.9まで指定することができ、数字が大きいほど摩擦が大きくなります。デフォルトは0.4です。数字は小数のみ使用可能です。例えば0.1にするなら以下のように書きます。

"minecraft:friction": 0.1

光源は松明やシーランタンなどブロック自ら光を出しているブロックに使うコンポーネントです。0~15の数字で指定しすることができ、数字が大きいほど明るい光を放ちます。数字は整数のみ使用可能です。

"minecraft:light_emission": 15

これらの記述は、ビヘイビアパックのblocks内のjson、今回だとblock0.json内のcomponentsの中に追加します。追加したjsonは以下のとおりです。

{
    "format_version": "1.21.20",
    "minecraft:block": {
        "description": {
            "identifier": "sample:block0",
            "menu_category": {
                "category": "construction"
            }
        },
        "components": {
            "minecraft:geometry": "minecraft:geometry.full_block",
            "minecraft:material_instances": {
                "*": {
                    "texture": "block0",
                    "render_method": "opaque"
                }
            },
            "minecraft:friction": 0.1,
            "minecraft:light_emission": 15
        }
    }
}

書き直した状態で再度ワールドを開くと、ブロックが滑りやすくなり、発光するようになります。

その他の機能について

今回紹介したのは一部ですが、ブロックに使用することができるコンポーネントや設定は他にもたくさんあります。すべてのコンポーネントなどを確認するにはバニラデータ内の「documentation」内にあるhtmlファイルを各ブラウザで開くことで閲覧可能です。また、ウェブ上で閲覧する場合はMicrosoftのドキュメントを使用することができます。

ブロック名の翻訳

最後におまけ程度でブロックの翻訳について説明します。

ブロックはそのままの名前だと、「tile.[ブロックID].name」と表示されます。配布しない場合やプレイヤーがそのブロックを入手しない場合(ワールドの建築に使ったりダミーのブロックとして使ったりなど)はそのままの名前でも特に問題ないと思いますがプレイヤーが入手する際、デフォルトのままだとどんなブロックなのかがわかりにくくなります。そのため、ブロック名の翻訳を行う必要があります。

まずは、SampleRPフォルダ内に新しく「texts」という名前のフォルダを作成してください。

textsフォルダ内に「languages.json」と「ja_JP.lang」という名前のファイルを作成して、それぞれのファイルに以下のコードを記載してください。

languages.json内のコード

[
   "ja_JP"
]

ja_JP.lang内のコード

tile.sample:block0.name=基本のブロック

languages.jsonはこのアドオンがなんの言語に対応しているかを設定するファイルです。今回は日本語のみに対応させるので「ja_JP」と書きましたが英語にも対応させる場合は「en_US」も指定します。

マイクラ統合版に対応するすべての言語はmojang配布のバニラデータ内のlanguages.jsonファイルに記載されています。

ja_JP.langは日本語の場合になにを翻訳させるかの設定です。今回は作ったブロックを適応させたいので「tile.[ブロックID].name=[ブロックの翻訳名]」という形で記載しています。

これらの設定をしてからアドオンを読み込みなおすと以下の画像のように翻訳されています。

コメント

コメント通報