マインクラフトのレッドストーン回路でマルチプレクサー

今回は、マインクラフトで組み合わせ回路のマルチプレクサーを作りました。2bitの信号を切り替えるだけですが、マインクラフトでは単純に回路図をレッドストーン回路で実現すると、1つ1つのブロックが多いため最適化する必要があるのが分かりました。

logisimで作ったマルチプレクサーの回路図
マインクラフトでマルチプレクサーを実装

画面キャプチャーのように、2ビットの切り替えだけでも何も考えずにブロックを配置するとこの大きさです。マインクラフトは、レッドストーンは15個分の信号しか伝わらないため、大きくすればするほどリピーターで調整する必要があります。

16ビットのマルチプレクサーを作るとなると、ブロックの並べ方をしっかり学ばないといけないようです。

 

マインクラフトのレッドストーンでXOR回路

マインクラフトのレッドーストーンで排他的論理和のXOR回路を作成しました。

 

http://minecraft.gamepedia.com/File:StandardLogicGates.png

 

今回作成した排他的論理和XOR回路

マインクラフトでは、レッドストーンとブロックを繋げてさらにレッドストーントーチを置くことでNOT回路になります。そして高低差をうまく使うことで小さなサイズで、XOR回路を作る事が可能です。

一度Logisimで、回路図を書いてみました。レッドストーン回路はどこが接続されているのかわかりづらいですが、以下のような回路図にしてしまうと分かりやすいです。また、XOR回路の出力にNOT回路を付けるとXNOR回路になります。

 


マインクラフトのBlockクラスのgetItemDroppedのテスト方法

マインクラフト1.11.2のModding(モド開発)のチュートリアルをやっていて問題なく実装はできたけどテストする方法が分からない場面に出くわしました。

テストが難しいケース

ワールド作成時にクリエイティブモードにすると、ブロックなどはドロップせずに消滅してしまいます。そのためこのモードでは、ブロックのドロップなどのテストができません。その場合サバイバルモードにすればよいのですが、ブロック強度がダイアモンドと同等にした場合、ダイアモンドのツルハシ(Pickaxe)がないため、ゲームで入手しなければなりません。また、サバイバルモードの場合、自作ブロックがないため見つける方法がありません。

解決方法

このような場合は、サバイバルモードで、チートコマンドを使ってツルハシとブロックを入手するのが良いです。

ダイアモンドのツルハシの入手方法

チート可能にしておいて、/を入力するとチャット欄が表示されるので、以下を入力します。diamond_ぐらいまで入力してタブキーを押すと補完候補が出てきます。

http://gamehackerblast.com/post-16636/

 

自作ブロック生成方法

まずは、F3キーでデバッグ情報を表示して、XYZまたはBlockで座標を確認します。次に、/setblockコマンドでブロック出現先を指定し、以下のようにminecraft:で既存のブロックを指定するか、modidを入力してタブキーで補完するかでブロックが指定できます。

以下は、tutというmodidで、tut_blockという自作ブロックのコマンド例です。

これで、作成したブロックを出現させることができます。あとは、getItemDroppedのコード内にブレイクポイントを立てて実行すあれば補足できます。

自作ブロックを/setblockコマンドで出現させたところ

以下は、ダイアのつるはしで殴って、ブロックをアイテムに変えたところです。この時に、Block#getItemDroppedが呼び出され、ブロックがソースコードで指定したアイテムに変わります。

 

ソースコード

ソースコード自体は、難しいことはしていません。

 

マインクラフトのMod開発環境をバッチファイルなしでIntelliJで用意する方法

IntelliJはGradleに対応しているので、マインクラフトのModを開発する場合は、Powershellでバッチファイルを実行する必要はありません。すべてIntelliJをクリックするだけで出来るので手軽に開発環境を作ってしまいましょう。この記事では、開発環境の構築、実行、デバッグ方法、ホットリロードを説明します。

前提条件

以下をインストール済み

  • JDK (なるべく新しいもの)
  • IntelliJ IDEA 2016.3.4

いくつか用語と開発ツールの解説

IntelliJ  (インテリジェイ) Javaの開発環境

FORGE MDK – マインクラフトのModを開発するときの土台になる開発ライブラリー

Maven(メイベン) – Javaの依存関係解決ツール

