本帖最后由 666885489 于 2021-4-11 11:08 编辑
前言:
这个前置最初的定位是为Crafting Dead(行尸走肉) MOD 服务的
但是考虑到不如直接搭建一个Forge事件桥,让插件监听到MOD的事件
这个严格来说不是插件,而是MOD,但是确实是为Bukkit插件服务的
优势:
完全开源,帮助你理解其中原理,帮助开发
傻瓜式包装,简单易学且实用
监听器由纯ASM实现,避免产生过多的性能损耗,尽量提高效率
监听目标包装使用Cglib实现,只需写几个抽象方法即可,不必手动反射获取字段/方法,增加代码可读性
常用的Minecraft PlayerEntity->Bukkit Player等转换方法已经包装,需要其他可以随时提出Issue
实例/使用方法: - public final class Test implements EventHolder<Test.LivingEventObject> {
- public Test() {
- register(EventBridge.builder().source("net.minecraftforge.event.entity.living.LivingEvent").build());
- }
-
- @Override
- public void handle(EventWrapper<Test.LivingEventObject> eventWrapper) {
- LivingEventObject eventObject = eventWrapper.as(LivingEventObject.class);
- System.out.println(
- "监听到来自实体: " + eventObject.getEntityLiving().getName()
- + " 的事件."
- );
- }
-
- public static abstract class LivingEventObject extends EventWrapper.EventObject {
- public abstract LivingEntity getEntityLiving();
- }
- }
复制代码然后只需在任意地方new Test()即可,没错,就是这么简单 另一种注册方式: EventRegistry#register 他会完成一切工作,生成监听代理类,注册监听代理,执行handle方法,生成动态代理,完成方法映射... 你也可以使用自带的反射方法, 如ObjectWrapper#invoke 反射工具: Reflection 对象转换工具: WrapperTransfermer
开源/下载: 注意: 使用时需要将文件放入mods文件夹,而不是plugins文件夹 站内: 以GPLv3.0协议开源,若你使用或参考Forge-Event-Bridge的源代码, 你的项目必须以GPLv3.0协议开源,并标明原作者。
更新记录 1.1.0: 首次发布 1.1.1->1.2.0: 修复大量BUG,提高效率,优化代码设计,引入众多设计模式 ( 1.1.5: 去除ForgeEventHandler注解,引入EventBridge. 1.1.5->1.2.0: 修改EventWrapper与WrapperTransformer内部实现,大量提高效率,不断优化代码架构 ) 1.3.0: 提供1.12.2支持,分模块设计(core与具体对应forge实现),优化代码,提高效率 |
小白不会排版请见谅 注: 本人更新时间较少,所以缓慢更新请理解(中考 |