manifestの新しい書き方 v3を使ってみよう

はじめに

少し前のアップデート(おそらく、1.21.110?)からパックのmanifestのformat_versionに3を指定できるようになりました。この記事では、新しい記述方式であるmanifestのバージョン3について解説しています。

※中級者向けの説明にしていますので、アドオン制作についてある程度知識がある前提で進めていきます。また、この記事はマイクラ統合版1.21.130の時に作成された内容です。

バージョン3でできるようになったこと

今までのマニフェストでは基本的に、パックの設定をプレイヤーが設定(調整)することができませんでした。一応、サブパック機能を使って疑似的にできましたが、それでも詳細な設定をすることはできませんでした。

最近のアドオンでは、パックの設定用のアイテムを持った状態でワールドにスポーンし、アイテムを使うことでscriptAPIのフォームを使って設定ができるものが増えてきました。この方法は配布マップなどでは便利なのですが、サバイバルを行うときには少し不便に感じます。設定を変えるために、アイテムが必要なので、インベントリを1スロット分埋めてしまったり、無くすと作る必要が出てきます。(低コストのものがほとんどですが…)

RealismCraftのVFX設定のフォーム
参考画像:RealismCraftのVFX設定のフォーム

しかし、マニフェストのV3では新しくパックの設定を追加できるようになり、今までの煩わしさが無くなりました。そして、様々な設定を詳細に行えるようにラベル(テキスト)、トグル、スライダー、ドロップダウンの機能があります。

そして、ここで設定した項目はビヘイビアーパックの場合はscriptAPIで、リソースパックの場合はmolangで値を取得することができます。

バージョン3の使い方

まず、📝manifest.jsonのformat_versionを3に変更します。(リソースパック、ビヘイビアーパックどちらも可能)

"format_version": 3,

次に、バージョンの書き方を変更します。今までは、配列で書いていましたが、バージョン3からはstring型になりました。なので、[ 1, 0, 0 ]の場合は”1.0.0″と書くようになります。headerはもちろん、modulesのバージョンの書き方も忘れずに変更してください。

"header": {
    "name": "アドオン名",
    "description": "アドオンの説明",
    "uuid": "4e1adcc6-0352-4a42-93a6-54532a7f4f3f",
    "version": "1.0.0",
    "min_engine_version": "1.21.130"
},
"modules": [
    {
        "type": "resources",
        "uuid": "a195ebbc-050b-4b7e-baa6-f52de0f31e84",
        "version": "1.0.0"
    }
],

これで、フォーマットバージョン3の書き方のマニフェストができました。ここからは、新しく作れるようになった設定画面を作っていきます。

パックの設定画面の作り方

最初のほうでも少し説明しましたが、パックの設定画面には、現状、ラベル(テキスト)、トグル、スライダー、ドロップダウンのみです。今後のアップデートで機能は増えるので、おそらく、画像の挿入や区切り線などが使えるようになると予想します。

設定画面を作るには、まず、headerやmodulesなどと同じ階層にsettingsを設置します。このsettingsの中にいろんな要素を組み込んでいきます。

{
    "format_version": 3,
    "header": {
        // 省略
    },
    "modules": [
        // 省略
    ],
    "settings": [
        
    ]
}

ラベル(テキスト)の作成

一番、シンプルな文字を表示させるだけの要素です。

typeは要素のタイプです。labelが文字を表示させる要素です。
textはその要素に表示させる文字列です。もちろん、改行もできますので、いつも通り\nを使ってください。

{
    "type": "label",
    "text": "テスト"
}

トグルの作成

トグルはオン・オフを設定するときに使う要素です。

typeはtoggleを指定します。
textはその要素に表示させる文字列です。トグルの右横に表示されます。
nameはこの要素のIDです。ScriptAPIやmolangで値を取得するときに使います。”名前空間:要素名”の書き方をします。
defaultは初期値です。trueかfalseのどちらかを書きます。

