
ブラウザでMinecraftをプレイ - prismarine-web-client
prismarine-web-client (PrismarineJS/prismarine-web-client)
ブラウザで動作するMinecraftウェブクライアント
学校のChromebookや借用ノートパソコン、ゲームをインストールしていないマシンからMinecraftサーバーに参加したいと思ったことはありませんか? prismarine-web-clientはこの問題を解決します。ブラウザタブ内で実際のMinecraftクライアントを実行し、リアルなMinecraftサーバーに接続します。プレイヤー側にローカルインストールは不要です。
prismarine-web-clientとは
これは簡略化された2Dクローンやかつてのアニメーション化されたMinecraftの近似値ではなありません。確立されたPrismarineJSライブラリ2つで構築された本物のブラウザベースクライアントです。mineflayerはMinecraftプロトコルとクライアントロジックを処理し、prismarine-viewerは3Dワールドをレンダリングします。これらが組み合わさることで、実際に動作するものが実現します。
このプロジェクトはGitHubで539スターを獲得し、MITライセンスの下で公開されています。つまり、自由に使用、フォーク、改変できるということです。JavaScriptで書かれているため、ブラウザで実行することが可能になります。PrismarineJSエコシステムは多くの年間にわたって存在し、多くのコミュニティの自動化ツールとボットを支えているため、これは壊れた依存チェーンを抱えた週末実験ではありません。
GitHub Pages上でホストされているライブデモがあります。デスクトップ上のChrome または Firefoxで今すぐ開き、何もインストールせずにサーバーに接続できます。これが最もシンプルなユースケースです。正直なところ、自分でホストする前に何を扱おうとしているのかを理解するのに良い方法です。
その背後にある技術 (そしてなぜ賢いのか)
ここから真に興味深い部分が始まります。MinecraftのプロトコルはTCP上で動作し、ブラウザはライロTCPソケットを開くことができません。では、ブラウザベースのクライアントはどうやって実際のMinecraftサーバーに接続するのでしょうか?

答えはパッケージがローカルで実行するプロキシレイヤーです。ブラウザはこのプロキシにWebSocket経由で接続します。プロキシはそのWebSocketトラフィックをTCPに変換し、対象のMinecraftサーバーにすべてを転送します。サーバーの観点からは、単に別のクライアントが通常どおりに接続しているだけです。ブラウザタブからこれを行っていることはまったく知りません。
このアーキテクチャが賢い理由は、クライアントコードはほとんどブラウザで実行され (mineflayerロジック、3Dレンダリング)、プロキシはブラウザが根本的にできない1つのことを処理するからです。きれいな分割です。プロキシは軽量で、npmパッケージにバンドルされているため、別途セットアップするものはありません。
注意すべき点: 誰かがそのプロキシをどこかで実行する必要があります。ホストされたデモにはサーバー側で実行されているものがあります。自分でホストする場合は、自分のマシン上で実行されます。
自分でセットアップする
Node.jsがインストールされていれば、全体のセットアップは約1分で完了します。パッケージをグローバルにインストールして開始します:

npm install -g prismarine-web-client
prismarine-web-client<! - gh-code-end - >
その後、ブラウザでhttp://localhost:8080を開きます。サーバーアドレスとユーザー名を尋ねるコネクション画面が表示されます。これらを入力して接続をクリックします。
開始する前に理解すべきいくつかのことがあります。これはローカルマシンでプロキシサーバーを開始します。そのマシン上の誰もがlocalhostを介してそれを使用できますが、ポートを公開しない限り他の誰からもアクセスできません。同じローカルネットワーク上の友人と共有したい場合は、LANIPにバインドし、ポート8080でマシンアドレスに接続させる必要があります。可能ですが、基本的なネットワーク知識が必要です。
開発用またはコードを掘り下げたい場合は、repoをクローンして実行します:
<! - gh-code-start - >npm install
npm start<! - gh-code-end - >
これはexpressとwebpackをwatchモードで起動します。ファイルを保存すると、数秒でリビルドされ、更新をリフレッシュして表示します。プロジェクトはデバッグ用にwindowオブジェクト上に便利なグローバルも公開しており、bot, viewer, worldViewを含みます。Chrome DevToolsを開いてbot.chat('test')をコンソールに入力すると、そこから直接ゲーム内チャットを使用できます。これは物事の仕組みを探索したい人にとって素晴らしい機能です。
今できること
バージョン1.6.0は探索用のコアループをうまく処理します。ブロックは正しくレンダリングされ、移動はリアルタイムで動作し、mobと他のプレイヤーが表示され、ブロックを配置して破壊できます。完全なJavaクライアントなしでカジュアル探索と軽いビルディングの場合、それは本当に機能的です。

