ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド構文解説-霧を操る…?/fog-

  投稿日:2021/12/19

最終更新日:2021/12/19

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドの内の1つである『 /fog 』について解説をしていきます。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

 

今回のコマンドは?

今回ご紹介するコマンドは『 /fog (フォッグ)』です。このコマンドは、任意のfog(霧)を発生できるというものです。

f:id:YukimiD1999:20211219052447p:plain

普段のこんなワールドが…

f:id:YukimiD1999:20211219052519p:plain

こんなことになる!?

それでまず、構文を見てみましょう。

 

/fog のコマンド構文

 

/fog <セレクター> push <fogID> <fog名>

 

/fog <セレクター> <モード> <fog名>

 

  • <セレクター>:必須
    ターゲットセレクター。プレイヤーしか対象にできない。ゲーマータグを直接入力可。
  • <モード>:必須
    fog設定の削除モードを入力する。モードは以下の2種類。
    pop (ポップ)
     一番最後に設定したfog設定のみを削除する。
    remove (リムーブ)
     キュー内全てのfog設定を削除する。

  • <fogID>:必須
    fogそれぞれに付いているID。詳しくは ↓ の記事で紹介します。
    (解説ページができ次第リンク貼ります)
  • <fog名>:必須
    実行者が独自に付けるfog設定のコマンド上での名前。キュー内に既に同名の<fog名>があっても問題ない。

 

/fog の失敗条件

  • 構文が適切でない(スペルミス等)。
  • 指定した<fog名>のfog設定が、そのプレイヤーのfog設定キューに存在しない場合(<モード>が popremove の場合)。
  • プレイヤー以外をセレクターの対象に指定している。
  • 指定したセレクターの条件に合う対象が存在しないか、読み込まれているチャンク内に存在していない。

 

/fog の成功条件

  • 上記の失敗条件を満たしていない場合。
  • キュー内に同名の<fog名>が存在しても互いに干渉せず、問題にならない。

 

/fog の実行例

例1)

コマンド:/fog @p push minecraft:fog_hell fog1

実行結果:基準座標から1番近いプレイヤーのfog設定キューに以下のfog設定をpushする。

  • <fogID>:minecraft:fog_hell (ネザーのfog)
  • <fog名>:fog1

f:id:YukimiD1999:20211219052558p:plain

<minecraft:fog_hell>が描画されている様子

 

例2)

コマンド:/fog @a push minecraft:fog_basalt_deltas fog1

実行結果:全てのプレイヤーのfog設定キューに以下のfog設定をpushする。

f:id:YukimiD1999:20211219052649p:plain

<minecraft:fog_basalt_deltas>が描画されている様子

 

例3)

コマンド:/fog @p pop fog1

実行結果:基準座標から1番近いプレイヤーのfog設定キューから「fog1」という<fog名>のfog設定をpopする。

 

例4)

コマンド:/fog @a remove fog1

実行結果:全てのプレイヤーのfog設定キュー内の「fog1」という<fog名>のfog設定を全て削除する。

 

/fog の詳細解説

/fog の概要

/fog は指定したプレイヤーのfog設定キューを操作するコマンドで、fog設定キュー内で最も上にあるfog設定がプレイヤーの画面に描画されます

また、fog設定キューはワールドを離れても保持されます(正確にはワールド側に保存されるので別ワールドまでは影響しない)

ここまで読んで頂いた方の中には「push?pop?キュー?なんじゃそりゃ?」という方もいらっしゃるかと思いますので、ここでそれらについて少し解説したいと思います。

 

「キュー」とは?

キュー (Queue) とは、コンピュータにおける基本的なデータ構造の1つで、待ち行列とも言われるものです。最大の特徴は、データを先入れ先出しのリスト構造で保持するという点です。

は???日本語でおk、という方が多いと思いますので早速、具体例を見てみましょう。

 

Queue1

 Back

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Front

 

キューは ↑ のようにデータを保存しています。リスト構造とは、箇条書きのようにデータを保存できる構造というわけですね。

そしてキュー内には必ず、FrontBack が存在します。これはデータが保存された順番を指し示すもので、Front近い方が保存順が古い方Back近い方が新しい方です。これがキューのようなリスト構造型のデータ構造では非常に重要です。

そして問題の先入れ先出しという部分ですが、まず「先入れ」とは、データは必ず Back側から保存するという意味です。先程のQueue1に新たに「Yuki1」というデータを保存してみましょう。

 

Queue1

 Enqueue:<Yuki1>

 Back

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Front

 ↓

 Back

 4. <Yuki1>

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Front

 

 ↑ のように、<YukimiD>の上に<Yuki1>が保存されました。このようにキューの1番Back側へデータを保存することを Enqueue (エンキュー) と言います。

