最新版 |
編集中の文章 |
6行目: |
6行目: |
| 1.6.1では多数の変更があったが、MODのエントリポイントとなる@Modアノテーションがついたクラスはあまり変わっていない。 | | 1.6.1では多数の変更があったが、MODのエントリポイントとなる@Modアノテーションがついたクラスはあまり変わっていない。 |
| | | |
− | 1.6.1のForgeからはPreInitアノテーションや、Initアノテーションなどの使用が非推奨になり、@Mod.EventHandlerを代わりに使う。 | + | 1.6.1のForgeからはPreInitアノテーションや、Initアノテーションなどの使用が非推奨になり、@Mod.EventHandlerを変わりに使う。 |
| | | |
| | | |
15行目: |
15行目: |
| package mods.sample; | | package mods.sample; |
| | | |
− | import cpw.mods.fml.common.*;
| + | import cpw.mods.fml.common.Mod; |
− | import cpw.mods.fml.common.event.*;
| |
− | import cpw.mods.fml.common.Mod.*; | |
| import cpw.mods.fml.common.network.NetworkMod; | | import cpw.mods.fml.common.network.NetworkMod; |
| | | |
− | /**
| + | |
− | * Sample Mod クラス.
| + | @Mod(modid = "foo", version = "1.0.0", name = "sample") |
− | *
| |
− | * Modアノテーションをつけるだけで、Modクラスとして認識される。
| |
− | * クラス名は自由に決めることができ、他のクラスを継承する必要もない。
| |
− | * なお、Modアノテーションの必須項目は modid のみで、その他は外部ファイルから設定することができ、省略することも可能。
| |
− | *
| |
− | * また、NetworkMod は不要であれば省略してもよい。
| |
− | *
| |
− | */
| |
− | @Mod(modid = "sample-mod-id", name = "sample-mod-name") | |
| @NetworkMod(clientSideRequired = true, serverSideRequired = false) | | @NetworkMod(clientSideRequired = true, serverSideRequired = false) |
| public class ModSample { | | 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;
| |
| | | |
− | /**
| + | |
− | * 初期化前処理.
| + | @Mod.EventHandler |
− | *
| |
− | * メソッド名はなんでもよい。不要であれば省略可能。
| |
− | *
| |
− | * @param event
| |
− | * FMLの初期化前処理イベント
| |
− | */
| |
− | @EventHandler | |
| public void preInit(FMLPreInitializationEvent event) { | | 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 | + | @Mod.EventHandler |
− | public void handleServerStopping(FMLServerStoppingEvent event) { | + | public void Init(FMLInitializationEvent event) { |
− | }
| + | //処理 |
| | | |
− | @EventHandler
| |
− | public void handleServerStopped(FMLServerStoppedEvent event) {
| |
| } | | } |
| | | |
− | // その他アノテーション
| |
− | // -----------------------------------------------------
| |
− |
| |
− | @Metadata
| |
− | protected static MetaData metadata;
| |
− |
| |
− | @InstanceFactory
| |
− | public static ModSample instance() {
| |
− | return new ModSample();
| |
− | }
| |
| } | | } |
| | | |
| </source> | | </source> |
| | | |
− | 基本的に、前処理で設定の読み込み、及び追加するBlock、Itemのインスタンス生成および登録を行い、初期化処理でそれ以外の初期化処理を行う。殆どのModでは、初期化前処理と初期化処理の2つだけで事足りると思われる。
| + | 基本的に変わったことはEventHandlerだけなのでそこまで苦戦することはないはずだが、もし躓くようなら1.5のチュートリアルも現時点では参考になるので参照してほしい。 |
− | | |
− | なお、コンストラクターでは、自身の内部変更のみを行い、FMLや他Modへの干渉は行うべきではない。これは、インスタンスが生成されるタイミングでは、他Modのロードや生成が保証されていないためである。そのため、基本的にはコンストラクターは定義せず、デフォルトのコンストラクターが使用されるようにする方が良い。
| |
− | | |
| | | |
| | | |
− | 基本的に変わったことは、既存のイベントハンドラ用のアノテーションが全て EventHandler に変わっただけである。
| + | 前処理の部分に自分のBlockクラスを継承したクラスのインスタンス生成&Item登録などを済ますこと。 |
− | そのため既存のMod作者は苦戦することはないはずだが、もし躓くようなら[[1.5以前のチュートリアル]]も現時点では参考になるので参照してほしい。
| |