まだそこにないもの: インベントリ管理、チェストとコンテナ、サウンド、ほとんどの戦闘インタラクション。プロジェクトのロードマップはこれらすべてを予定として記載しています。ですから、クラフト、エンチャント、村人との取引によって完全なサバイバルゲームプレイを想像している場合、バージョン1.6.0はそれをカバーしません。
これは批判ではありません。リアルタイムでMinecraftの世界をブラウザタブ内にレンダリングし、ライブサーバーに接続することは、それ自体では技術的に印象的です。「動作する探索クライアント」と「完全なJavaクライアント互換性」の間のギャップは莫大で、彼らが出荷したものはそれが目指すことについては確実です。
既にブラウザモード内にいる間の実用的な用途1つ: 認識できないブロックに出くわした場合、Minecraft.How上のブロック検索ツールは別のアプリに切り替える必要なく迅速に検索するのに有用です。
つまずくものは
バージョン互換性が最大のばかりです。prismarine-web-clientは基層のmineflayerを通じて特定のMinecraftプロトコルバージョンで動作します。接続しようとしているサーバーが確認されていないバージョンを実行している場合、明確な説明のないコネクションエラーが表示されます。現在のリリースがどのバージョンをサポートしているかについては、プロジェクトのGitHubを確認してください。そのリストはPrismarineJSチームがプロトコルサポートを更新すると変わります。

事前に知る価値がある他のいくつかの一般的な問題:
- プレミアムサーバー認証。 オンラインモードサーバー (Mojang/Microsoftに対してアカウントを確認するもの) はこのセットアップを介した接続がより複雑です。デモとほとんどの自己ホスト展開は、任意のユーザー名を選択して直接接続するオフラインモードサーバーで最もクリーンに動作します。
- 混雑したエリアでのパフォーマンス。 これはブラウザタブで実行されている実際の3Dレンダラーです。密な地形、大規模なエンティティカウント、混雑したサーバーはブラウザのCPUを開いた領域と少数のエンティティよりもかなり難しくプッシュします。
- デスクトップブラウザのみ。 デスクトップ上のChromeとFirefoxは確認されたプラットフォームです。モバイルブラウザサポートはありません。制御スキームの複雑さとレンダリングの要求を考えると、すぐに来ません。
- プロキシを実行し続けてください。 自分でホストし、プロセスが停止した場合、ブラウザページは何にも接続できません。これを定期的に使用する場合、永続的なバックグラウンドサービスとしてセットアップすることは余分なステップの価値があります。
以前間違っていたこと: これは小さなLANまたはパーソナルサーバーでのみ機能すると思っていました。プロキシがTCP経由で到達できる任意のサーバーに接続します。Minecraftバージョンが一致し、認証がブロッカーでない限り、より大きな公開サーバーを含みます。
時間の価値があるかどうか
それはあなたが何が必要なのかに完全に依存します。「クライアントをインストールせずにどこでもMinecraftをプレイする」ソリューションとして、現在の制限内で機能します。探索と基本的なブロック操作は本当に使用できます。完全なサバイバルモード、まだ。

ゲームをインストールしていないマシンから軽量にサーバーにアクセスしたいサーバー管理者にとって、これは実際にかなり実用的です。ランチャーなし、オフラインモードサーバーのアカウントプロンプトなし、ブラウザを開いて接続するだけです。ビルドが正しく見えるか、mobが正しくスポーンしているかどうかを確認することは、完全なクライアント体験を必要としません。
既にブラウザ内にいる間に、サーバー上で使用するスキンを探している場合、Minecraft.How上のスキンブラウザは探索する堅実なコレクションを持っています。
知っておくべき主な選択肢: Eaglercraftは最も認識されているブラウザMinecraftプロジェクトですが、それ自体の履歴と周りに漂っている互換性の質問があります。純粋なワールドビューイングなしでプレイするために、prismarine-viewerはスタンドアロンライブラリとして個別に知る価値があります。mineflayer、このプロジェクトが構築しているので、手作業ではなくMinecraftボットをスクリプト化するための頼りになります。
このテクニック的に興味深いことをしているMITライセンスのオープンソースプロジェクトの場合、539スターはレーダーの下で飛んでいるようです。ユースケースが適切な場合、それを試すための5分は十分に費やされています。
<! - gh-polish-start - > <! - gh-polish-end - >