そして「先出し」とは、データは必ずFront側から取り出すという意味です。データを保存する Enqueue とは真逆のこの操作は Dequeue (デキュー) と言います。では<Yuki1>を保存したQueue1に Dequeue の操作をするとどうなるでしょうか。

 

Queue1

 Back

 4. <Yuki1>

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Front

Dequeue:

 ↓

 Back

 3. <Yuki1>

 2. <YukimiD>

 1. <Sirius>

 Front

Dequeue:<Polaris>

 

 ↑ のように、Frontに1番近い<Polaris>が Dequeue されました。これが「キュー」です。この「キュー」と似たデータ構造に「スタック (Stack)」というものがあります。

 

「スタック」とは?

スタックとは、キューと同様にコンピュータで用いられる基本的なデータ構造の1つですが、キューとは異なり、後入れ先出しのリスト構造で保持します。

データを保存する際はキューと同様ですが、操作名は push (プッシュ) に変化します。また、キューで言うところの Back が Top に、Front が Bottom になります。

 

Stack2

 push:<Yuki1>

 Top

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Bottom

 ↓

 Top

 4. <Yuki1>

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Bottom

 

そして異なるのがデータを取り出す操作です。キューの Dequeue では1番 Front (Bottom) 側に近いデータから取り出しましたが、スタックでは1番 Back (Top) 側に近いデータから取り出します。これを pop (ポップ) と言います。

 

Stack2

 pop:

 Top

 4. <Yuki1>

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Bottom

 ↓

 pop:<Yuki1>

 Top

 3. <YukimiD>

 2. <Sirius>

 1. <Polaris>

 Bottom

 

Back (Top) に1番近い方のデータ、つまりは1番最後に保存 (push) したデータの<Yuki1>が取り出され (pop) ました。これが"push"と"pop"です。

 

/fogにおける「キュー」

さてようやく /fog に話が戻りますが、この /fog でfog設定を保存しているのも、キューやスタックといったリスト構造のデータ構造です。で、キューとスタックのどちらなのかというと、名称こそ「キュー」ですが、操作モードに push と pop があることからわかる通り、性質としてはほぼ「スタック」です。実際に /fog で fog設定キューを操作しながら見てみましょう。

 

YukimiD1999の fog設定キュー

Top

 D. <minecraft:fog_default>

Bottom

 

まずは被検体として、YukimiD1999というプレイヤーを用意しました。まだ特に操作していないので fog設定はデフォルト (Default / バイオーム等に合わせて変化) となっています。ちなみに 最下層の<minecraft:fog_default> は絶対に pop できません。

ではまず、以下のコマンドを実行します (実行者は YukimiD1999 とします)。一体、どうなるでしょうか。

 

/fog @p push minecraft:fog_hell fog1

 

YukimiD1999の fog設定キュー

 push:<minecraft:fog_hell (fog1)>

Top

 D. <minecraft:fog_default>

Bottom

 ↓

Top

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

 ↑ のようになりました。/fogでは、fog設定キュー内で最も上にあるfog設定がプレイヤーの画面に描画されるのでしたね。つまり現在は、キュー内で1番上 (Topに近い) の<minecraft:fog_hell (fog1)>が描画されています。ではこの状態でさらに、以下のコマンドを実行してみましょう。

 

/fog @p push minecraft:fog_basalt_deltas fog1

 

YukimiD1999の fog設定キュー

 push:<minecraft:fog_basalt_deltas (fog1)>

Top

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 ↓

Top

 2. <minecraft:fog_basalt_deltas (fog1)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

これで今度は<minecraft:fog_basalt_deltas>が描画されるようになります。では次に、↓ のコマンドを実行してみましょう。

 

/fog @p pop fog1

 

YukimiD1999の fog設定キュー

 pop:<fog1>

Top

 2. <minecraft:fog_basalt_deltas (fog1)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 ↓

 pop:<minecraft:fog_basalt_deltas (fog1)>

Top

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

1番最後に push した<minecraft:fog_basalt_deltas>が pop されたことで、1番Top側にあるのが<minecraft:fog_hell (fog1)>となりました。よって描画されるのは<minecraft:fog_hell (fog1)>です。では次の場合で同じコマンドを実行した場合はどうなるでしょうか。

 

YukimiD1999の fog設定キュー

 pop:<fog1>

Top

 3. <minecraft:fog_the_end (example2)>

 2. <minecraft:fog_basalt_deltas (fog1)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

pop は1番Top側にあるデータを取り出すものですが、pop対象である<fog名>が"fog1"であるfog設定が1番Top側にありません。この場合はどうなるのでしょうか。

 

YukimiD1999の fog設定キュー

 ↓

 pop:<minecraft:fog_basalt_deltas (fog1)>

