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

振り返り
はじめに注意
本シリーズは、マインクラフト(統合版)のリモートマルチサーバー上にて、アドオンを動作させる事を目的としたシリーズです。手順の説明もそれに準じておりますのでご了承ください。
前回までの振り返り
#1ではリソースパック、#2ではビヘイビアーパックの超基礎を学び、#3ではScriptAPIを使ってゲーム内の操作を行う方法について触れてきました。今回はオリジナルブロックの追加をやってみたいと思います。
前提
開発環境が整っていること!作成したアドオンのサーバーへの適用方法がわかること!(#1から#3でやってきたので)
わたしの開発環境は以下の通りです。
- VSCode
- node.js(v18.12.1)
目次 [hide]
- 1 振り返り
- 2 オリジナルブロックを追加する!
- 2.1 ディレクトリ作成&モジュール準備
- 2.2 behaviors/my_new_block/manifest.json
- 2.3 resources/my_new_block/manifest.json
- 2.4 behaviors/my_new_block/blocks/supilog_block.json
- 2.5 resources/my_new_block/texts/ja_JP.lang
- 2.6 resources/my_new_block/blocks.json
- 2.7 resources/my_new_block/textures/terrain_texture.json
- 2.8 resources/my_new_block/textures/blocks/sample_block.png
- 3 配置&テスト
- 4 まとめ
オリジナルブロックを追加する!
ディレクトリ作成&モジュール準備
↓で登場する「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
# ディレクトリ作成 $ 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モデリングしないといけないですよねぇ・・。はたして私に出来るのでしょうか。
それでは、また次の回でお会いしましょう。