前提・実現したいこと
作成したScratchのオリジナルブロックからMinecraftにコマンドを送信できるようにしたい
(実現できていること)
- Scratchのオリジナルブロック作成(参考URL)
(実現できていないこと)
- オリジナルブロックからMinecraftへコマンドを送信する
発生している問題・エラーメッセージ
npmでインストールできるRconのライブラリを使うと、内部でnetを使っているためエラーが起きる
(ブラウザ側で実行する際にnetが存在しないので実行できない?)
Module not found: Error: Can't resolve 'net' in ...
ここにあるような対応は一通り実行してみましたが解決しませんでした。。。
(webpack.config.jsを編集する対応はどこに記載するかわかりませんでした。。。)
該当のソースコード
試したこと
下記のライブラリを使って接続テストを行ったがいずれも失敗
補足情報(FW/ツールのバージョンなど)
- browser : Google Chrome(87.0.4280.141(Official Build) (x86_64))
Node.js: v12.1.0npm: 6.9.0
Node.jsはこれまで使ったことがないので仕組みもよくわかっていません。
その他必要な情報があればご指摘ください。
聞きたいこと
- ScratchのオリジナルブロックからRconで通信する方法
参考URL
- Rconプロトコルの詳細
- ScratchからMinecraftを操作できている例(自分で拡張したいので同じようなものを作ろうとしています)
- 上記の解説記事
なるほど、Scratch3.0でオリジナルブロックを作ろうの記事を読みました。
回答のレベルではないアドバイスレベルなのでこちらにぶら下げます。
Node.jsはDOMを書き換えるしか能がないJavaScriptを、
コマンドラインから好き勝手に実行する為に
C++製のモジュールを付け足してRubyやPythonと同じ汎用スクリプト言語にしたものです。
エラーで叱られている`net`はこのC++製モジュールに該当するので、
自由なHTTP通信を飛ばしたり待ち受ける目的で利用されるものです。
WebpackはNode.jsが利用しているnpmでのパッケージ管理やrequire等の仕組みを
JavaScriptに逆輸入するもので、コードを無理やり1個に固めて、自作のrequire関数をグローバル変数に設置してNode.js流儀でJavaScriptを動かそうという試みです。
制約としてはNode.jsのC++製プログラムはJavaScriptには持って帰れないので、
Webpackで固める事が出来ないモジュールがある程度存在してしまいます。
なので回避策としてはJavaScriptでも使える
Fetch API等でHTTPリクエストを送信して、Node.jsのWebサーバでHTTPリクエストを受け取って
やってほしい事を代行する事になります。
この視点で調査をすすめてみてください。
貴重な情報ありがとうございます!
Node.jsやWebpackについても大変勉強になりました!
> なので回避策としてはJavaScriptでも使える
> Fetch API等でHTTPリクエストを送信して、Node.jsのWebサーバでHTTPリクエストを受け取って
> やってほしい事を代行する事になります。
なるほど!
薄々そうかなとは思っていましたが、やはりそのような方法になるのですね。
以下、上記コメントを受けた私の理解です!
- 既存のRconライブラリは`net`を使用しているので、やはりWebpackで固めたScratch上では動かない
- リクエストに従ってMinecraftとやりとりするサーバーを別で立てておき、Scratchからはそのサーバーにリクエストを送る
上記内容について解釈が間違っている部分などがあれば教えていただければ幸いです!
引き続き調査を進めます。進展があればコメントさせていただきます!
その理解で完璧です。
私はScratchに全然詳しくないので、「リクエストに従ってMinecraftとやりとりするサーバーを別で立てておき、Scratchからはそのサーバーにリクエストを送る」は一番良さそうなアプローチに思えます。
Scratchって色々できそうですが、そもそもそれらの細かい動作を実現する為に
裏でNode.jsのサーバが走っているはずですよね。
その中に上手くアダプターみたいな感じではめ込んで動かせそうな気がします。
頑張ってみてください。
> Scratchって色々できそうですが、そもそもそれらの細かい動作を実現する為に
> 裏でNode.jsのサーバが走っているはずですよね。
> その中に上手くアダプターみたいな感じではめ込んで動かせそうな気がします。
なるほど!
Scratchが動かすために動いている(であろう)Node.jsのサーバーに処理をさせるということですね!
その方面で調べてみます!
進展があればコメントさせていただきます!
ありがとうございます!
あなたの回答
tips
プレビュー