向きのあるブロックの追加

スポンサーリンク

この記事の目的

この記事では、「向き」があるブロックの追加方法について解説しています。ブロック追加の応用的な内容となります。「ブロックの追加(基礎編)」を先にお読みください。Minecraftにはかまどや原木のようにプレイヤーが向いている方向によって向きが変わるブロックがあります。Minecraftには向きがあるブロックは大きくわけて4種類あります。

  • 3方向のブロック
    • 原木ブロックなど
  • 4方向のブロック
    • かまどや書見台など
  • 6方向のブロック
    • ピストンやドロッパーなど
  • 8方向のブロック
    • モブの頭や看板など

このうち今回、解説するのは4方向、6方向のブロックです。3方向のブロックに関しては、6方向のブロックの仕組みを理解すると、応用して作ることができます。8方向のブロックに関してはマイクラ統合版1.21.40時点ではブロックの機能以外にも使用しないといけない機能がありますので今回の解説からは省きます。また、「ブロックの追加(基礎編)」で既に解説した機能の解説は省いていますので、わからない箇所はこちらを確認してください。

今回作成するブロックのIDは以下のようにしています。

  • 4方向のブロック(sample:block_direction_4)
  • 6方向のブロック(sample:block_direction_6)

ビヘイビアーパック

まずは、追加するブロックそれぞれのファイルを作成していきます。「📁blocks」内にファイルを作成していきます。この記事ではそれぞれ以下の名前にしています。

  • 4方向のブロック:block_direction_4.json
  • 6方向のブロック:block_direction_6.json

4方向のブロック

4方向のブロックではこのようなブロックを追加します。

「📝block_direction_4.json」内に以下のコードを書いてください。

{
    "format_version": "1.21.40",
    "minecraft:block": {
        "description": {
            "identifier": "sample:block_direction_4",
            "menu_category": {
                "category": "construction"
            },
            "traits": {
                "minecraft:placement_direction": {
                    "enabled_states": [ "minecraft:cardinal_direction" ]
                }
            }
        },
        "components": {
            "minecraft:geometry": "minecraft:geometry.full_block",
            "minecraft:material_instances": {
                "up": {
                    "texture": "block_direction_4",
                    "render_method": "opaque"
                },
                "*": {
                    "texture": "white",
                    "render_method": "opaque"
                }
            }
        },
        "permutations": [
            {
                "condition": "q.block_state('minecraft:cardinal_direction') == 'north'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 0, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:cardinal_direction') == 'west'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 90, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:cardinal_direction') == 'south'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 180, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:cardinal_direction') == 'east'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, -90, 0 ] }
                }
            }
        ]
    }
}

6方向のブロック

6方向のブロックではこのようなブロックを追加します。

「📝block_direction_6.json」内に以下のコードを書いてください。

{
    "format_version": "1.21.40",
    "minecraft:block": {
        "description": {
            "identifier": "sample:block_direction_6",
            "menu_category": {
                "category": "construction"
            },
            "traits": {
                "minecraft:placement_direction": {
                    "enabled_states": [ "minecraft:cardinal_direction", "minecraft:facing_direction" ]
                }
            }
        },
        "components": {
            "minecraft:geometry": "minecraft:geometry.full_block",
            "minecraft:material_instances": {
                "south": {
                    "texture": "block_direction_6",
                    "render_method": "opaque"
                },
                "*": {
                    "texture": "white",
                    "render_method": "opaque"
                }
            }
        },
        "permutations": [
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'north'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 0, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'west'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 90, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'south'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, 180, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'east'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 0, -90, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'up'",
                "components": {
                    "minecraft:transformation": { "rotation": [ 90, 0, 0 ] }
                }
            },
            {
                "condition": "q.block_state('minecraft:facing_direction') == 'down'",
                "components": {
                    "minecraft:transformation": { "rotation": [ -90, 0, 0 ] }
                }
            }
        ]
    }
}

解説

それぞれのブロックのコードを解説していきます。

4方向のブロック

4方向のブロックでは、「description」内の「traits」に以下のコードがあります。

「traits」はそのブロックの特徴を指定するような場所です。コンポーネントとの違いとしては、「traits」では指定した機能について、そのブロック自体の情報を取得することができます。この情報を取得することで、ブロックの回転に関する条件分けを実現しています。

ここで使用している「minecraft:placement_direction」はブロックを設置する際、プレイヤーがどの方向を向いているのかを取得しています。その中にある、「enable_states」で「minecraft:cardinal_direction」を指定してます。これは、プレイヤーが「north,east,south,west」の4種類の値を取得できます。そのため、この機能を4方向のブロックに使用しています。

"traits": {
    "minecraft:placement_direction": {
        "enabled_states": [ "minecraft:cardinal_direction" ]
    }
}

ここで取得した値は、「permutations」内の「condition」を使用して条件分けを行っています。「permutations」とは、1つのブロックのデータ内に条件分けを行い、コンポーネントを分けることができる機能です。ここでは、ブロックを回転させるために使用していますが、その他にもテクスチャを変更したり、当たり判定の大きさを変えたりとすべてのコンポーネントを変更することができます。

以下は、「permutations」部分ですが、「condition」に書かれている「q.block_state(‘minecraft:cardinal_direction’)」というところに、「minecraft:cardinal_direction」で取得した値が格納されます。

「==」とは、この記号の前の値が、後ろにある値と同じときになにかをするというような条件を表す記号です。この後ろにある値を「north,west,south,east」すべてを書くことにより、4方向それぞれを向いているときに行う処理を分けています。

今回の内容では、「north」のときにコンポーネントの「minecraft:transformation」内にある「rotation」をx,y,zそれぞれ0にする。という設定を行っています。「west」の場合はyを90に回転させています。

"permutations": [
    {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'north'",
        "components": {
            "minecraft:transformation": { "rotation": [ 0, 0, 0 ] }
        }
    },
    {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'west'",
        "components": {
            "minecraft:transformation": { "rotation": [ 0, 90, 0 ] }
        }
    },
    {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'south'",
        "components": {
            "minecraft:transformation": { "rotation": [ 0, 180, 0 ] }
        }
    },
    {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'east'",
        "components": {
            "minecraft:transformation": { "rotation": [ 0, -90, 0 ] }
        }
    }
]

6方向のブロック

6方向のブロックの構造はほとんど、4方向のブロックと同じです。違う点のみ解説します。

6方向のブロックでは「minecraft:facing_direction」を使用しています。こちらは、「minecraft:cardinal_direction」とは違い、「north,west,south,east,up,down」の6方向の値を取ることができます。「permutations」の中では、4方向のブロックと同じようにしていますが、「condition」での条件文が「q.block_state(‘minecraft:facing_direction’)」になっていることに注意してください。

リソースパック

リソースパックの内容は一般的なブロックと同じやり方です。ここでは、ファイル名とコード部分だけを紹介するので、詳細を知りたい方は「ブロックの追加(基礎編)」をご覧ください。

terrain_texture.json

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

テクスチャファイルは「textures」で指定した場所に置いてください。

コメント

コメント通報