スクリプトを含むアドオンの実行条件を論理サーバーと論理クライアントで説明(ちょっと難しい)

前回の記事ではアドオンとスクリプト(Scripting API)の概要について解説しました。

今回は、アドオンをある程度作った後に読むとよりアドオン作成について理解が深まると思われるトピックについて解説していきます。Scripting APIである程度アドオンを作っていくと、「サーバースクリプトとクライアントスクリプトってどう使い分けるの?」とか、「なんでクライアントスクリプトはWindows版のマイクラでしか動かないの?」という疑問にぶつかる場合があります。というか、私がまさにそうでした。そういった場合に読んでいただけると疑問が解消するかもしれません。

この記事ではマインクラフトを構成する要素を説明し、アドオンのスクリプトと構成要素を絡めて説明することでサーバースクリプトとクライアントスクリプトの実行環境を詳しく見ていきたいと思います。

マインクラフトの構成要素

マインクラフトというゲームを構成している要素を大別すると次のように4つの構成要素に分かれます。

  • 物理クライアント(Physical Client, PhC)
  • 論理クライアント(Logical Client, LC)
  • 論理サーバー(Logical Server, LS)
  • 物理サーバー(Physical Server, PhS)

各要素を図示すると次のようになります。

マイクラの各構成要素とその関係

ここで、青色の実線の矢印は私たちプレイヤーが実際にコントロールする、「目に見える」機器および「目に見える」通信の流れになります。また、青色の破線の矢印は、ゲーム内のプレーヤー(エンティティ)と、ゲーム内の情報のやり取り、つまりゲーム内で起こっている「物理的に目で見ることのできない」データのやり取りを示しています。

各構成要素についてみていきます。

物理クライアント(Physical Client, PhC)

物理クライアント(Physical Client, PhC)とは、パソコンやスマホ、Nintendo Switch、PS4などマイクラを遊ぶために必要な物理的な機器およびマインクラフト本体のことを指します。普段マイクラをプレイするときに皆さんが使っている機器がこれにあたるのでイメージしやすいですね。

この物理クライアントの役目は以下の通りです。

プレイ役割
シングルプレイまたはマルチプレイ(ホスト側)内部の論理クライアント、論理サーバーを起動する
マルチプレイ(ゲスト側)内部の論理クライアントを起動し、外部の物理サーバーに接続する
物理クライアントの役割

論理クライアント(Logical Client, LC)

論理クライアントの役目は以下の通りです。

論理クライアントの役割
  • プレイヤーから情報を受け取って、論理サーバーにその情報を伝える
  • 論理サーバーから情報を受け取って、目に見える形でプレイヤーに伝える

論理クライアントは簡単に言えば「プレイヤーとワールドをつなぐもの」って感じです。

論理サーバー(Logical Server, LS)

論理サーバーの役割は、モブのスポーンや天候の変化など、マイクラのワールドで様々なイベントを発生させることと、論理クライアントからから情報を受け取り、その情報をもとにワールドを変化させることです。たとえば論理クライアントから「プレイヤーがクリーパーに攻撃した」という情報を論理サーバーが受け取ると、論理サーバー内でダメージを与えるイベントが発生し、クリーパーの体力を減らす処理を実行します。

物理サーバー(Physical Server, PhS)

物理サーバーは物理クライアントと同じく、実際に目に見える機器のことを指します。物理サーバーの役割は内部の論理サーバーを起動し、接続を待機することです。

例えばRealmsに接続して遊ぶ場合で考えてみます。Realmsのサーバー自体は「目に見える」形の機器として世界のどこかに存在しています。これが物理サーバー。で、Realmsで接続したマイクラの世界は、実際には存在しない「論理的な」サーバー、つまり「論理サーバー」となるわけです。

次にRealmsではなくマルチプレイで遊ぶ場合で考えてみます。自分の機器がホストになったとき、接続してくるゲストから見れば自分の機器は「物理サーバー」となります。一方、ホストになっているときには自分も自分の世界に入って遊ぶことになります。この場合、自分から見ると物理クライアントは物理サーバーを兼ねているということになります。

