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

(// Edit via Wikiplus)
→‎Minecraft事件的注册、取消和优先级:​ // Edit via Wikiplus
第70行: 第70行:


那么,如果真的找不到能用的事件,怎么办?尽管Forge的事件非常多,有的甚至做到了仅仅针对某个单一的游戏元素(如RenderItemInFrameEvent,这个事件影响物品在展示框中的渲染情况),但任何API都做不到完全满足使用者的需求。Forge官方早在多年前就停止了对1.12 Forge的维护,所以指望着去Pull Request是不行了。这个时候,你就只能考虑使用一些黑魔法了。
那么,如果真的找不到能用的事件,怎么办?尽管Forge的事件非常多,有的甚至做到了仅仅针对某个单一的游戏元素(如RenderItemInFrameEvent,这个事件影响物品在展示框中的渲染情况),但任何API都做不到完全满足使用者的需求。Forge官方早在多年前就停止了对1.12 Forge的维护,所以指望着去Pull Request是不行了。这个时候,你就只能考虑使用一些黑魔法了。
=== 事件的优先级 ===
我们可以为事件监听方法指定被调用的优先级,因为@SubscribeEvent注解中有一个参数priority,类型为EventPriority,是个枚举类,有五个实例:HIGHEST、HIGH、NORMAL、LOW、LOWEST。各自的含义应该不需要笔者多说。priority这一参数默认为NORMAL。
=== @Cancelable ===
这个注解用于修饰一个事件类:该事件可被取消。被取消的事件对应的其他尚未被调用的事件监听方法,则不会被调用,所以这个最好搭配着EventPriority来操作。
另外,@SubscribeEvent还有一个参数:boolean receiveCanceled,默认为false,设定为true则又可以让被取消的事件继续发挥作用。
=== @HasResult ===
这个注解同样用于修饰一个事件类,表明:该事件有“结果”——没错,事件监听方法一定为void,但是事件本身可以有结果——Event.Result这个枚举类中的三个实例:ALLOW、DEFAULT和DENY。它们的含义随着具体事件的类型而变化。这个说实话,不太常用,可以直接忽略。
行政员、​优秀编辑者、​界面管理员、​监督员、​管理员、​小部件编辑者
3,417

个编辑