DisplayUIとは、ディスプレイエンティティ(minecraft:item_display,minecraft:block_display,minecraft:text_display)を使って、ゲーム内で使えるGUIを作れるデータパック。
| 用語 | 意味 |
|---|---|
| ディスプレイUIエンティティ | ディスプレイを構成するエンティティのまとまり、およびディスプレイUIを見かけ上ひとつのエンティティとして扱うためのくくり。狭義には、一番下層にいるディスプレイエンティティを乗せたエンティティのこと。 |
| ディスプレイ | レイヤーのまとまりのこと。設定画面や対話GUI、魔法選択GUIなど、目的に準じた大きなくくり。 |
| オブジェクト | ディスプレイエンティティにボタンなどの機能を持たせたもの。あるいはユニットのまとまりのこと。 |
| レイヤー | オブジェクトのまとまりのこと。表示非表示の切り替えができたりする。キーボードみたいに閉じたり開いたりさせたいものや、オブジェクトのまとまりをわかりやすくしておきたいときに使う。 |
| ユニット | ディスプレイエンティティそのもの。 |
| グループ | オブジェクトをまとめたオブジェクト。id(group.id)で紐づけされる。 |
| イベント | ユニットをクリックしたときやホバーしたときなどに実行されるコマンドのこと。あらかじめユニットに設定したデータを参照して様々なイベントを行うことができる。 |
| コンパイル | ユーザーが設定したデータを、内部的に使用しやすいデータに変換すること。 |
| オペレーター/操作者 | ディスプレイを操作できるプレイヤーのこと。 |
ストレージのdisplay_ui:design displayにディスプレイのデザインデータを設定する。
data modify storage display_ui:design displays.sample set value {\
operator:"everyone",\
billboard:"fixed", view_range:10, area:[3f,3f],\
from_back:0b, negative_ray:0b,\
pos:[0f,0f,0f],\
cursor:{type:"player_head",size:[0.2f,0.2f,0.001f],offset:[0f,0.05f,0.05f],duration:1,nbt:{transformation:{right_rotation:{axis:[0f,1f,0f],angle:3.14f}}}},\
objects:[\
{type:"interaction",width:2f,height:1f},\
{type:"interaction",width:2f,height:-1f},\
{type:"item", pos:[0f, 0.00f, 0.00f], size:[2f,2f,0.001f], tags:["item"], item:{id:"black_stained_glass_pane"}},\
{type:"button_bg_d", pos:[-0.9f,0.9f,0.001f], width:0.24f, height:0.24f, tags:["x"], text:{text:"☓",color:"white",bold:true,font:"uniform"},events:{click:"function display_ui:kill"}},\
{type:"button_push_a", pos:[-0.5f,0.6f,0.001f], element:{type:"text",text:{text:"DONE",color:"white",bold:true,font:"uniform"}}},\
{type:"toggle_push_a", pos:[0.5f,0.6f,0.001f],value:{type:"owner_score","objective":"dpuS."},element:{type:"text",text:{text:"DONE",color:"white",bold:true,font:"uniform"}}},\
{type:"slot_a", pos:[0f,0.6f,0.001f]},\
{type:"int_input_step",pos:[0f,0.2f,0.002f],value:{type:storage,"path":"a","namespace":"debug:",min:-99999,max:99999},tags:["test"]},\
{type:"list_input", pos:[0f,-0.2f,0.002f],value:{list:["steve","alex","rusk","jeb"]}},\
{type:"layer",name:"layer_1", pos:[0f,-0.7f,0.001f], mode:"open",\
open:{animation:[{scale:[0f,0f,0f],type:"v_scale"},{delay:5,duration:5,type:"v_reset"}]},\
objects:[\
{type:"item", pos:[ 0f,0f,0f], size:[1f,0.4f,0.001f], item:{id:"blue_concrete"}},\
{type:"button_item_a", events:{click:"execute on vehicle run function display_ui:execute {func:\"transform/rotate\",in:{angle:30f}}"}, width:0.7f, pos:[0f,0f,0.004f], element:{type:"text",text:{text:"Button",color:"gold",bold:true,font:"uniform"}}},\
]\
},\
]\
}
その他の具体的な設定例については使用例を参照。
設定したディスプレイの名前でコンパイル用のファンクションdisplay_ui:compileを実行する。
data modify storage display_ui: in set value {display:"sample"}
function display_ui:compile
または
function display_ui:execute {func:"compile",in:{display:"sample"}}
ディスプレイUIエンテイテイの召喚用のファンクションdisplay_ui:summonを実行する。開きたいディスプレイの名前を設定すれば、それを開いた状態で召喚される。
data modify storage display_ui: in set value {display:"sample"}
execute anchored eyes positioned ^ ^ ^2 run function display_ui:summon
または
execute anchored eyes positioned ^ ^ ^2 run function display_ui:execute {func:"summon",in:{display:"sample"}}
召喚用ファンクションでディスプレイも開かれるが、別のディスプレイを開く場合は専用のファンクションdisplay_ui:openを実行する。
data modify storage display_ui: in set value {display:"sample_2"}
execute as @e[tag=display_ui,sort=nearest,limit=1] run function display_ui:open
または
execute as @e[tag=display_ui,sort=nearest,limit=1] run function display_ui:execute {func:"open",in:{display:"sample_2"}}
操作者はディスプレイ上にカーソルが表示されるので、自由に動かしてクリックをすればボタンの操作ができる。

▲操作のようす
ディスプレイのベースにいるエンテイテイを指定してテレポートをすればディスプレイUIを任意に動かすことができる。
execute as @e[tag=display_ui,sort=nearest,limit=1] at @s run tp @s ~5 ~ ~ ~ ~
execute as @e[tag=display_ui,sort=nearest,limit=1] at @s run tp @s ~ ~ ~ ~40 ~
ディスプレイUIエンテイテイを削除せずにディスプレイを閉じる場合は、専用のファンクションdisplay_ui:closeを実行する。
save:trueにすれば、現在のディスプレイの状態は保存される(デフォルトはfalse)。
data modify storage display_ui: in set value {save:true}
execute as @e[tag=display_ui,sort=nearest,limit=1] run function display_ui:close
または
execute as @e[tag=display_ui,sort=nearest,limit=1] run function display_ui:execute {func:"close",in:{save:true}}
ディスプレイUIエンテイテイを削除する場合は削除用のファンクションdisplay_ui:killを実行する。
execute as @e[tag=display_ui,sort=nearest,limit=1] run function display_ui:kill


