EventBusSubscriber 注解
基本信息
| 属性 | 值 |
|---|---|
| 所属 | Forgelin(modid forgelin) |
| 类型 | 注解(annotation class) |
| 源码 | EventBusSubscriber.kt:30-37 |
| 保留策略 | AnnotationRetention.RUNTIME |
| 目标 | AnnotationTarget.TYPE(仅类) |
作用
本注解是 Forge 1.12.2 版 net.minecraftforge.fml.common.Mod.EventBusSubscriber
在 1.7.10 上的 Kotlin 复刻版。1.7.10 的 Forge 尚未提供该注解,
Forgelin 把它原样搬过来,使 Kotlin mod 也能在类级别一次性订阅事件,
而不必逐个方法写 @SubscribeEvent。
源码文件头部注释明确写明来源(EventBusSubscriber.kt:22-24):
取自 MinecraftForge 1.12.x 分支的 net.minecraftforge.fml.common.Mod。
参数
| 参数 | 类型 | 默认值 | 含义 |
|---|---|---|---|
value |
vararg Side |
[Side.CLIENT, Side.SERVER] |
目标侧;Side 取自 cpw.mods.fml.relauncher.Side |
modid |
String |
"" |
仅当注解不在带 @Mod 的同一个类上时需要填写,用于避免提前类加载 |
实际注册过程
- 启用条件是 mod 的
@Mod(modLanguageAdapter = ...)恰好为net.shadowfacts.forgelin.KotlinAdapter(ForgelinAutomaticEventSubscriber.kt:39-42), 否则直接跳过并打 debug 日志。 - FML 自身也会扫描该注解,因此 Kotlin
object会被错误地按静态方式注册。 Forgelin 在 PreInit 阶段主动撤销并重注册(见 自动事件订阅器)。 - 解析
value时通过反射读取ModAnnotation.EnumHolder.value字段 (ForgelinAutomaticEventSubscriber.kt:110-111)以拿到侧名字符串; 解析不出时回退到全部侧。
限制
value的默认声明是vararg val value: Side = [Side.CLIENT, Side.SERVER], 由于是 vararg,Kotlin 侧必须用EventBusSubscriber(Side.CLIENT)形式传值。- 注解
@Target只有TYPE,不能标在方法上;类内方法仍需各自标@SubscribeEvent。
相关条目
- KotlinAdapter - 启用本注解注入的前提
- 自动事件订阅器 - 撤销静态注册并重注册的实际代码