名前が示すように、OpenComputersモジュールはコンピューターをMinecraftに追加します。 本物のコンピューター! ただし、それらはモジュール式でもあります。 周辺機器を追加できます:モニターからキーボードや拡張カードまで、グラフィックやネットワークなどの機能を追加します。 そして、これらのコンピューターはゲーム内でLua言語でプログラムできます。 そして、あなたが想像できるインターネットカードのようなタイプのカードがあり、現実世界でインターネットに接続できます。 悪くない。
![画像](https://habrastorage.org/getpro/habr/post_images/c6b/660/447/c6b66044731eee9761de7d4a24a4ad0e.jpg)
では、約1時間の空き時間で何ができるでしょうか?
WiFi付きの電球を2つ持っていましたが、Minecraftからそれらを管理するのは本当にいいですか? 私のWiFi電球はeBayで見つかった未知のデバイスです
![](https://habrastorage.org/getpro/habr/post_images/e1c/4f2/75e/e1c4f275efb76d296c6ae9e305e32910.gif)
いじくり始めます
まず、Minecraftを起動しました。 次に、Minecraftで新しい世界を作成し、ゲームに参加しました。 クリエイティブモードに切り替えました。つまり、ゲームに好きなものを追加して、OpenComputersコンピューターを構築できました。 この問題に関する多くの指示がありますが、そのようなコンピューターがどのように機能するかを理解するにはまだ時間がかかりました。 試行錯誤を繰り返した結果、稼働しているコンピューターがあり、実世界とのTCP接続を作成できました。
電球で使用されるプロトコルは非常に単純で、1つのヘッダーバイト(ヘッダーバイト)、RGB形式の色を決定する3つの追加バイト、白の明るさを決定するバイト(RGBW電球)、RGBモードと白モードを切り替える1バイト、および後続バイト(フッターバイト) ) 簡単です!
0x56 RED GREEN BLUE WHITE MODE 0xAA
バニラMinecraftには、私たちの世界の電気に相当するレッドストーン(「赤い塵」)があります。 デフォルトでは、レバー、ピストン、コンパレータなどのさまざまなブロックがサポートされています。 人々は、 実際のプロセッサなど、レッドストーンを使用して本当に複雑なデザインを作成します 。 OpenComputersコンピューターはレッドストーンで動作します。つまり、Minecraftレバーの状態のバイナリ値「オン」または「オフ」を読み取り、ライトをオンまたはオフにするためにWHITEバイトを切り替えることができます。
これは私がゲームに組み込んだコンピューターで、1つの大きなモニターを構成する6つのモニター、ハードドライブ、赤いダストラインで右側に接続されたレッドストーンレバーがあります。
![画像](https://habrastorage.org/getpro/habr/post_images/5dd/dd4/db5/5dddd4db5c463bc5cf6fa65436d44757.jpg)
すべてをまとめる
そのため、コンピューターと、コンピューターと着信信号を制御する方法があります。 電球と通信するためのパスとプロトコルもあります。 パズルの最後の要素は、コンピューターで実行され、システム全体を活性化するプログラムです。 まず、Minecraftにハードドライブを作成しました。 情報をハードドライブに書き込むとき、OpenComputersコンピューターはMinecraftファイルディレクトリに一意の識別子を持つディレクトリを作成します。 この方法で、ゲーム内のコンピューターにコンピューターからファイルを追加、編集、削除できます。
私はSublime Textをエディターとして使用しました。私の意見では、ゲーム内のコンピューターでコードを書くことはあまり便利ではありません。 そして、いくつかの調査とエラーの後、次のスクリプトを書きました。
local event = require('event') local net = require('internet') local myEventHandlers = {} local running = true local con = net.open('192.168.1.110', 5577) function myEventHandlers.key_up(address, char, code, playerName) if (char == 'q') then running = false print('Goodbye ' .. playerName .. '!') end end function myEventHandlers.redstone_changed(_, address, side) local brightness = 0xff; if side > 0 then brightness = 0xff else brightness = 0x00 end print('Sending ' .. brightness .. ' to lamp...') con:write(string.char(0x56)) con:write(string.char(0x00)) con:write(string.char(0x00)) con:write(string.char(0x00)) con:write(string.char(brightness)) con:write(string.char(0x0f)) con:write(string.char(0xaa)) con:flush() end function handleEvent(eventID, ...) local event = myEventHandlers[eventID] if (event) then event(...) end end if con then print('Connected to the bulb!') end while running do handleEvent(event.pull()) end
Luaプログラムは、実行されると、key_upとredstone_changedの2つのイベント(イベント)に応答します。 最初はプログラムの実行中にキーが押されたときに行われ、最後はレッドストーン信号が受信されたときに行われます。
これでメインイベントループが作成され、簡単なロジックを実装できました。
![画像](https://habrastorage.org/getpro/habr/post_images/3d8/a38/51b/3d8a3851b1598b0a70ba9feee2938e7e.gif)
まず、「q」キーが押されると、プログラムは終了します。 レッドストーン信号を受信すると、プログラムはレバー位置を「0x00」または「0xFF」に変換します。つまり、wifiランプのオンとオフを切り替えます。 パケットはチャネルを介して送信され、ランプはそれに応じて応答します。 最後に、プログラムの起動時にTCP接続が開きます。 シンプルで機能します!
参照: