666885489
本帖最后由 666885489 于 2021-4-11 11:08 编辑


前言:

这个前置最初的定位是为Crafting Dead(行尸走肉) MOD 服务的

但是考虑到不如直接搭建一个Forge事件桥,让插件监听到MOD的事件

这个严格来说不是插件,而是MOD,但是确实是为Bukkit插件服务的



优势:

完全开源,帮助你理解其中原理,帮助开发

傻瓜式包装,简单易学且实用

监听器由纯ASM实现,避免产生过多的性能损耗,尽量提高效率

监听目标包装使用Cglib实现,只需写几个抽象方法即可,不必手动反射获取字段/方法,增加代码可读性

常用的Minecraft PlayerEntity->Bukkit Player等转换方法已经包装,需要其他可以随时提出Issue



实例/使用方法:
  1. public final class Test implements EventHolder<Test.LivingEventObject> {
  2.     public Test() {
  3.         register(EventBridge.builder().source("net.minecraftforge.event.entity.living.LivingEvent").build());
  4.     }
  5.    
  6.     @Override
  7.     public void handle(EventWrapper<Test.LivingEventObject> eventWrapper) {
  8.         LivingEventObject eventObject = eventWrapper.as(LivingEventObject.class);

  9.         System.out.println(
  10.                 "监听到来自实体: " + eventObject.getEntityLiving().getName()
  11.                 + " 的事件."
  12.         );
  13.     }
  14.    
  15.     public static abstract class LivingEventObject extends EventWrapper.EventObject {
  16.         public abstract LivingEntity getEntityLiving();
  17.     }
  18. }
复制代码
然后只需在任意地方new Test()即可,没错,就是这么简单
另一种注册方式: EventRegistry#register
他会完成一切工作,生成监听代理类,注册监听代理,执行handle方法,生成动态代理,完成方法映射...
你也可以使用自带的反射方法, 如ObjectWrapper#invoke
反射工具: Reflection
对象转换工具: WrapperTransfermer



开源/下载:
注意: 使用时需要将文件放入mods文件夹,而不是plugins文件夹
站内:
1.15.2-1.16.5: forge-event-bridge-1.15.2-1.16.5-1.3.0.jar (353.82 KB, 下载次数: 95)
1.12.2: forge-event-bridge-1.12.2-1.0.jar (349.43 KB, 下载次数: 26)

以GPLv3.0协议开源,若你使用或参考Forge-Event-Bridge的源代码,

你的项目必须以GPLv3.0协议开源,并标明原作者。



更新记录




小白不会排版请见谅


注: 本人更新时间较少,所以缓慢更新请理解(中考

dhl1570634463
这模组有什么用吗