How To

マインクラフトとストリームデッキの融合:完全機能搭載のレッドストーン構築

Last updated:

  このページはDeepLによって自動的に翻訳されました。 Switch to English

私たちのコミュニティは、常に clever(巧妙)、creative(創造的)、そして downright fun(純粋に楽しい)な作品で驚かせてくれます——そして、この作品はまさにその頂点(ブロック?)かもしれません。最近、Stream Deckがますます多くの場所で登場している話題が盛り上がっています:Stream Deck Modulesやコンピュータ上のVirtual Stream Deckなど。しかし、今や?Minecraftにも登場しました。

インスピレーション

約1ヶ月前、Elgatoのコミュニティスペシャリストが、ElgatoのTwitterに15キーのStream DeckをMinecraftで作成したビルドを投稿しました。友好的な競争心にとりつかれた私は、このコンセプトを実際の機能する製品にどう実現するかを考え始めました。私が作ったものは、決して完璧とは言えず、間違った角度で見ると壊れやすい欠点もありますが、結果には大満足です!

このビルドは、別のモニターにこっそりと隠された6つのキーを備えたVirtual Stream Deck(VSD)によって駆動されています。ゲーム内でアクティブになっている状態に基づいてSDボタンを押す処理の難しい部分を扱う非常にハック的なNode.jsスクリプトが、VSDの表示をMinecraftで表示可能な形式に変換する役割も担っています。

unnamed

Minecraft側では、使用されているレッドストーンは非常にシンプルです。画面の裏側では、各ボタンが校正済みのスカルクセンサー(ゲーム内の音センサー)のペアを使用して入力イベントを監視しています。この場合、入力イベントは、ボタンに雪玉が着地する(信号強度2)か、風チャージが爆発する音(信号強度15)のどちらかです。各ペアは単一のコマンドブロックに接続されており、トリガーされるとゲーム内のチャットに1から8文字のスペースを挿入します。左右にあるページ移動ボタンにも、インジケーターライトを制御する小さな回路が追加されていますが、それ以外の機能は同じです。

カスタム スクリプトで何が起こっていますか?

このプロジェクトのために作成したカスタム Node.js スクリプトが、魔法の大部分を担当しています。プログラムの初期起動時、私は特別な情報を取得し、Virtual Stream Deck (VSD) ウィンドウか Minecraft ゲームウィンドウのどちらかを選択できるようにします。その後、VSD ウィンドウの座標も取得します。すべての設定が完了すると、入力と表示の2つのループが並列に実行されます。

プログラムの入力部分は、2つのうちでより単純で理解しやすい部分です。Minecraftが実行されるたびに、最も重要なイベントをテキストファイル「latest.log」にログファイルとして記録します。重要な点として、このログファイルにはチャットで受信したメッセージも含まれます。つまり、少し工夫したコードを使用すれば、スペースのみのメッセージを含むログエントリのみを確認できます。このようなメッセージが到着すると、スペースの数を数え、その数に基づいて押すボタンを決定します。ボタンは上から下、左から右の順に並べています(ページ移動用の追加ボタンが2つあります)。ボタンが選択されると、専用のデスクトップ自動化ライブラリを使用して、Minecraftのウィンドウからマウスを素早く移動し、Virtual Stream Deckで動作する対応するボタンをクリックし、再びMinecraftの制御に戻します(この動作を実行するにはF3+Pを押す必要があります。そうでないと、ゲームがフォーカスを失った際に一時停止します)。マウスを動かしていない場合、この動作はほぼシームレスに実行されます! もしそうなら、ひどく壊れやすいです(笑)

ボタンを押す操作は問題なく動作しますが、Stream Deckの真の魔法は、各キーの下にプログラム可能なディスプレイがある点です。Minecraft内でそれをどう表示するのでしょうか?私が選択した解決策は、おそらく最も洗練された方法ではありませんが、機能するので、それが私にとって重要なのです!1秒に4回、スクリプトはVSDウィンドウのスクリーンショットを撮影します。ボタンが特定のサイズ(デフォルトの52x52ピクセルはかなりよく機能します)の場合、スクリーンショットをボタンのサイズに切り出し、8x8ピクセルにリサイズします。切り出した画像の各ピクセルを、色に最も近いブロックを特定する巧妙なコードに通します。(GitHubのkult0922氏に感謝します。彼は画像をMinecraftのピクセルアートに変換するウェブサイトを作成し、そのソースコードを公開しました!このコードがなければ、このプロジェクトははるかに時間がかかったでしょう)他の5つのボタンについても同じ手順を繰り返します。

必要なブロックのリストを取得することは良いステップですが、それらをゲーム内に配置する方法は依然として課題です。チャットコマンドを実行できる場合、/setblock コマンドを繰り返し使用して各ピクセルを1つずつ更新する方法はありますが、これは非常に遅く、非効率的です。より良いツールとして、Vanillaゲームに搭載されている「Structure Block」がおすすめです。このツールは、構造物の「設計図」を事前に作成し、ゲーム世界に配置する機能を備えています。私はスクリプトでMinecraftが期待する形式の設計図を作成する方法を発見し、設計図フォルダーに保存された後、チャットコマンドでゲーム内のStructure Blockに現在の画面状態に対応する正しい設計図を参照させるようにしました(各フレームには一意のファイル名が必要で、これが少し複雑になります)。これが完了すれば、小さなレッドストーン回路がアクティブな設計図を繰り返し世界へ貼り付けるだけで、機能する画面が完成します!

結論

結局のところ、あなたはほぼ使えるStream Deckを手に入れました——ただしMinecraft内で!私のスクリプトは主に自分のマシンでの実行を想定して設計されていますが、マルチプレイヤーサーバーで動作するように改善する理由はないと思います!このプロジェクトのオリジナルプロトタイプは、Windows Subsystem for Android上で動作するStream Deck Mobileのインスタンス上で実際に動作していました。つまり、理論上は完全に別のデバイスや仮想マシン上ですべてを実行可能です。それが良いアイデアかどうかは別問題ですが…「実用性」のような懸念に阻まれて、試行錯誤を諦めないでください :)

豆知識:画面上部のStream Deckロゴは、24枚の地図を使用して作成されました。ロゴの構造はEnd void内に配置されていますが、その規模が非常に大きいため、voidの端から端までほぼ伸びています。

unnamed (1)

TheAppleFreakの他の作品もチェックしてみてください:

製品登録