Перейти к содержанию

Стадии загрузки мода#

Forge загружает моды в 3 стадии: Преинициализация, Инициализация и Постинициализация или preInit, init, postInit.

Есть и другие стадии, но эти три являются самыми главными. Все они выполняются в разные моменты загрузки мода и предназначены для разных целей.

Использование стадий#

Все стадии загрузки мода могут использоваться только в главном файле мода! То есть в файле с аннотацией @Mod. Стадии загрузки можно использовать при помощи аннотации @EventHandler.

Преинициализация#

Стадия преинициализации используется для того, чтобы дать игре знать о том, что есть в моде: блоках, предметах и так далее.

Чаще всего в этой стадии выполняются следующие действия:

  • Регистрация блоков и предметов.
  • Регистрация Tile Entity
  • Регистрация сущностей
  • Присвоение имен в Ore Dictionary

Событие этой стадии: FMLPreInitializationEvent. В главном файле его использование выглядит следующим образом:

@EventHandler
public void preInit(FMLPreInitializationEvent event) {
}

Инициализация#

Стадия инициализации предназначена для выполнения действий с объектами, зарегистрированными в преинициализации.

Чаще всего в этой стадии выполняются следующие действия:

  • Регистрация генераторов структур
  • Регистрация рецептов
  • Регистрация обработчиков действий

Событие этой стадии: FMLInitializationEvent. В главном файле его использование выглядит следующим образом:

@EventHandler
public void init(FMLInitializationEvent event) {
}

Постинициализация#

На стадии постинициализации рекомендуется выполнять действия, связанные с другими модами.

Событие этой стадии: FMLPostInitializationEvent. В главном файле его использование выглядит следующим образом:

@EventHandler
public void postInit(FMLPostInitializationEvent event) {
}

Итог#

Учитывая 3 основные стадии загрузки Forge мода, наш главный файл мода должен выглядит приблизительно так:

package ru.mcmodding.tutorial;

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 = "tut")
public class Tutorial {
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        // Какой-то код
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        // Какой-то код
    }

    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        // Какой-то код
    }
}