JSON UI の備忘録【統合版】

スポンサーリンク

統合版のJSONUIの備忘録です。
投稿者は初心者です。

随時更新するかもしれないし、しないかもしれない。

そもそも何

> JSON UIとは
マイクラのUIをJSON形式で定義したもの。
赤で囲まれたものは、すべてJSON UIで定義されていて、大きさや配置を変更することができる。
(しかし投稿者にそこまでの技術力はない。)

JSONUI%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE1.png
JSONUI%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE2.png
JSONUI%E3%81%A7%E5%AE%9A%E7%BE%A9%E3%81%95%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE3.png

> バニラのJSON UIはどこにある?
公式のリソースパック(resource_pack/ui)にファイルがある。
例えばタイトルやアクションバーは resource_pack/ui/hud_screen.json に定義されている。
ScriptAPIのアクションフォームやモーダルフォームは resource_pack/ui/server_form.json に定義されている。 

> 解説記事・動画
海外の方の解説動画 超わかりやすいのでおすすめ
アクションフォームの改造をしたい方は絶対見たほうがいいです。
https://www.youtube.com/playlist?list=PLu4XsMgGIrCqdU44JbWvgv1z_kt_ZpJyw

bedrock wikiの解説 入門だけど難しいのでまずは↑を見るべき
https://wiki.bedrock.dev/json-ui/json-ui-intro

JSON UIの構造

JSON UIの構造はHTMLのような階層構造になっている(多分)。
要素(親要素)の中に他の要素(子要素)を入れることで、UIの構造を作ることができる。

%E8%A6%AA%E8%A6%81%E7%B4%A0%E3%81%A8%E5%AD%90%E8%A6%81%E7%B4%A0.png

さらにあらかじめ定義された要素を継承し、新たな要素を作ることもできる。

主な要素は次のとおり
詳しい項目は → https://wiki.bedrock.dev/json-ui/json-ui-documentation

%E4%B8%BB%E3%81%AA%E8%A6%81%E7%B4%A0-5.png

UIの書き方(実例を見ながら)

JSON UI はJSON形式で書きます。

コードの通り、親要素(oya_panel)の中に、子要素(ko_panel)がある関係です。

// 親要素
"oya_panel": {
  "type": "panel", // 種類
  "size": [100, 100], // [横, 縦]
  "controls": [ // 子要素を入れる配列
    {
      // 子要素
      "ko_panel": {
        "type": "panel",
        "size": [60, 60],
        "anchor_from": "center", // 中心に配置
        "anchor_to": "center" // 中心に配置
      }
    }
  ]
}
UI%E3%81%AE%E6%A7%8B%E9%80%A01-1.png

stack_panelを用いた場合のUIです。
stack_panelは子要素を水平または垂直に並べることができます。

// 親要素
"oya_stack_panel": {
  "type": "stack_panel",
  "size": [100, 100], // [横, 縦]
  "orientation": "vertical", // 垂直に並べる
  "controls": [ // 子要素を入れる配列
    {
      "ko_panel_1": { // 子要素
        "type": "panel",
        "size": ["100%", 20] // %: 親要素を基準にパーセント
      }
    },
    {
      "ko_panel_2": { // 子要素
        "type": "panel",
        "size": ["100%", 20]
      }
    },
    {
      "ko_panel_3": { // 子要素
        "type": "panel",
        "size": ["100%", 20]
      }
    }
  ]
}
UI%E3%81%AE%E6%A7%8B%E9%80%A02-5.png

UIの継承

JSON UIでは、既に定義されたUIを継承して、新しく要素を作ることができます。
例えば、バニラのアクションフォームの枠は common_dialogs.main_panel_no_buttons を継承して作られています。

継承の書き方

"新しい要素名@継承元の名前空間.継承元の要素名": {}

「名前空間」とはjsonファイルの上のほうで定義されているやつです。(一意)
カスタムのnamespaceを作る場合は、_ui_defs.json で定義する必要があります。詳しくはbedrock wiki

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2025-04-14-024843.png
継承の例
{
  "namespace": "saba_form", // カスタムの名前空間

  "oya_panel": {
    "type": "panel",
    "size": [100, 100], //[横, 縦]
    "controls": [ // 子要素
      {
        "ko_panel": {
          "type": "panel",
          "size": [60, 60],
          "anchor_from": "center",
          "anchor_to": "center"
        }
      }
    ]
  },

  // saba_form の oya_panel を継承し、新たに big_oya_panel を定義する
  "big_oya_panel@saba_form.oya_panel": {
    "size": [200, 200] // サイズを200, 200に変更する
  }
}
UI%E3%81%AE%E7%B6%99%E6%89%BF.png

やる気があれば続きを書きます。

UIで変数を使う

JSON UIでは、変数を定義することができます。

変数は先頭に「$」を付けて表します。

{
  "namespace": "saba_form",

  "oya_panel": {
    // 変数を定義する
    // "$変数名|default": 初期値
    "$oya_size|default": [100, 100], // 親のサイズ
    "$ko_size|default": [60, 60], // 子のサイズ

    "type": "panel",
    "size": "$oya_size", // 変数を代入
    "controls": [
      {
        "ko_panel": {
          "type": "panel",
          "size": "$ko_size", // 変数を代入
          "anchor_from": "center",
          "anchor_to": "center"
        }
      }
    ]
  },

  // oya_panel を継承して custom_oya_panel を作る
  "custom_oya_panel@saba_form.oya_panel": {
    "$oya_size": [150, 150], // 変数に代入する
    "$ko_size": [120, 120]
  }
}
%E5%A4%89%E6%95%B0%E3%81%A7%E7%B6%99%E6%89%BF-2.png
※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

コメント通報