關(guān)于事件不同總線
今天有個人在我群貼了如下代碼。他抄h(huán)arbinger,想注冊維度,但沒注冊上。
那當(dāng)然注冊不上。
Harbinger的維度教程:
https://harbinger.covertdragon.team/chapter-19/dimension/
Harbinger的事件教程:
https://harbinger.covertdragon.team/chapter-03/
注意,F(xiàn)ML 的那幾個用于 Mod 加載的事件不算。那些是 Mod 加載周期的事件,在那個時候 FML 需要使用別的事件總線(具體來說,是 Guava 的事件總線)。
——Harbinger
當(dāng)你看到EventHandler和FMLPreInitializationEvent的時候,你就知道這玩意顯然不是隨便自己開個類,打個EventBusSubscriber就完事的。這東西得寫在主類里。Harbinger教程沒說,但你一看,心里應(yīng)該大概有個數(shù)。
那注冊緯度和item的registry區(qū)別在哪里? item直接SubscribeEvent就注冊了。
——群友
事件有兩種,分布在不同的總線。
通俗點(diǎn)說,一個是底層的,一個是表層的
注冊物品用的是表層的總線“RegistryEvent.Register<Item>”,用SubscribeEvent+EventBusSubscriber這種方式監(jiān)聽。FMLPreInitializationEvent這種是底層的事件,在主類里用EventHandler監(jiān)聽。
FMLPreInitializationEvent、FMLInitializationEvent、FMLPostInitializationEvent、FMLServerStartingEvent,這種你一看FML開頭的,絕對不是善茬,肯定是寫在主類那種底層事件。