物理クライアント、論理クライアント、論理サーバー、物理サーバーの話は結構難しいので、まずはサーバーとクライアントってものは論理と物理に分かれているんだなってことを頭の片隅に入れておけばOKです。

  • マイクラは物理クライアント(PhC)、論理クライアント(LC)、論理サーバー(LS)、物理サーバー(PhS)で構成されている

アドオンの構成(詳細)

さて、なぜクライアントとサーバーなどという小難しい話を最初にしたかというと、ちゃんと理由があります。

Scripting APIを利用したスクリプトを書いてアドオンを作成する場合、そのスクリプトは「サーバースクリプト」と「クライアントスクリプト」に分かれます。このサーバースクリプトとクライアントスクリプトは以下の図のように配置される場所と実行される場所が異なるのです。

スクリプトが配置される場所と実行される場所

サーバースクリプトとクライアントスクリプトは共に論理サーバー(LS)に配置されます。そして、「サーバースクリプトは『論理サーバー内で実行』」され、「クライアントスクリプトは『論理クライアント(LC)内で実行』」されます。このような違いがあるので、スクリプトを使って作られたアドオンが動作する環境が異なってくるのです。

サーバースクリプトだけが含まれるアドオンの場合、スクリプトを実行するのは論理サーバーだけです。なので論理サーバーがサーバースクリプトに対応してさえいればどのようなクライアントが接続してきてもそのアドオンは動きます。

クライアントスクリプトが含まれるアドオンの場合、そのクライアントスクリプトは論理サーバーから論理クライアントに転送されたあと、論理クライアントで実行されます。したがって、論理クライアントがクライアントスクリプトに対応していなければそのアドオンは正常に動作しません。

そして、このサーバースクリプトとクライアントスクリプトは現時点でWindowsの統合版にしか対応していません。

マインクラフトの構成要素と実行できるアドオン(詳細)

以上のことをまとめると以下の図のようになります。前回の記事で登場した「スクリプトを利用したアドオンの制限」の図をサーバーとクライアントの観点から書き直したものです。

マイクラの構成と実行できるアドオン

論理サーバーがWindowsで動いている場合、その論理サーバーはサーバースクリプトを実行できますので、クライアントがWindowsでもWindowsでなくても②のようにサーバースクリプトが含まれるアドオンは正常に動作します。それに対し、論理サーバーがWindows以外の場合は論理サーバーがサーバースクリプトに対応していないためスクリプトを含んだアドオンは実行できないことになります。また、論理サーバーがWindowsで動いていても、論理クライアントがWindows以外の場合は論理クライアントがクライアントスクリプトを実行できないため、そのアドオンは正常に動作しません

まとめると、スクリプトが含まれるアドオンを実行できる最低条件は「論理サーバーがWindowsで動いている」ことであり、それに加えてクライアントスクリプトは「論理クライアントもWindowsで動いている」ことが必要であるということです。難しいですね?

  • 論理サーバーがWindowsの場合にサーバースクリプトが使える
  • 論理サーバー、論理クライアントが共にWindowsの場合はクライアントスクリプトも使える

なお、2018年までは「BlockLauncher」というAndroidのアプリでクライアントスクリプトを含むアドオンも実行できていたようです。そのことから、本来はWindows以外のマイクラでもスクリプトを実行できるような基盤は揃っていると思われるのですが。。。おそらくセキュリティの観点から実行できるけど実行させないように制御しているのでしょう。

まとめ

マイクラは論理&物理のサーバー&クライアントで構成されていることと、スクリプトが実行できるかどうかは論理サーバーと論理クライアントが動いている環境に依ることを説明してきました。ちょっと難しい話でしたが、実際にシステムエンジニアとして働く場合、この「論理、物理」の考え方はよく出てきます。マイクラのアドオン作成を通じて論理&物理の考え方を身に着けておくことは、ひょっとしたら将来の為になるかもしれませんね。

それではまた!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です