Minecraftとタートルと僕スマートフォン用の表示で見るMinecraftとタートルと僕PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。こちらのページは更新が滞っており、情報が古くなりつつあります。新しいCC情報サイトをはじめましたので、もしよければご参照ください。今後ともよろしくお願い申し上げます。間違いが含まれている可能性が高いです。その場合は、優しくご指摘いただけると助かります。以下はMinecraft1.7.10およびForge#1180をターゲットに調査した内容です。これよりも古いバージョンでは異なる可能性があるのでご注意ください。自作Modを作るには、まず自分のModで初期化処理を書かなくてはならない。設定ファイルを読み込んだり、ブロックを追加したり、独自レシピを追加したり、他のModとの連携処理を書いたりなどなど。Forge(厳密に言うとForgeModLoader、以下FMLと呼称)は、初期化処理のフレームワークを以下のように定めている。基礎知識・・・FMLはイベント駆動FMLは、○○○というイベントメッセージが来たらあらかじめ登録してある処理を実行する、というイベント駆動型で実装されている。FMLにおけるMod初期化処理は、以下の3つのイベントにより3段階に分かれており、1から3まで順番に実行される。イベントModを作成するときには、適切なイベントに適切な初期化処理を登録しなくてはならない。10個のModがあったらFMLは次のように初期化処理を進める。"FMLPreInitializationEvent"イベントメッセージ来た有効なModリストを作成。10個のModそれぞれについて、このイベントに対応する初期化処理を実行する"FMLInitializationEvent"イベントメッセージ来た10個のModそれぞれについて、このイベントに対応する初期化処理を実行する"FMLPostInitializationEvent"メッセージ来た10個のModそれぞれについて、このイベントに対応する初期化処理を実行する特に、他のModと連携するModを書くときには、初期化の順序を意識する必要がある。初期化処理を登録する方法ModのメインとなるClassに@EventHandlerアノテーションを宣言しつつ、初期化用メソッドを追加する。このとき、適切な初期化イベント(クラス)を引数として選択すること。好きなメソッド名を登録できるが、可読性のために、以下のメソッド名にすることがModderの間では推奨されている。以下、またそれぞれの初期化イベントでどのような初期化処理を書くべきかの目安も記述。イベント一般的には、設定ファイルの読み込みやブロックなどの登録。事前の初期化作業に使う。イベントレシピの追加やこのMod用の各種データ設定など。load()を使っている人も多い模様。他のModとの連携はここで書くらしい。}(補足事項)やってしまいがちなミス。経験者は語る任意の初期化メソッドを登録できるのだが、これには大きな罠がある。1つのクラスの中で、同じイベントに対して複数の初期化メソッドを登録することができる(できてしまう)。具体的には以下のように、"FMLInitializationEvent"を指定した別の名前のメソッドを複数登録できてしまう。event){処理の中身};しかしこれは混乱の元なので避けたい。同じイベントに登録された複数のメソッドは実行順序が不定(環境依存)になってしまうためである*1。混乱を避けるために、1つの初期化イベントに対して1つだけ初期化メソッドを登録するのが無難だろう。少なくとも初心者モダーにとっては・・・。*2他のモダーのコードを眺めてみる他のモダーが、初期化処理をどのイベント段階で記述しているか、調べてみました。日本Modder界の重鎮、reginnさんのコード。マイクラ1.7系のチュートリアルを大量に公開されているので、ありがたい。handlerとなる公開メソッドを実装することができます。イベントである引数は必ず1つのみであることに注意が必要です。http://blog.kengo-toda.jp/entry/20111006/1317907239リスナーはどのようなクラスでもよく、メソッドを@Subscribeアノテーションで修飾するだけで使えます。リスナーが@Subscribeで修飾されたメソッドを複数個持っている場合、これらが実行される順番は環境依存となります。・・・上記が重くなってきたので増設。どなたでも、誤り指摘や修正など直接やっていただいてかまいません。このメモ書きに書いた内容を定期的に記事にまとめてアップします。この点、ご了承ください。定期的にバックアップはとっていますが、荒らしはご勘弁ください。GuavaのEventBusの仕様である*2:これは危険なので絶対に避けるべき!というご意見もいただきました。2014/07/28現在。はてなブログPro「Minecraft」「ComputerCraft」について知りたいならば「お勧めコンテンツ」の『ComputerCraftとは』をご覧下さい。