- ちぇん氏のMCCMD-HologramUIを参考に1から作ったもの。
パクりともいう
- 機能削減をして軽量化(計測はしていないので本当は軽くなってないかもしれません)
- 設定項目の単純化
- 細かい位置の調整ができない
- 文字にItemを指定できない
- ItemはHologram毎に最大1つまで
- ItemのみのHologramを作成できない
- 文字列表示の単純化
- 文字毎に1エンティティではなくHologram毎に1エンティティ(アイテムを指定した場合は2エンティティ)
- アンダーライン表示の単純化(文字ごとではなくHologram毎に1つ)
- 長い文字列をすべてカバーできない
- 選択中のHologramを視線トレースではなくexecute幾何学式で検知する
- これ自体は軽量化になっているかどうかは不明
- コマンド数は減る
- 左クリック検知ではなく右クリック検知
- 左クリックだと検知用エンティティの無敵時間中は操作できないため
- スライムを使用しないことにより毎tickNBT操作を回避する
- 右クリック検知用エンティティとして villager を使用しています
- Hologram UIを起動中のみエンティティを配置する
- プレイヤーがHologram UIを操作中はそのHologram UIを他のプレイヤーは操作できない
- 操作するプレイヤーは固定されます
- スニークすることでいつでも強制終了できます
- Hologramは横9x縦5のグリッドに配置されます
- Hologramは最大45個です
- HologramにIDを割り当てると選択可能になります
- 逆に言えばIDを割り当てなければ選択不可能になります
- ワールドに複数のbasepointを設定する場合は20ブロック以上離したほうが無難です
- 近いと別のbasepointに固定される可能性があります
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
name | description |
---|---|
Hologram UI | Hologram User Interfaceの略だが、Hologramを選択して任意のコマンドを実行するプログラム(システム)の名前として使っていることがある |
basepoint | Hologram UIを操作するプレイヤーを固定する位置、またはそれを示すmarker entity |
Hologram | Hologram UIに表示されているホログラム |
HologramID | Hologramに割り当てられているID、重複可能 |
メニュー | Hologram UIに表示するHologramを決定するためのデータ(?) |
メニューID | score @s hologram_ui_light.menu_id |
default_menu_id | HorogramUI起動時に表示されるメニューID |
operator | 1. advancement hologram_ui_light:operator 2. Hologram UIを操作中のプレイヤー |
- Hologram選択時に呼ばれます
score @s hologram_ui_light.id
の値に応じて任意のコマンドを実行してください- メニューの遷移を行うにはここで
score @s hologram_ui_light.menu_id
を変更してください - Hologram UIを終了するには
tag/function #hologram_ui_light:destroy
を呼んでください
- メニュー表示処理中に呼ばれます
score @s hologram_ui_light.menu_id
の値に応じてstorage : _[-1].menu
にメニューを代入してください
- 初期化完了時に呼ばれます。ほぼ演出用です
- 起動音を鳴らすとそれっぽくなります
- Hologram UI終了時に呼ばれます。ほぼ演出用です
- 終了音を鳴らすとそれっぽくなります
<key>: <型> (デフォルト値)
menu: Compound[] (null)
├ text: Optional<String of TextComponent> (null)
│ 表示されるテキストをJSONを文字列化した形式で指定します
│ 例: '{"text": "hello"}'
│
├ id: Optional<int> (null)
│ HologramID。重複可能
│ このHologramを選択した際に`score @s hologram_ui_light.id`にこの値が入ります
│ 指定しなかった場合はこのHologramは選択不可能になります
│ 例: 100
│
└ Item: Optional<Compound> (null)
├ id: ItemID
│ 表示するアイテム。Hologramの近くに表示されます。細かい位置調整はできません。
│ 例: "minecraft:ice"
└ tag: NBT (null)
プレイヤーを固定したい位置にbasepointを召喚します
## 南向きの場合
summon marker ~ ~ ~ {Tags:["hologram_ui_light.basepoint"]}
execute as @e[type=marker,tag=hologram_ui_light.basepoint,distance=..0.01] align xz positioned ~0.5 ~ ~0.5 rotated 0 0 run teleport @s ~ ~ ~ ~ ~
hologram_ui_light:summon/basepoint/
を使うと便利です- これをチャット欄から実行するとプレイヤーの立っているブロックのxzの中心に向きを東西南北に補正して召喚します
basepointのdata.default_menu_id
に起動時に表示されるメニューIDを設定します
## 0 に設定する場合
data modify entity @e[type=marker,tag=hologram_ui_light.basepoint,sort=nearest,limit=1] data.default_menu_id set value 0
- しなくても大丈夫です(しない場合は0)
- メニューやアクション登録用のデータパックを用意します
- ⚠
namespace hologram_ui_light
内ではイベントハンドラ以外のファイルを作成しないでください
Hologram UIを操作したいプレイヤーを対象に
advancement grant @s only hologram_ui_light:operator
を実行します
- そのプレイヤーの近くのbasepointに固定されます
- basepointが10ブロックより離れていると検知に失敗するので注意してください
- basepointの近くの石のボタンを押したプレイヤーを対象に~みたいなのを想定してます
- 細かな位置調整はできませんが、ダミー要素を追加することである程度調整が可能です
- ダミー要素を追加することで結果的に空白をあけることができます
- ダミー要素の場所にはarea_effect_cloudの召喚すら行われませんので、ダミー要素をたくさん追加したからといって重くなることはありません
## ダミー要素を追加する
data modify storage : _[-1].menu append value {}
- 壁として、2~3ブロック程度離して黒系のブロックを置いたほうがいいかもしれません
- Minecraft JE 1.19
- player.tick
- player.initialize
- player.sneak_time
- このデータパックは
player.tick
,player.initialize
,player.sneak_time
に依存しているため、player-datapacks/releasesから依存ライブラリもインストールしてください。
Creative Commons Zero v1.0 Universal