環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

【Minecraftのアドオンを作る】#4 オリジナルブロックを作成する

【Minecraftのアドオンを作る】#4 オリジナルブロックを作成する

振り返り

はじめに注意

本シリーズは、マインクラフト(統合版)のリモートマルチサーバー上にて、アドオンを動作させる事を目的としたシリーズです。手順の説明もそれに準じておりますのでご了承ください。

前回までの振り返り

#1ではリソースパック、#2ではビヘイビアーパックの超基礎を学び、#3ではScriptAPIを使ってゲーム内の操作を行う方法について触れてきました。今回はオリジナルブロックの追加をやってみたいと思います。

前提

開発環境が整っていること!作成したアドオンのサーバーへの適用方法がわかること!(#1から#3でやってきたので)

わたしの開発環境は以下の通りです。

  • VSCode
  • node.js(v18.12.1)

オリジナルブロックを追加する!

ディレクトリ作成&モジュール準備

↓で登場する「behaviors」「resources」というディレクトリは、gitで管理するために付けたディレクトリですので特に意味はありません。実際にサーバーに配置する際には、「behaviors/my_new_block」を「development_behavior_packs」ディレクトリに、「resources/my_new_block」をそれぞれ、「development_resource_packs」ディレクトリに配置することになります。

先に、完成形のファイルをおいておきます。

https://github.com/supilog/minecraft_addons/tree/main/behaviors/my_new_block

https://github.com/supilog/minecraft_addons/tree/main/resources/my_new_block

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# ディレクトリ作成
$ mkdir -p behaviors/my_new_block/blocks
$ mkdir -p behaviors/my_new_block/scripts
$ mkdir -p resources/my_new_block/textures/blocks
$ mkdir -p resources/my_new_block/texts
# manifest.json
$ touch behaviors/my_new_block/manifest.json
$ touch resources/my_new_block/manifest.json
# main.js
$ touch behaviors/my_new_block/scripts/main.js
# モジュールインストール
$ cd behaviors/my_new_block
$ npm i @minecraft/server
$ npm i @minecraft/server-ui
# ディレクトリ作成 $ mkdir -p behaviors/my_new_block/blocks $ mkdir -p behaviors/my_new_block/scripts $ mkdir -p resources/my_new_block/textures/blocks $ mkdir -p resources/my_new_block/texts # manifest.json $ touch behaviors/my_new_block/manifest.json $ touch resources/my_new_block/manifest.json # main.js $ touch behaviors/my_new_block/scripts/main.js # モジュールインストール $ cd behaviors/my_new_block $ npm i @minecraft/server $ npm i @minecraft/server-ui
# ディレクトリ作成
$ mkdir -p behaviors/my_new_block/blocks
$ mkdir -p behaviors/my_new_block/scripts
$ mkdir -p resources/my_new_block/textures/blocks
$ mkdir -p resources/my_new_block/texts

# manifest.json
$ touch behaviors/my_new_block/manifest.json
$ touch resources/my_new_block/manifest.json

# main.js
$ touch behaviors/my_new_block/scripts/main.js

# モジュールインストール
$ cd behaviors/my_new_block
$ npm i @minecraft/server
$ npm i @minecraft/server-ui

behaviors/my_new_block/manifest.json

{
    "format_version": 2,
    "header": {
        "name": "オリジナルブロック追加",
        "description": "オリジナルブロック追加のアドオンです",
        "uuid": "0e3ce870-910c-4e5d-8501-b9df5d6f357a",
        "version": [
            1,
            0,
            0
        ],
        "min_engine_version": [
            1,
            21,
            84
        ]
    },
    "modules": [
        {
            "type": "script",
            "language": "javascript",
            "uuid": "36dc6b5b-5f05-48b9-b8ac-d71894ebf40d",
            "entry": "scripts/main.js",
            "version": [
                0,
                1,
                0
            ]
        }
    ],
    "capabilities": [
        "script_eval"
    ],
    "dependencies": [
        {
            "module_name": "@minecraft/server",
            "version": "1.19.0"
        },
        {
            "module_name": "@minecraft/server-ui",
            "version": "1.3.0"
        },
        {
            "uuid": "db831584-4a38-4eb1-bb47-d687df0f73fe",
            "version": [
                1,
                0,
                0
            ]
        }
    ]
}

resources/my_new_block/manifest.json

{
    "format_version": 2,
    "header": {
        "name": "オリジナルブロック追加",
        "description": "オリジナルブロック追加のアドオンです",
        "uuid": "db831584-4a38-4eb1-bb47-d687df0f73fe",
        "version": [
            1,
            0,
            0
        ],
        "min_engine_version": [
            1,
            21,
            84
        ]
    },
    "modules": [
        {
            "description": "オリジナルブロック追加のアドオンです",
            "type": "resources",
            "uuid": "2102d596-7e4c-43b9-ad43-f8e2e7875762",
            "version": [
                1,
                0,
                0
            ]
        }
    ],
    "dependencies": [
        {
            "uuid": "0e3ce870-910c-4e5d-8501-b9df5d6f357a",
            "version": [
                1,
                0,
                0
            ]
        }
    ]
}

behaviors/my_new_block/blocks/supilog_block.json

blocksディレクトリにjsonファイルを配置します。

{
    "format_version": "1.20.0",
    "minecraft:block": {
    "description": {
        "identifier": "supilog:sample_block",
        "menu_category": {
            "category": "construction"
        }
    },
    "components": {

        }
    }
}

identifierには、”名前空間:ブロック名”を命名する必要があるようなので、名前空間をsupilog、ブロック名をsample_blockとしました。

resources/my_new_block/texts/ja_JP.lang

textsディレクトリ以下にja_JP.langファイルを作成します。デフォルトだと、ゲーム内でのアイテム名に”identifier”が適用されてしまうようなので、翻訳テキストを用意しておきます。

tile.supilog:sample_block.name=サンプルブロック

resources/my_new_block/blocks.json

続いてテクスチャを定義していきます。

{
    "format_version":"1.20.0",
    "supilog:sample_block" : {
         "sound" : "stone",
         "textures" : "sample_block"
      }
}

resources/my_new_block/textures/terrain_texture.json

ここでは、”sample_block”に使用する画像を指定しています。(たぶんw)

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

resources/my_new_block/textures/blocks/sample_block.png

ここに16×16の画像を配置しました。配置した画像はこんな感じ。

準備するものはこれで揃ったはずです。

配置&テスト

これまでと同様の手順ですが、resources/my_new_blockをディレクトリごと
development_resource_packsに配置。behaviors/my_new_blockを
development_behavior_packsに配置します。

それぞれ有効化するために、world_behavior_packs.jsonとworld_resource_packs.jsonに追記をします。

worlds/ワールド名/world_behavior_packs.json

manifest.jsonのheaderで指定したuuidとversionを記述します。今回追加

[
         {
                 "pack_id" : "0e3ce870-910c-4e5d-8501-b9df5d6f357a",  
                 "version" : [1, 0, 0]
         }
]

worlds/ワールド名/world_resource_packs.json

こちらも、manifest.jsonのheaderで指定したuuidとversionを記述します。

[
         {
                 "pack_id" : "db831584-4a38-4eb1-bb47-d687df0f73fe",
                 "version" : [1, 0, 0]
         }
]

アプリ確認

さて、サーバーを再起動して確認してみます。ゲームモードはクリエイティブに変更しておきました。

オリジナルブロックが無事に設置できました。

1点だけ注意がありまして、現在アドオンを配置するときに、development_resource_packs、development_behavior_packsに配置していますが、”development”に配置すると、アイテム名の日本語化はうまく動作しませんでした。resource_packsに配置してみると、ちゃんと日本語化されたので、まぁテスト中に関しては、アイテム名が日本語化されていなくても気にしなくて良いかと思います。

まとめ

ただのブロックではあるけれど、オリジナルのブロックを追加できたのは、大いなる進歩です。立体的なブロックにも挑戦してみたいんですが、3Dモデリングしないといけないですよねぇ・・。はたして私に出来るのでしょうか。

それでは、また次の回でお会いしましょう。