来源:https://www.minecraftforge.net/forum/topic/24235-preinit-init-and-postinit/
http://greyminecraftcoder.blogspot.com/2013/11/how-forge-starts-up-your-code.html
事件处理程序
在启动过程中,Forge将多次调用您的Mod,以允许您添加新的方块,物品,读取配置文件,以及通过在适当位置注册您的类来将自身集成到游戏中。
在Forge可以调用您的Mod之前,它需要知道要使用哪些方法。这是@EventHandler
进入的地方。例如-在启动期间,Forge将针对所有加载的mod经历多个阶段:
PreInitialization
先执行其他操作。读取您的配置,创建方块,物品等,然后将其注册到GameRegistry
中。
Initialization
进行您的mod设置。构建您关心的任何数据结构。注册合成表。
PostInitialization
处理与其他mod的交互,根据此完成设置。
对所有mod执行PreInitialization
,然后执行Initialization
,最后执行PostInitialization
。
当多个模块之间可能存在交互时,分阶段初始化模块特别有用-例如,如果一个模块添加了一种额外的木材(在PreInit
期间),而您的模块添加了使用该木材的配方(在Init
期间)。
当Forge想要告诉您的mod该运行您的PreInitialization
代码的时候,它会通读您mod的代码,直到在方法前找到@EventHandler
,然后检查参数定义以查看它是否与FMLPreInitializationEvent
类匹配。如果是这样,它将调用该方法。
根据您的模块是在CombinedClient
还是DedicatedServer
中,PreInitialization,Initialization,PostInitialization
事件通常需要做不同的事情。因此,我建议您的事件处理程序应立即调用CommonProxy
中的方法,请参见下文。
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
proxy.preInit();
}
@EventHandler
public void load(FMLInitializationEvent event) {
proxy.load();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
proxy.postInit();
}
来自http://greyminecraftcoder.blogspot.com/2013/11/how-forge-starts-up-your-code.html