{
    "type": "toggle",
    "text": "トグルの設定",
    "name": "practice:toggle_setting",
    "default": true
}

スライダーの作成

スライダーは数値の設定に適した要素です。

typeはsliderを指定します。
textとnameとdefaultは他の要素と同じです。
minには設定できる値の最小値を指定します。
maxには設定できる値の最大値を指定します。
stepには設定する値を何刻みで設定できるかを指定します。

{
    "type": "slider",
    "text": "スライダーの設定",
    "name": "practice:slider_setting",
    "min": 1,
    "max": 3,
    "step": 1,
    "default": 1
}

ドロップダウンの作成

ドロップダウンは文字列の設定に適した要素です。

typeはdropdownを指定します。
textとnameとdefaultは他の要素と同じです。
optionsには設定する値を指定します。型が配列になります。
optionsの中のnameに選択肢のID、textに表示する文字列を指定します。

{
    "type": "dropdown",
    "text": "ドロップダウンの設定",
    "name": "practice:dropdown_setting",
    "options": [
        {
            "name": "one",
            "text": "One"
        },
        {
            "name": "two",
            "text": "Two"
        }
    ],
    "default": "one"
}

完成形

すべての要素を盛り込むとこのようになります。

{
    "format_version": 3,
    "header": {
        "name": "練習用アドオンRP",
        "description": "練習用アドオンRPの説明",
        "uuid": "4e1adcc6-0352-4a42-93a6-54532a7f4f3f",
        "version": "1.0.0",
        "min_engine_version": "1.21.130"
    },
    "modules": [
        {
            "type": "resources",
            "uuid": "a195ebbc-050b-4b7e-baa6-f52de0f31e84",
            "version": "1.0.0"
        }
    ],
    "settings": [
        {
            "type": "label",
            "text": "テスト"
        },
        {
            "type": "toggle",
            "text": "トグルの設定",
            "name": "practice:toggle_setting",
            "default": true
        },
        {
            "type": "slider",
            "text": "スライダーの設定",
            "name": "practice:slider_setting",
            "min": 1,
            "max": 3,
            "step": 1,
            "default": 1
        },
        {
            "type": "dropdown",
            "text": "ドロップダウンの設定",
            "name": "practice:dropdown_setting",
            "options": [
                {
                    "name": "one",
                    "text": "One"
                },
                {
                    "name": "two",
                    "text": "Two"
                }
            ],
            "default": "one"
        }
    ]
}

設定した値の取得

先ほど作成した、トグル、スライダー、ドロップダウンはプレイヤーが設定した値を取得して条件分けを行うことができます。ビヘイビアーパックとリソースパックでは取得方法が異なるので、それぞれのやり方を説明します。

リソースパック

リソースパックの場合は、molangを使って、値を取得します。書き方は以下の通りです。

query.is_pack_setting_enabled('トグル名')  // トグルの場合
query.get_pack_setting('スライダー名')  // スライダーの場合
query.is_pack_setting_enabled('ドロップダウン名', '設定値')  // ドロップダウンの場合

ビヘイビアーパック

ビヘイビアーパックの場合は、scriptAPIを使って、値を取得します。まだ、プレリリース段階の機能のため、ベータAPIが必要です。詳細は以下のリンク先で確認してください。

minecraft/server.World Class
Contents of the @minecraft/server.World class.

さいごに

この機能はまだまだ試験段階の機能のため、できることは限られていますが、パック(アドオン)の概要や説明など、今までmanifest内のheaderのdescriptionに書いていた内容をこっちに書くことで、見やすくなったり、表示できる文字数が増えたりとメリットが多いかと思います。

ちなみに、このUIの上部に表示される「練習用アドオンRP 設定」は自動で、「[アドオン名] 設定」と表示されます。この部分の翻訳キーはresourcePack.packSettingsTitleです。翻訳の文字列を変えてあげると、アドオンの詳細画面のようにすることもできます。