0. はじめまして
『Java版とBedrock版ではコマンドが使えます!』と一時期話題になりましたが、今のコマンドの種類だけでもJava版とBedrock版でかなり大きな差があります。
特に今はデータパックが物凄く流行っていて、Bedrock用にアドオンでも作れませんかという投稿がしばしばみられます。
今回はJava版のパック(リソースパック、データパック)とBedrock版のアドオン(スキンパック、リソースパック、ビヘイビアーパック)の違い、特にクリック検知やUI等でプレイヤーを検知することを紹介していきます。
※Java版のリソースパックとBedrock版のリソースパックは構造がかなり違います!どうやらBedrock版のリソースパックはJava版1.6.4までのリソースパックの様な構造になっているようです。
初めに言っておきますが、Bedrock版で使えるコマンドを昨日調べてみたところ、あまりにもできなさすぎるという事を伝えておきます。アドオン製作者は凄すぎます。
1. Java版が憧れているアドオンの機能
まずはアドオンでは使えるけどパックでは作れないものを紹介します。
特に第一に欲しいと思った機能が、JsonUIを作れるところです。
JsonUIはBedrock版の主なUIにほとんど使われています。最近OreUIに変更していってOreUIはアドオンでいじれないらしいのですが、Java版はModを使わないとUI辺りは変更できないので、この機能は特に優れています。
Bedrock版のUIって?
参考程度に、JsonUIとOreUIはこの見た目です。画像はBedrock Preview版ワールド編集画面。
JsonUI
OreUI
OreUIはJsonUIと違ってマウスカーソルを合わせるとクリック出来ることを知らせてくれます。ちょっとした違いですね。
JsonUIの方は、その名の通りJson形式で書かれている為、リソースパックで自由に変更する事が出来るようです。
Java版のUIって?
Java版のUIは1.0… いや、Alpha時代からほとんど変わっていません。
この馴染みのあるUIは、Jsonファイルでは作られていない為、リソースパックでは変更する事が出来ません。
1.21 (現在の最新バージョン)
0.0.23a_01
あ、0.0.23a_01はWebで開いているから、現在は最低スペックのPCさえあれば誰でも遊べるよ!
このJsonUIを使ったらどうやらゲーム中にカスタムUIを表示させることも出来るようです。
カスタムUIは基本的にJavaScriptで出来ているようです。
データパックはあまりJava言語は使われていない為、アドオンの方がJava言語が使われている状況になっています。
またどうやら今のBedrock版には/cameraコマンドがあるらしいです。
この機能もJava版にはないので、羨ましいと思います。
2. Bedrock版が憧れているパックの機能
さて、Java版には何があるのでしょうか。いや、待ってください。
そもそも企画を作るための最低限のコマンドがBedrock版にないじゃないですか。
/scoreboardよりも便利なコマンド
『あ、Java版には/scoreboardでdummy以外のオブジェクトが使える!これこそ最低限のコマンドだ!』と思っている人へ。
いいえ、全然違います。
何故かといいますと、こちらの沢山ありそうな検知機能、
実はこの沢山ある検知機能の中でよく使うのは、
- deathCount
- minecraft.custom:minecraft.sneak_time
- minecraft.used:minecraft.carrot_on_a_stick
- minecraft.used:miencraft.written_book
- trigger
- dummy
たった6つしか使わなく、これ以外はほとんど使うことがありません。
(なんならほとんどの人は記入済みの本の検知も使わない)
ちなみに、この中のうち「minecraft.custom:minecraft:sneak_time」は統計画面のスニークした時間から来ていますが、このスニークした時間は「スニークキーを押した時間」となっている為、かなり使いやすいです。
(でも、1.21.2で別のキー検知が追加される予定なので今後はあまり使わない)
そして、「minecraft.used:minecraft.carrot_on_a_stick」と「minecraft.used:minecraft.written_book」は統計画面の「アイテム」タブにある使用した回数のことを指します。
この使用した回数ですが、本は開いた数なのでわかりやすいのですが、ニンジン付きの棒と歪んだキノコ付き棒はブタやストライダーにニンジンや歪んだキノコを与えた数ではなく、単に「使用キー」を押したタイミングで実行されるのでとても使いやすいです。
(ただ最近コンポーネントが追加されたお陰で食べ物検知がどんどん流行ってきている)
じゃあ逆にHPとか食料ゲージとかどうやって検知しているの?totalKillCountは使っていないの?
まずHPや食料ゲージ、酸素ゲージ等のプレイヤーのHUDに表示されている内容は/dataコマンドや/attributeコマンドで検知出来るのでスコアボードで選択する必要がないのです。
HPや衝撃吸収HP、食料ゲージ、酸素ゲージの残り、経験値レベル、付いているエフェクト、インベントリやホットバー、更にはエンダーチェストの中身など、これらの検知系はほぼ全て/dataコマンドで入手できます。
HPの現在の最大値や防御力などのプレイヤーのステータスに当たる部分は/attributeコマンドで入手する方が使いやすいです。
例外として、経験値バーは/xpで検知する事が多いです。何故なら/dataコマンドでは経験値の割合が出力されるのに対して、/xpコマンドでは整数値で出力されるためです。
またニンジン付きの棒での検知ですが、Java版のアイテムNBT/コンポーネントにある「minecraft:custom_model_data」を使って、リソースパックを介してカスタムアイテムを作成しています。
この整数値を使ってアイテムモデルを追加する方法ですが、1.21.2からはコンポーネントに「minecraft:item_model」というものが追加され、これがリソースパック無しでアイテムモデルを割り当てられるようになるので凄く便利な機能が追加されます。最近追加されたコンポーネントの恩恵はかなりでかいです。
おっと、これはBedrock版も別にアドオンで作れるらしいので、/dataコマンドの本当の凄さがまだ伝わらないでしょう。
実はこの/dataコマンドがあるお陰で、自分自身の状態を検知できます。
というのも、/dataコマンドが追加されたお陰でセレクター引数にNBTが追加されました。
自分にネザライトの剣を所持しているかの検知
execute if entity @s[nbt={SelectedItem: {id: "minecraft:netherite_sword"}}]
全てのプレイヤーのスコアにプレイヤー自身のダイヤモンドを持っている数を検知
execute as @a at @s store result score @s diamond_count run clear @s minecraft:diamond 0
全てのプレイヤーのスコアにプレイヤー自身の現在のHPと食料ゲージと隠し食料ゲージを検知
execute as @a at @s store result score @s health run data get entity @s Health 50
execute as @a at @s store result score @s food run data get entity @s foodLevel
execute as @a at @s store result score @s foodSaturation run data get entity @s foodSaturationLevel 10
また、/dataコマンドはNBTを変更する事が出来ますが、プレイヤーのNBTは変更することが出来ません。しかし、エンティティやブロックは変更することが出来ます。
最寄りのウシにNoAIを有効にする
data modify entity @e[type=minecraft:cow, sort=nearest, limit=1] NoAI set value 1b
座標1, 1, 1のシュルカーボックス(チェスト等コンテナを持つブロックでも可能)を1つのコマンドで空にする
data modify block 1 1 1 Items set value []
でもこれでも検知出来ないことは結構あります。その検知が出来るのが次の機能です。
進捗
進捗です。何故かJava版にしかありません。
そもそもJava版の進捗は、進捗画面にしか使われていないと思う人が多いのではないでしょうか。
実は、この進捗、画面に表示されない隠し進捗をつくることが可能で、バニラではレシピ解除に使われています。
そう、実はこの進捗を達成したらレシピ解除を実行すること以外に、達成したらfunctionを実行することも出来ます。これが便利です。
実は進捗、年々出来ることが増加していて、キルやアタックの検知はもちろん、最近ではボタンを押した検知も出来るようになりました。
これを使えば、ダイヤブロックに設置したボタンを押すだけでコマンドを実行することが出来るようになります。
この便利な/dataと進捗は今回紹介したのはほんの一部です。いろんな検知が出来ますので、これがないと企画制作は難しいです。
3. おわりに
実は検知という機能の種類がBedrock版とJava版の差でめちゃくちゃ大きく、Bedrock版はまともな検知さえも出来ないので製作どころではないのが今の現状です。
また、この後の動作については実はあまり変わらなく、Bedrock版は/dataコマンドでエンティティがいじれないだけ(重大すぎる)なので検知系で/dataコマンドが出ればBedrock版の製作もしてみたいと思います。
コメント