Forge1.8文档——核心概念(生命周期、资源)

2.4 Mod生命周期

在Mod加载过程中,会有各种生命周期会在Mod特定的事件总线上触发。在这些事件期间中执行许多操作,例如注册对象、初始数据生成或与其他Mod的通信。
每个使用@EventBusSubscriber(bus = Bus.MOD)应注册事件监听器。每个使用Mod构造函数的应注册事件监听器

@Mod.EventBusSubscriber(modid = "mymod", bus = Mod.EventBusSubscriber.Bus.MOD)
public class MyModEventSubscriber {
  @SubscribeEvent
  static void onCommonSetup(FMLCommonSetupEvent event) { ... }
}

@Mod("mymod")
public class MyMod {
  public MyMod() {
    FMLModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup);
  } 

  private void onCommonSetup(FMLCommonSetupEvent event) { ... }
}

大多数生命周期事件都是并行触发的:所有mod都将同时接收相同事件
Mod必须注意线程安全,就像调用其他Mod的API或者访问普通系统时,通过ParallelDispatchEvent#enqueueWork来执行代码

2.4.1 注册表事件

注册表事件是在Mod实例构造之后被触发的。其中有两个事件,并且这个两个事件会同步触发。NewRegistryEvent事件和RegistryEvent$Rfeister事件。

  • NewRegistryEvent事件:允许modder使用RgeistryBuilder类注册自定义注册表。
  • RgeistryEvent$Register<?>事件:用于将对象注册到注册表中。每个注册表触发一个Register事件

2.4.2 数据生成

如果游戏设置为运行时数据生成,那么GatherDataEvent将是最后一个触发的。此事件将Mods的数据提供给其关联的数据生成器。此事件为同步触发的。

2.4.3 通用设置

FMLCommonSetupEvent用于物理客户端和服务器的通用操作,例如注册等。

2.4.4 端设置

端设置时间在各自的物理端触发:物理客户端上FMLClientSetupEvent和专用服务器上的FMLDedicatedServerSetupEvent。这时镜像物理端特定初始化的地方,例如注册客户端密钥绑定。

2.4.5 InterModComms(Mod通信)

消息能在跨Mod之间发送是通过两个事件实现的。InterModEnqueueEvent、InterModProcessEvent。
InterModComms:负责给各个Mod保存消息的类。这些方法在生命周期事件期间可以安全调用,因为它有ConcurrentMap支持

  • InterModEnqueueEvent:使用InterModComms#sendTo向不同的Mod发送消息。这些方法接受modid、消息数据密匙、消息数据提供者。此外还可以指定消息发送者,默认为调用者的Modid
  • InterModProcessEvent:使用InterModComms#getMessages获取消息流,参数Modid为调用者的Modid。此外还可以指定一个关键字来过滤消息。这个方法将返回IMCMessages流程,其中包含数据发送方、数据接收方、数据密匙及数据。
    FMLConstructModEvent,在Mod实例构建之后,但在RegistryEvents之前被触发。FMLLoadCompleteEvent在InterModComms事件之后被触发,并且在mod加载过程完成时触发。

2.5 资源

资源是游戏使用的额外数据,存储在数据文件中,而不是代码中。我的世界有两个主要资源系统:

  • 逻辑客户端的资产:用于模型、纹理和本地化等视觉效果。这个通常被称为资源包。
  • 逻辑服务器的数据:如食物、战利品表等。这个通常被称为数据包
    在默认的Mod开发工具包中,资产和数据默认在src/main/resources目录下
    当启用多个资源包或者数据包时,通常这些会被合并。资源包会被最新启用的替换掉,数据包会进行内容合并。
    所有资源都应该有遵循驼峰命名法。

2.5.1 资源位置

我的世界使用ResorcesLoactions识别资源。ResorcesLoactions包含两个部分:名称空间和路径。它通常指向assets/// 处的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值