关于事件不同总线
今天有个人在我群贴了如下代码。他抄harbinger,想注册维度,但没注册上。
那当然注册不上。
Harbinger的维度教程:
https://harbinger.covertdragon.team/chapter-19/dimension/
Harbinger的事件教程:
https://harbinger.covertdragon.team/chapter-03/
注意,FML 的那几个用于 Mod 加载的事件不算。那些是 Mod 加载周期的事件,在那个时候 FML 需要使用别的事件总线(具体来说,是 Guava 的事件总线)。
——Harbinger
当你看到EventHandler和FMLPreInitializationEvent的时候,你就知道这玩意显然不是随便自己开个类,打个EventBusSubscriber就完事的。这东西得写在主类里。Harbinger教程没说,但你一看,心里应该大概有个数。
那注册纬度和item的registry区别在哪里? item直接SubscribeEvent就注册了。
——群友
事件有两种,分布在不同的总线。
通俗点说,一个是底层的,一个是表层的
注册物品用的是表层的总线“RegistryEvent.Register<Item>”,用SubscribeEvent+EventBusSubscriber这种方式监听。FMLPreInitializationEvent这种是底层的事件,在主类里用EventHandler监听。
FMLPreInitializationEvent、FMLInitializationEvent、FMLPostInitializationEvent、FMLServerStartingEvent,这种你一看FML开头的,绝对不是善茬,肯定是写在主类那种底层事件。