提供: Minecraft Modding Wiki
(→1.6からのコーディング方法) |
|||
6行目: | 6行目: | ||
1.6.1では多数の変更があったが、MODのエントリポイントとなる@Modアノテーションがついたクラスはあまり変わっていない。 | 1.6.1では多数の変更があったが、MODのエントリポイントとなる@Modアノテーションがついたクラスはあまり変わっていない。 | ||
− | 1.6.1のForgeからはPreInitアノテーションや、Initアノテーションなどの使用が非推奨になり、@Mod. | + | 1.6.1のForgeからはPreInitアノテーションや、Initアノテーションなどの使用が非推奨になり、@Mod.EventHandlerを代わりに使う。 |
2014年6月12日 (木) 18:15時点における版
1.6からのコーディング方法
※1.6にアップデートされてから頻繁にForgeのバージョンが上がるので、もしかしたら多少の相違があるかもしれません。
1.6.1では多数の変更があったが、MODのエントリポイントとなる@Modアノテーションがついたクラスはあまり変わっていない。
1.6.1のForgeからはPreInitアノテーションや、Initアノテーションなどの使用が非推奨になり、@Mod.EventHandlerを代わりに使う。
具体的な使用例は以下の通り。
package mods.sample; import cpw.mods.fml.common.*; import cpw.mods.fml.common.event.*; import cpw.mods.fml.common.Mod.*; import cpw.mods.fml.common.network.NetworkMod; /** * Sample Mod クラス. * * Modアノテーションをつけるだけで、Modクラスとして認識される。 * クラス名は自由に決めることができ、他のクラスを継承する必要もない。 * なお、Modアノテーションの必須項目は modid のみで、その他は外部ファイルから設定することができ、省略することも可能。 * * また、NetworkMod は不要であれば省略してもよい。 * */ @Mod(modid = "sample-mod-id", name = "sample-mod-name") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class ModSample { /** * 指定したIDのModのインスタンス. * * フィールド名、アクセス指定子はなんでもよい。不要であれば省略可能。 * 自身のインスタンスがインジェクションされる。 */ @Instance("sample-mod-id") protected static ModSample instance; /** * サーバー、クライアントで異なる処理を行わせる場合に用いるプロキシークラス. * * フィールド名、はなんでもよい。不要であれば省略可能。(public以外のアクセス指定子が使えるかは不明) * 実行環境にあわせて、どちらかのインスタンスがインジェクションされる。 */ @SidedProxy( clientSide = "mods.sample.ClientProxy", serverSide = "mods.sample.ServerProxy") public static SampleProxy proxy; /** * 初期化前処理. * * メソッド名はなんでもよい。不要であれば省略可能。 * * @param event * FMLの初期化前処理イベント */ @EventHandler public void preInit(FMLPreInitializationEvent event) { // 初期化前処理 // 設定ロードや GameRegistory への登録を行うタイミング // 追加Blockや追加Itemはこのタイミングで登録を行う } /** * 初期化処理. * * メソッド名はなんでもよい。不要であれば省略可能。 * * @param event * FMLの初期化処理イベント */ @EventHandler public void init(FMLInitializationEvent event) { // 初期化処理 // Modのセットアップや、他Modとの連携処理を行うタイミング } // その他のイベント // ----------------------------------------------------- // --------------------------------- // client's events // --------------------------------- // 初期化後処理イベント @EventHandler public void postInit(FMLPostInitializationEvent event) { } // 署名問題イベント。PreInitイベントの前に発生 @EventHandler public void fingerprintWarning(FMLFingerprintViolationEvent event) { } // IMCメッセージイベント。InitEventのあとに発生 @EventHandler public void handleIMC(IMCEvent event) { } // --------------------------------- // Server's events // --------------------------------- @EventHandler public void handleServerAboutToStart(FMLServerAboutToStartEvent event) { } @EventHandler public void handleServerStarting(FMLServerStartingEvent event) { } @EventHandler public void handleServerStarted(FMLServerStartedEvent event) { } @EventHandler public void handleServerStopping(FMLServerStoppingEvent event) { } @EventHandler public void handleServerStopped(FMLServerStoppedEvent event) { } // その他アノテーション // ----------------------------------------------------- @Metadata protected static MetaData metadata; @InstanceFactory public static ModSample instance() { return new ModSample(); } }
(イベントの詳細はModインターフェイスの JavaDoc を参照)
基本的に、前処理で設定の読み込み、及び追加するBlock、Itemのインスタンス生成および登録を行い、初期化処理でそれ以外の初期化処理を行う。殆どのModでは、初期化前処理と初期化処理の2つだけで事足りると思われる。
なお、コンストラクターでは、自身の内部変更のみを行い、FMLや他Modへの干渉は行うべきではない。これは、インスタンスが生成されるタイミングでは、他Modのロードや生成が保証されていないためである。そのため、基本的にはコンストラクターは定義せず、デフォルトのコンストラクターが使用されるようにする方が良い。
基本的に変わったことは、既存のイベントハンドラ用のアノテーションが全て EventHandler に変わっただけである。 そのため既存のMod作者は苦戦することはないはずだが、もし躓くようなら1.5以前のチュートリアルも現時点では参考になるので参照してほしい。