用户:MashKJo/1.12.2模组开发教程/4.Forge事件系统:修订间差异

无编辑摘要
 
(未显示同一用户的2个中间版本)
第62行: 第62行:
  }
  }


这里我们新建了一个EventHandler类来存放事件监听器。这里我们监听了EntityJoinWorldEvent——顾名思义,实体在世界上生成时,这个事件会被发布。这个事件有着若干getter,我们通过getEntity这一getter获取了生成在世界中的实体对象,并通过instanceof运算符判断其是否为玩家——没错,玩家加入世界的实质是生成了EntityPlayer对象(注意这里笔者的用词,笔者并没有说“生成了一个EntityPlayer对象”,想想看这是为什么)。然后有鉴于这个方法是static的,我们用了自动注册的注解。
这里我们新建了一个EventHandler类来存放事件监听器。这里我们监听了EntityJoinWorldEvent——顾名思义,实体在世界上生成时,这个事件会被发布。这个事件有着若干getter,我们通过getEntity这一getter获取了生成在世界中的实体对象,并通过instanceof运算符判断其是否为玩家——没错,玩家加入世界的实质是生成了EntityPlayer对象(注意这里作者的用词,作者并没有说“生成了一个EntityPlayer对象”,想想看这是为什么)。然后有鉴于这个方法是static的,我们用了自动注册的注解。


现在运行游戏客户端,随便进入一个存档,你应该能在命令行中看到输出的字符串了。但是注意:这个字符串输出了两次,这实际上是因为两个逻辑端各调用了一次这个监听方法。那么,我们有什么办法能判断当前所处的逻辑端呢?这个会在后面讲到,读者现在留个心眼就行。
现在运行游戏客户端,随便进入一个存档,你应该能在命令行中看到输出的字符串了。但是注意:这个字符串输出了两次,这实际上是因为两个逻辑端各调用了一次这个监听方法。那么,我们有什么办法能判断当前所处的逻辑端呢?这个会在后面讲到,读者现在留个心眼就行。
第72行: 第72行:


=== 事件的优先级 ===
=== 事件的优先级 ===
我们可以为事件监听方法指定被调用的优先级,因为@SubscribeEvent注解中有一个参数priority,类型为EventPriority,是个枚举类,有五个实例:HIGHEST、HIGH、NORMAL、LOW、LOWEST。各自的含义应该不需要笔者多说。priority这一参数默认为NORMAL。
我们可以为事件监听方法指定被调用的优先级,因为@SubscribeEvent注解中有一个参数priority,类型为EventPriority,是个枚举类,有五个实例:HIGHEST、HIGH、NORMAL、LOW、LOWEST。各自的含义应该不需要作者多说。priority这一参数默认为NORMAL。


=== @Cancelable ===
=== @Cancelable ===
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,430

个编辑