提供: Minecraft Modding Wiki
移動先: 案内検索
(様々なイベントを受け取る: 改善)
(次にやった方がいいこと)
 
(5人の利用者による、間の10版が非表示)
5行目: 5行目:
 
== 必要最低限のコード ==
 
== 必要最低限のコード ==
  
MODのエントリポイントとなる@Modアノテーションが付いたクラスのみがある状態です。何の処理も行えないのですがMod一覧には表示されます。
+
MODであるというマークとなる@Modアノテーションが付いたクラスのみがある状態です。何の処理も行えないのですがMod一覧には表示されます。
  
 
<source lang="java">
 
<source lang="java">
18行目: 18行目:
 
== 初期化イベントを受け取る ==
 
== 初期化イベントを受け取る ==
  
@EventHandlerアノテーションをメソッドにつけると、MODが読み込まれる時にそのメソッドが呼ばれるためその中で様々な処理を行えます。ただし、その引数はある特定のイベントを表すクラス一つのみでなければなりません。
+
@EventHandlerアノテーションをメソッドにつけると、とあるタイミング(この場合はMODが読み込まれるとき)にそのメソッドが呼ばれるためその中で様々な処理を行えます。ただし、その引数はある特定のイベントを表すクラス一つのみでなければなりません。
  
 
<source lang="java">
 
<source lang="java">
25行目: 25行目:
 
import net.minecraftforge.fml.common.Mod;
 
import net.minecraftforge.fml.common.Mod;
 
import net.minecraftforge.fml.common.Mod.EventHandler;
 
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.PreInitializationEvent;
+
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.InitializationEvent;
+
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.PostInitializationEvent;
+
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
  
 
@Mod(modid = "samplemod")
 
@Mod(modid = "samplemod")
 
public class Sample {
 
public class Sample {
 
     @EventHandler
 
     @EventHandler
     public preInit(PreInitializationEvent event) {
+
     public void preInit(FMLPreInitializationEvent event) {
         // ...
+
         // Minecraftを立ち上げて最初に呼ばれる処理アイテムやブロックなどの登録をする
 
     }
 
     }
  
 
     @EventHandler
 
     @EventHandler
     public init(InitializationEvent event) {
+
     public void init(FMLInitializationEvent event) {
         // ...
+
         // 2番めに呼ばれる処理色々書く
 
     }
 
     }
  
 
     @EventHandler
 
     @EventHandler
     public postInit(PostInitializationEvent event) {
+
     public void postInit(FMLPostInitializationEvent event) {
         // ...
+
         // 最後に呼ばれる処理他のmodとの連携に使う
 
     }
 
     }
 
}
 
}
52行目: 52行目:
 
* [https://github.com/MinecraftForge/MinecraftForge/blob/b15269fde504dbe8837a540202a0947c1a5b3e62/src/main/java/net/minecraftforge/fml/common/Mod.java#L278-L303 公式ドキュメント(2017/12/13時点)]
 
* [https://github.com/MinecraftForge/MinecraftForge/blob/b15269fde504dbe8837a540202a0947c1a5b3e62/src/main/java/net/minecraftforge/fml/common/Mod.java#L278-L303 公式ドキュメント(2017/12/13時点)]
  
== 様々なイベントを受け取る ==
+
== 次にやった方がいいこと ==
  
@EventBusSubscriberアノテーションをクラスにつけるとさらに別の種類のイベントを受け取ることが出来ます。イベントを受け取るためには@SubscribeEventアノテーションを'''static'''メソッドにつけてください。
+
* @Modアノテーションの変数の設定
 
+
* [[mcmod.infoの設定]]
<source lang="java">
+
* [[1.12のアイテム追加(旧式)]]
package info.minecraftjp;
+
* [[1.12のブロック追加(旧式)]]
 
 
import net.minecraftforge.fml.common.Mod;
 
import net.minecraftforge.fml.common.Mod.EventHandler;
 
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
 
import net.minecraftforge.fml.common.event.PreInitializationEvent;
 
import net.minecraftforge.fml.common.event.InitializationEvent;
 
import net.minecraftforge.fml.common.event.PostInitializationEvent;
 
 
 
@Mod(modid = "samplemod")
 
@EventBusSubscriber
 
public class Sample {
 
    @EventHandler
 
    public preInit(PreInitializationEvent event) {
 
        // ...
 
    }
 
 
 
    @EventHandler
 
    public init(InitializationEvent event) {
 
        // ...
 
    }
 
 
 
    @EventHandler
 
    public postInit(PostInitializationEvent event) {
 
        // ...
 
    }
 
 
 
    @SubscribeEvent
 
    public static registerItem(RegistryEvent.Register<Item> event) {
 
        // ...
 
    }
 
}
 
</source>
 

2021年8月15日 (日) 22:47時点における最新版

ここではMODのメインクラスの作り方を解説します。

必要最低限のコード[編集]

MODであるというマークとなる@Modアノテーションが付いたクラスのみがある状態です。何の処理も行えないのですがMod一覧には表示されます。

package info.minecraftjp;

import net.minecraftforge.fml.common.Mod;

@Mod(modid = "samplemod")
public class Sample {}

初期化イベントを受け取る[編集]

@EventHandlerアノテーションをメソッドにつけると、とあるタイミング(この場合はMODが読み込まれるとき)にそのメソッドが呼ばれるためその中で様々な処理を行えます。ただし、その引数はある特定のイベントを表すクラス一つのみでなければなりません。

package info.minecraftjp;

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

@Mod(modid = "samplemod")
public class Sample {
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        // Minecraftを立ち上げて最初に呼ばれる処理アイテムやブロックなどの登録をする
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        // 2番めに呼ばれる処理色々書く
    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        // 最後に呼ばれる処理他のmodとの連携に使う
    }
}

これが定番です。ただし、@EventHandlerアノテーションがついてさえいればメソッドの名前や引数の名前は自由で、「ある特定のイベントを表すクラス」というのもこれだけではありません。

次にやった方がいいこと[編集]