模块的原型

Mod的模板

我想着只要有那个的话就好了,于是我写下来了。
目标版本:forge-1.12-14.21.1.2426

前提
MDKダウンロード後、プロジェクトのセットアップが完了していること。

以下代码

package examplemod.proxy;

import examplemod.ExampleMod;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;

/***
 * クライアントとサーバー共通でアイテム、ブロック、ツールの読み込みます。
 * 
 * @author youname
 *
 */
@Mod.EventBusSubscriber
public class CommonProxy {
    public void preInit(FMLPreInitializationEvent event) {
        ExampleMod.logger.info("CommonProxy.preInit");
    }

    public void init(FMLInitializationEvent event) {
        ExampleMod.logger.info("CommonProxy.init");
    }

    public void postInit(FMLPostInitializationEvent event) {
        ExampleMod.logger.info("CommonProxy.postInit");
    }

    @SubscribeEvent
    public static void registerBlocks(RegistryEvent.Register<Block> event) {
        ExampleMod.logger.info("CommonProxy.registerBlocks");
    }

    /***
     * Modで追加したいアイテムを読み込みます。<br>
     * 勿論アイテムのクラスは自分で定義する必要があります。
     * 
     * @param event
     */
    @SubscribeEvent
    public static void registerItems(RegistryEvent.Register<Item> event) {
        ExampleMod.logger.info("CommonProxy.registerItems");
    }
}
package examplemod.proxy;

import examplemod.ExampleMod;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;

/***
 * クライアント側でリソースを読み込みます。
 * 
 * @author youname
 *
 */
@Mod.EventBusSubscriber(Side.CLIENT)
public class ClientProxy extends CommonProxy {
    @Override
    public void preInit(FMLPreInitializationEvent event) {
        super.preInit(event);
        ExampleMod.logger.info("ClientProxy.preInit");
    }

    /***
     * ブロックやアイテムのモデル(テクスチャは何を使うとかテクスチャの向きとか定義したファイル)を読み込みます。<br>
     * 
     * @param event
     */
    @SubscribeEvent
    public static void registerModels(ModelRegistryEvent event) {
        ExampleMod.logger.info("ClientProxy.registerModels");
    }
}
package examplemod.proxy;

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.relauncher.Side;

/***
 * サーバー側で行う処理。
 * 
 * @author youname
 *
 */
@Mod.EventBusSubscriber(Side.SERVER)
public class ServerProxy extends CommonProxy {
}
package examplemod;

import org.apache.logging.log4j.Logger;

import examplemod.proxy.CommonProxy;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

/***
 * Modの本体で、@Modを宣言することで本体として認識されます。<br>
 * modidの文字列はmcmod.infoのmodidと同一にしなければ、mcmod.infoが読み込まれないので設定値を合わせる必要があります。<br>
 * このクラスでMinecraftにブロックやアイテムの登録を行います。<br>
 * 
 * @author myname
 * @version forge-1.12-14.21.1.2426
 */
@Mod(modid = ExampleMod.MODID, version = ExampleMod.VERSION)
public class ExampleMod {

    // Modの識別やリソースのドメイン名に利用されます
    public static final String MODID = "examplemod";
    // Modのバージョン
    public static final String VERSION = "0.0.1";

    // プロキシ(読み込み処理)のパッケージ階層
    public static final String CLIENT_PROXY = "examplemod.proxy.ClientProxy";
    public static final String SERVER_PROXY = "examplemod.proxy.ServerProxy";

    // サーバー、クライアントを識別しインスタンスを保持します
    @SidedProxy(clientSide = CLIENT_PROXY, serverSide = SERVER_PROXY)
    public static CommonProxy proxy;

    // いまいち必要性が分からない
    @Mod.Instance
    public static ExampleMod instance;

    // ログ出力で使います
    public static Logger logger;

    /***
     * Mod本体のメソッド中最初に呼ばれます。<br>
     * 変数の初期化など後続の処理に影響のあることを済ませます。
     * 
     * @param event
     */
    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        logger = event.getModLog();
        proxy.preInit(event);
    }

    /***
     * preinitの後に呼ばれます。<br>
     * 言わばこのModの本体とも言える主要なメソッドです。<br>
     * とにかく主要なことはここで処理します。
     * 
     * @param event
     */
    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
        proxy.init(event);
    }

    /***
     * initの後に呼ばれます。つまりMod本体の中では最後に呼ばれます。<br>
     * リソースの開放や不要なデータの削除などお片付け的なことをします。
     * 
     * @param event
     */
    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        proxy.postInit(event);
    }
}

我在Github上公开了代码。

GitHub

Github (only need one option) : 即使只需要一个选项,也可以将Github的句子改写成中文。

bannerAds