Minecraft(統合版) アルファベットブロックのアドオンを作ろう!

minecraft

マインクラフト統合版のアドオンを用いて、アルファベットが表示されるブロックを作っていきたいと思います。建物を建築する際、大きな文字が使いたくなるときってありますよね?そういう時に便利なので作成してみました。

動作環境はMinecraft統合版 v1.21.51になります。

リソースパック側の開発

フォルダやmanifestの用意

今回は単純なブロックとなるため、Geometoryを独自実装する必要はありません。次のようなフォルダ階層になります。

リソースパック
  texts
    ja_JP.lang
 textures
    blocks
      テクスチャーファイル
    1
  manifest.json
  pack_icon.png

manifest.jsonについてはシンプルなリソースパックの記載になります。

{
    "format_version": 2,
    "header": {
      "description": "ma_character resource pack",
      "name": "ma_character",
      "uuid": "[uuidを指定]",
      "min_engine_version": [
        1,
        21,
        10
      ],
      "version": [
        1,
        0,
        0
      ]
    },
    "modules": [
      {
        "type": "resources",
        "uuid": "[uuidを指定]",
        "version": [
          1,
          0,
          0
        ]
      }
    ]
  }

テクスチャーの用意

今回は単純なブロックとなるため、モデルを独自実装する必要はありません。既存で定義されている”minecraft:geometry.full_block”を利用していきます。なので、リソースパック側で必要となるのは、テキスチャーになります。

マインクラフト統合版のVanilla Resource Packからコンクリート白のテクスチャーを持ってきます。これをベースとして進めます。「”resource_pack\textures\blocks\concrete_white.png”」になります。これはこれで使うので「concrete_white_default.png」としてtxtures\blocksの中に入れておきましょう。

「concrete_white_default.png」をベースとして、アルファベットのテキスチャーを作成していきましょう。16×16pxと大きさが指定されているのであまり深く考えずに、黒のみでポチポチ作成していきましょう。

terrain_texture.json

「terrain_texture.json」のファイルにてテキスチャーの定義を作成していきます。

{
    "texture_name": "atlas.terrain",
    "resource_pack_name": "ma_character_RP",
    "padding": 8,
    "num_mip_levels": 4,
    "texture_data": {
      "concrete_white_default": {
        "textures": "textures/blocks/concrete_white_default"
      },
      "concrete_white_a": {
        "textures": "textures/blocks/concrete_white_a"
      }
   ・
   ・
   ・
    }
  }

「texture_data」という項目にて、テクスチャーの名前とファイルの場所を定義していきます。

ja_JP.lang

「ja_JP.lang」ファイルでは、各ブロックやエンティティなどに対して、日本語での名称を付けていきます。

tile.ma_character:concrete_white_a.name=白いコンクリートブロックA
tile.ma_character:concrete_white_b.name=白いコンクリートブロックB
・
・
・

ビヘイビアパック側の開発

ビヘイビアパック側は少しだけ考えなければいけないことがあります。まず基本としてブロックのjsonファイルを作成し、Geometoryやテキスチャーの定義を記載します。

{ 
  "format_version": "1.21.10", 
  "minecraft:block": { 
    "description": { 
      "identifier": "ma_character:concrete_white_a",
      "menu_category": {
                "category": "construction",
                "group": "itemGroup.name.concrete"
      },
    }, 
    
    "components": { 
      "minecraft:geometry": "minecraft:geometry.full_block",
      "minecraft:map_color": "#FFFFFF",
      "minecraft:light_emission": 0,
      "minecraft:material_instances": {
        "*": {
            "texture": "concrete_white_a",
            "render_method": "opaque"
        }
      }
    }
  } 
}

「”identifier”: “ma_character:concrete_white_a”」にて、アルファベットAの白いコンクリートブロックを定義します。「menu_category」では、構築タブに属させコンクリートブロックのグループに表示させるようにしています。

「”components”」では以下を定義しています。

  • “minecraft:geometry”:Geometoryとして、既定のフルブロックのモデルを使うように設定
  • “minecraft:map_color”:地図上の色は白
  • “minecraft:light_emission”:光源は0(光らない)
  • “minecraft:material_instances”:すべての面にアルファベットAのテクスチャーを使用(テクスチャーは不透明)

この状態でアドオンを動かしてみるとどうなるか。

ご想像のとおりこうなります。これでは使い勝手がわるいです。やはり設置した正面だけに文字は表示させたいですよね。なので、「minecraft:material_instances」の部分を少し変えます。

      "minecraft:material_instances": {
        "north": {
            "texture": "concrete_white_a",
            "render_method": "opaque"
        },
        "*": {
            "texture": "concrete_white_default",
            "render_method": "opaque"
        }
      }

北方向の面にはアルファベットのAをそれ以外はデフォルトの白を表示するようにします。これでうまくいくように思うかもしれませんが、まだ足りません。

このようにどの方向からブロックを設置しても、Aが表示されるのがすべて北側になってしまうのです。ではこれをどうやって回避するのか。「minecraft:cardinal_direction」というものを利用します。

    "description": { 
      "identifier": "ma_character:concrete_white_a",
      "menu_category": {
                "category": "construction",
                "group": "itemGroup.name.concrete"
            },
      "traits": {
        "minecraft:placement_direction": {
          "enabled_states": ["minecraft:cardinal_direction"]
        }
      }
    }, 
・
・
・
    "permutations": [
      {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'north' ",
        "components": {
          "minecraft:transformation": {
            "rotation": [0,180,0]
          }
        }
      },
      {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'south' ",
        "components": {
          "minecraft:transformation": {
            "rotation": [0,0,0]
          }
        }
      },
      {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'east' ",
        "components": {
          "minecraft:transformation": {
            "rotation": [0,90,0]
          }
        }
      },
      {
        "condition": "q.block_state('minecraft:cardinal_direction') == 'west' ",
        "components": {
          "minecraft:transformation": {
            "rotation": [0,270,0]
          }
        }
      }
    ]

“description”の”traits”にて、”minecraft:cardinal_direction”を設定にします。これを指定することで、このブロックを設定した際の向きを取得することができるようになります。あとは”permutations”にて方向ごとに条件分岐を行い、”minecraft:transformation”にてブロックを回転させています。

ここまで行うと目的のように向いた方向にブロックを設置することができます。ただ、実はまだ問題があります。これについては解決方法がわかっていません。

アイテム欄の表示が逆を向いてしまうようで、どのアルファベットなのかがわからないのです。試しに北を南を逆にして作成しても同じになります。

一応、Documentでは「minecraft:item_visual」というものがありそれでできそうなんですが、「Experimental toggles required: Upcoming Creator Features」の記載があるんですよね。

とりあえず、いったんは北南にアルファベットのテキスチャーを張って逃げています。

      "minecraft:material_instances": {
        "north": {
            "texture": "concrete_white_a",
            "render_method": "opaque"
        },
        "south": {
            "texture": "concrete_white_a",
            "render_method": "opaque"
        },
        "*": {
            "texture": "concrete_white_default",
            "render_method": "opaque"
        }
      }

完成品

ちゃんとした実装ができてはいないのですが、今回作成したアドオンはこちらです。。

利用については自己責任でお願いします。導入により何か不利益が発生してもこちらは責任は取りません。また、個人利用についてのみ許可します。再配布などはおやめください。

管理者
管理者

テクスチャーさえ作れば、もっと多くの記号や文字も使えるようになるので、建築の幅が増してなかなかいいかも。

コメント

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