文章目录
事件系统
事件分两种:一种是 FML Mod 加载事件,在 FMLJavaModLoadingContext.get().getModEventBus() 中注册;另一种是游戏内事件,在 MinecraftForge.EVENT_BUS 中注册。
在事件总线上注册监听器
监听器需要在 Mod 的构造函数中注册。具体接口的用法去看 net.minecraftforge.eventbus.api.IEventBus 的注释吧,咱就不在这里赘述了。
FML Mod 加载事件
这类事件都是在进入游戏主界面前触发的事件,多用于注册各种对象。这里的事件发布于 FMLJavaModLoadingContext.get().getModEventBus() 上。
Mod 加载顺序(从 Log 里面读出来的,如有错误还烦请指正):
- LifeCycleEvent:CONSTRUCT (不能监听)
- 这里是执行你的 Mod 主类的构造函数
- 用来注册事件侦听器
Mod.EventBusSubscriber注解的事件侦听器也是在这时候被注册的- 在这里注册 Mod 的 配置文件
- RegistryEvent.NewRegistry
- 用于新建 Registry
- RegistryEvent.Register<T>
- 这里 T 是注册项的基类
- 具体顺序:引用自 Forge 文档
-
RegistryEvents are currently supported for the following types:
Block,Item,Potion,Biome,SoundEvent,PotionType,Enchantment,IRecipe,VillagerProfession,EntityEntry - 最后是 Mod 自定义的 Registry
- 不建议用事件的
register方法注册,建议使用 DeferredRegister 注册 DeferredRegister<T>开始注册,并为RegistryObject<T>填充实例
- 生成、读取 Mod 配置文件(无事件)
- 先生成 Client 的配置文件
- 后生成 Common 的配置文件
- FMLCommonSetupEvent
- Capability 在这时注册
- LifecycleEvent:SIDED_SETUP
- 这里区分启动的端,如果是服务端,则触发
FMLDedicatedServerSetupEvent - 如果是客户端,则触发
FMLClientSetupEvent
- 这里区分启动的端,如果是服务端,则触发
- Forge Version Check
- 这里会检查 Forge 和 Mod 的版本是否为最新
- InterModEnque

本文介绍了Minecraft 1.15 Forge Mod开发中的事件系统,包括FML Mod加载事件和游戏内事件,详细讲解了如何在事件总线上注册监听器以及服务器生命周期。此外,还探讨了注册系统和能力系统,特别是如何为物品添加能力,包括自定义物品和已存在物品的处理,以及两种方式的优先级。
最低0.47元/天 解锁文章

835

被折叠的 条评论
为什么被折叠?



