提供: Minecraft Modding Wiki
移動先: 案内検索
(返値の明示、及びイベントクラス名の修正)
(ちょっと一般化)
18行目: 18行目:
 
== 初期化イベントを受け取る ==
 
== 初期化イベントを受け取る ==
  
@EventHandlerアノテーションをメソッドにつけると、MODが読み込まれる時にそのメソッドが呼ばれるためその中で様々な処理を行えます。ただし、その引数はある特定のイベントを表すクラス一つのみでなければなりません。
+
@EventHandlerアノテーションをメソッドにつけると、とあるタイミング(この場合はMODが読み込まれるとき)にそのメソッドが呼ばれるためその中で様々な処理を行えます。ただし、その引数はある特定のイベントを表すクラス一つのみでなければなりません。
  
 
<source lang="java">
 
<source lang="java">
54行目: 54行目:
 
== 様々なイベントを受け取る ==
 
== 様々なイベントを受け取る ==
  
@EventBusSubscriberアノテーションをクラスにつけるとさらに別の種類のイベントを受け取ることが出来ます。イベントを受け取るためには@SubscribeEventアノテーションを'''static'''メソッドにつけてください。
+
@EventBusSubscriberアノテーションをクラスにつけるとさらに別のタイミングでメソッドが呼び出されるようにすることができます。呼び出されるようにしたいメソッドには@SubscribeEventアノテーションを'''static'''メソッドにつけてください。
  
 
<source lang="java">
 
<source lang="java">

2018年2月15日 (木) 21:06時点における版

ここでは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.PreInitializationEvent;
import net.minecraftforge.fml.common.event.InitializationEvent;
import net.minecraftforge.fml.common.event.PostInitializationEvent;

@Mod(modid = "samplemod")
public class Sample {
    @EventHandler
    public void preInit(PreInitializationEvent event) {
        // ...
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        // ...
    }

    @EventHandler
    public void postInit(PostInitializationEvent event) {
        // ...
    }
}

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

様々なイベントを受け取る

@EventBusSubscriberアノテーションをクラスにつけるとさらに別のタイミングでメソッドが呼び出されるようにすることができます。呼び出されるようにしたいメソッドには@SubscribeEventアノテーションをstaticメソッドにつけてください。

package info.minecraftjp;

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 void preInit(FMLPreInitializationEvent event) {
        // ...
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        // ...
    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        // ...
    }

    @SubscribeEvent
    public static void registerItem(RegistryEvent.Register<Item> event) {
        // ...
    }
}