Gradle(グラドル) – Javaのプロジェクト管理ツール

Javaとメモ帳で開発するのは面倒なので、IntelliJという強力な開発環境を使います。マインクラフトのMod(モド)で遊んだことがある人は知っているかもしれませんが、Modは大抵FORGE(フォージ)を土台にしています。そのためFORGEの開発者向けのMDK (minecraft development kitの略?)を使います。

またプロジェクトを管理するのに、Gradle(グラドル)という開発ツールを使っています。これがさらに内部でMaven(メイベン)という依存関係解決ツールを使っています。開発中はほとんど意識しませんがとりあえずこんな感じで動いています。

 

MDKの展開とワークスペース作成

Minecraft FORGE(http://files.minecraftforge.net/) にMdkアイコンがあるのでダウンロードして展開します。現時点では、1.11.2-13.20.0.2228が推奨(Recommended)でした。

展開して中を確認するとbuild.gradleファイルがあります。これがプロジェクト管理ファイルになります。

IntelliJを起動して、ダイアログが表示されたら[Import Project]で以下の[Select File or Directory to Import]ダイアログを表示して、build.gradleを選択します。

インポートの設定ダイアログが表示されますがそのままでよいです。

もしダイアログが出てこない場合は、IntelliJの[File]->[Open…]からbuild.gradleを開いても問題ないです。

これでプロジェクトが読み込まれます。

プロジェクトの初期化

setupDecompWorkspaceタスクの実行

IntelliJの右側にGradleアイコンが縦に表示されているので、クリックして一覧を表示し、以下画面のようにsetupDecompWorkspaceを右クリックして、Runで実行します。

最近のパソコンなら30秒ぐらいで終わるはずです。ビルド中はアイコンがくるくる回っていますが、終わると秒数が表示されます。以下のような感じです。

genIintellijRunsの実行

IntelliJの場合は、もう一つgenIntellijRunsタスクを実行します

「プロジェクトを再読み込みしますか?」と聞かれるのでYesをクリックします。

これで環境構築は完了です。


マインクラフトをIntelliJから実行

いままでと同様に、runClientタスクを右クリックで実行します。これは開発中ソースコードをビルドして、Modを有効にしてマインクラフトを起動します。

タイトル画面のModsボタンからMod List画面に行くと、Example Modが読み込まれているのが分かります。名前を変更していないのでExample Modのままです。

停止方法

IntelliJの下部分に実行中のタスクが表示されるので、そこの赤い資格のボタンで停止できます。

コンソールログ

IntelliJでコンソールログを表示するには、以下のアイコンをクリックします。

あとは、以下のように、右の縦のメニュー[1.Project]から、画像のように、src/main/java/com.example.examplemod/ExampleModを開くとここから開発が始められます。画像ファイルなどは、すぐ下のresourcesに入れていくことになりますが、ルールがあるのでちゃんと調べる必要があります。

 

デバッグとホットリロード

マインクラフトの開発中は、デバッグモードでマインクラフトを起動します。

デバッグモードで起動

デバッグモードでマインクラフトを起動する場合は、以下のようにDebugをクリックするだけです。

ホットリロード

ソースコードを修正したらすぐに反映されます。やり方は何かしらソースコードを修正して、メニューの[Build]からBuild Moduleをクリックすればよいです。

今リロードしますか?毎回聞かれるので、慣れたら、チェックボックスを入れて次回以降は表示しないようにしておきましょう。

リロードがうまくいった場合は、以下のステータスが表示されます。

 

サンプルソースコード

IntelliJのConsoleにログを出力するサンプルです。hello tick!!!の文字を変えたりしてホットリロードを確認してみてください。

 

配布

GradleタブのTasks/build/buildを右クリックして実行するとbuildタスクが実行され、build/libs/modid-1.0.jarが作成されるのでこれを配布すればよいようです。

 

まとめ

IntelliJでマインクラフト1.11.2のMod開発環境を構築しました。

 

参考資料

1.11.2のMod作成チュートリアル

1.11はまだほとんどありませんが以下が参考になりそうです。またYoutubeでもチュートリアルを作っている方がいるようです。

http://www.minecraftforum.net/forums/mapping-and-modding/mapping-and-modding-tutorials/2790483-1-11-2-forge-minecraft-forge-modding-tutorials-up