Top

 2. <minecraft:fog_the_end (example2)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

 ↑ のようになります。つまり、/fogにおけるpop操作を正確に表すと「その<fog名>のfog設定の中で、1番Top側に近いものを取り出す」となります。そのため、同じ"fog1"という<fog名>を持つfog設定の中で、1番Top側に近い<minecraft:fog_basalt_deltas>がpopされました。

 

では次は、fog設定キューが以下である場合を考えて行きます。

 

YukimiD1999の fog設定キュー

Top

 4. <minecraft:fog_the_end (example2)>

 3. <minecraft:fog_basalt_deltas (fog1)>

 2. <minecraft:fog_crimson_forest (example2)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

この場合に以下のコマンドを実行するとどうなるでしょうか。

 

/fog @p remove fog1

 

YukimiD1999の fog設定キュー

 remove:<fog1>

Top

 4. <minecraft:fog_the_end (example2)>

 3. <minecraft:fog_basalt_deltas (fog1)>

 2. <minecraft:fog_crimson_forest (example2)>

 1. <minecraft:fog_hell (fog1)>

 D. <minecraft:fog_default>

Bottom

 

 remove:<minecraft:fog_basalt_deltas (fog1)>,<minecraft:fog_hell (fog1)>

Top

 2. <minecraft:fog_the_end (example2)>

 1. <minecraft:fog_crimson_forest (example2)>

 D. <minecraft:fog_default>

Bottom

 

 ↑ のようになります。removeその<fog名>のfog設定を、キュー内から全て取り出すというわけですね。よって現在描画されているのは<minecraft:fog_the_end>です。

 

…というのが/fogの動作です。今一度、重要なポイントをまとめてみましょう。

 

  1. push でfog設定を、対象プレイヤーのfog設定キューにpushする
  2. pop でその<fog名>のfog設定を、対象プレイヤーのfog設定キューの1番Top側に近いものから1つだけpopする。
  3. remove でその<fog名>のfog設定を、対象プレイヤーのfog設定キュー内から全て削除する
  4. プレイヤーの画面に実際に描画されるのは、そのプレイヤーのfog設定キューの1番Top側の1つのみ
  5. fog設定キューは1度ワールドを離れてもリセットされない(別ワールドまでは影響しない)。

 

文章だけでは理解が難しい部分もあるかと思いますので、各自で実際に実行して頂いた方が良いかと思います。<fogID>もオーバーワールドで変化がわかりやすいものを選んで例にしていますので、ここまでの例そのままに実行して見て下さい。

 

/fog の実行結果等々

コマンドがエラーとなった場合には以下のように返ってきます。

  • セレクターに合う対象がありません」
    <セレクター>に合う対象エンティティが存在していない場合のエラー。

  • セレクターはプレイヤーの型にする必要があります」
    <セレクター>の対象にプレイヤー以外が含まれる可能性がある場合のエラー。

  • 「(プレイヤー名) の ID を持つフォグ設定が見つかりませんでした」
    <モード>がpush以外の時に、指定したプレイヤーのfog設定キュー内に、指定した<fog名>のfog設定が存在しない場合のエラー。

 

コマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」「コマンドが何人に対して成功したか(int)」の2点です。コマンドが成功した人数については、RSコンパレーターを用いてRS動力の形で取り出せます。

 

/fog の強み・使い道

ゲーム制作においては、もっぱら演出に用いられます。上の例でも使用しました<minecraft:fog_hell>や<minecraft:fog_basalt_deltas>は特に変化が大きいですので、ぜひお試しあれ。

 

/fog の弱み・弱点

このコマンドにこれといった弱点は存在しませんが、強いて言うなら、pushし過ぎると何を保存したかがわからなくなることでしょうか。このコマンドには /tag や /scoreboard、/tickingarea のように、現在の設定状況を確認することはできず、デフォルトの状態に直接戻す方法もありません。そのため、デフォルトの状態に戻したい場合には、pushしたfog設定(正確にはfog名)を覚えておかなければなりません。この点には注意しましょう。

なお、どうしてもデフォルトの状態に戻せなくなった場合は<minecraft:fog_default>をpushして下さい。これはデフォルト設定の<fogID>と全く同じものです。ただし、ここでpushした<minecraft:fog_default>はプレイヤーの操作でpushする関係上、必ず<fog名>が存在する=削除することが可能な点には気を付けましょう。

 

 

今回は霧(fog)を操る/fogをご紹介しました。上手く使えばゲームの演出もパワーアップすること間違い無しですので、ぜひともマスターしてみて下さい!

 

今回のまとめ

  • 『 /fog 』はプレイヤーのfog設定キューを操作するコマンド!

 

関連記事

  • コマンド構文解説-エンティティにライド・オン!/ride-

  • コマンド構文解説-モブがアクションを起こす!?/event, /mobevent-

  • コマンド構文解説-何が起こるんだ!?PART2!/list, /locate, /schedule-
  • コマンド構文解説-コマンドに革命を起こす…!?/function, /reload-

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。