Minecraft(我的世界)中文论坛

标题: [原创][前置API][综合] EasyAPI —— 接口, 兼容, 模块化, 样样 Easy 如其名[全版本]

作者: wujipohh    时间: 2020-3-19 02:52
标题: [原创][前置API][综合] EasyAPI —— 接口, 兼容, 模块化, 样样 Easy 如其名[全版本]
本帖最后由 wujipohh 于 2020-4-3 18:35 编辑




EasyAPI
接口, 兼容, 模块化, 样样 Easy 如其名
W系列 | 交流群: 807182388
更新时间:2020年3月28日 (具体以 Github 最新 Commit 为准)
注意: 本贴更新速度相较于 Github 可能会严重滞后, 如果本帖没有更新, 请先查看 Github 中的 Release(发布版本)


* 简介:
    *  你可以通过 EasyAPI 以高效简洁的形式, 创造插件, 让插件创造更简单, 更高效
    *  理念: 让插件只关注核心逻辑, 而非繁杂的 Nukkit 接口.
    *  多线程驱动事件系统
    *  集成大量 API 接口, 并且支持进行兼容性检查, 自适应使用对应兼容的接口
    *  模块化插件, 提高可维护性. 所有的集成 API 都可以进行二次开发.
注意:EasyAPI 使用 GPLv3 协议进行授权, 进行二次开发必须开源, 禁止非授权转载.

* 功能
    * EasyAPI 自带功能仅有一示例模块, ChatNameTagFormatter, 用于接入 Multipass 或 LuckPerms 等权限组插件. 可以自动格式化玩家NameTag(玩家头上那个标识), 聊天格式.

README
目前插件在高速迭代,所有的 API 可能在没有预先通知的情况下被删除或更改

       使用 EasyAPI 极大缩减您的开发时间, 减少浪费在不必要逻辑上的时间.

EasyAPI 内部集成的 SimpleCodecEasyConfig  简易编码配置 和 ReflectionCodec 编码器, 配合使用, 可以直接把数据类型转化编解码为配置可以理解的类型, 反之亦然, 可以直接从配置中读取并自动转换为目标对象. 极大降低开发难度和缩减开发周期.

EasyAPI 内部集成的 ConfigGUI 可以使得上述配置直接转化为玩家 GUI, 在线使用原生 GUI 编辑插件配置. (和 WMagicGun枪械插件一致)

EasyAPI 内部集成的命令模块能帮助您轻松写出 主命令+子命令 模式下的玩家命令, 自动生成 Help, 参数映射.

如果您通过 EasyAPI 来进行玩家屏幕展示功能(如 Popup, Tip)等, EasyAPI 可以自动融合, 通过优先级排序 , 交替出现. 防止多个插件占用 Popup 或 Tip 造成的屏幕底部文字高速闪烁或冲突.

EasyAPI 集成的权限组和经济 API, 能找到服务器装了的任何一种经济插件进行适配, 比如一个服务器用 Ecokkit 经济插件, 另一个服务器用 EconomyAPI, 那么每个插件单独适配时就十分麻烦, EasyAPI 可以帮你检查兼容性, 并智能使用兼容插件.



使用方式
模块化插件

  • 支持热插拔
  • 模块随时拆卸安装,帮助插件模块化
  • 参考实践:在反作弊中,我们需要将每个作弊检测模块进行抽象化,例如 Speed 加速检查中,我们需要监听玩家的移动事件,并记录相当多的数据,还有相关自定义配置。如果没有模块化集成API,这一切将会变的非常复杂。而且当某些服务器不需要这一种检测模式,或者其他检测模式时,如果没有模块化,则很难实现配置的模块化精细化。

直接调用API
  • 便于调试和小型插件直接使用,从一定程度上减少更多流程


特性更简单(简明)的API多线程驱动事件系统
  • Kotlin 协程 实现

    • 使用 Kotlin 协程 完成高效简洁的多线程事件驱动

  • AsyncTask 实现

    • 使用原生AsyncTask 把每个事件触发当作任务进行分发,Nukkit并不需要获取事件结束后的返回。所以完全是可以进行多线程驱动,大幅度提升插件使用效率

  • 但需要注意的是,多线程开发中不可避免的会遇到并发问题,Nukkit 没有自带解决方案,需要自行加锁解决


监听处理管道
  • 将事件处理模块化为每个步骤的监听管道,每个管道处理完后的数据可以传递到下一层监听管道,并且处理流程模块化,支持热插拔,支持异步(也可同步)。


集成接口,自由模块化启动
  • 权限组

    • 简化操作流程

  • 命令

    • 简化操作流程

  • 配置

    • 简化操作流程

  • 经济

    • 集成

  • GUI

    • 集成

  • 底部Tip 管理

    • 综合管理外部接口

  • 聊天Format 管理

    • 综合管理外部接口

  • 顶部Bossbar 综合管理

    • 综合管理外部接口

  • 右侧记分板 综合管理

    • 综合管理外部接口

  • 更多····

    • 支持任意的其他插件接入 EasyAPI 并集成开发


集成模块,自由模块化启动
  • 底部Tip 综合管理
  • 聊天Format 综合管理
  • 顶部Bossbar 综合管理
  • 右侧记分板 综合管理
  • 更多···


    • 支持任意插件接入 EasyAPI 并集成模块



    EasyAPI - 插件开发教程 全程带详细步骤 + 图文 + 代码解释



实例
核心逻辑 50 行左右, 高效制作插件





更新记录



最新版本


一些题外话






安装
*安装插件
    * 丢入你的Plugins文件夹,依赖于 KotlinLib 。
    * 详细: 如何安装 图文教程

* 更新记录
    * 版本号迭代更新记录
    * 每次提交更新记录
    * 项目计划看板







作者: Radotar    时间: 2020-3-19 10:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: catrinbow    时间: 2020-3-19 10:59
竟然写出来了,支持嗷

作者: zhujunhuan12345    时间: 2020-3-19 12:27
Boybook牛逼
作者: Yi__dian    时间: 2020-3-19 13:32
很完美的作品!!!作者加油!!奥利给
作者: wujipohh    时间: 2020-3-19 15:15
Yi__dian 发表于 2020-3-19 13:32
很完美的作品!!!作者加油!!奥利给

谢谢支持
作者: ruo_shui    时间: 2020-3-19 16:39
支持 EasyAPI ,非常方便
作者: TheBestSky    时间: 2020-3-20 08:28
终于找到方法了,我去
作者: iporus    时间: 2020-3-20 10:56
支持 EasyAPI ,非常方便
作者: tjqno.1    时间: 2020-3-20 11:41
很完美的作品!!!作者加油!!奥利给
作者: A_Tong_Tong    时间: 2020-3-20 16:47
wow,原来那些插件都是这么做出来的啊
作者: myslove    时间: 2020-3-20 17:07
我不懂编程,看完介绍后好像懂了,晕了是什么感觉
作者: haha_6661    时间: 2020-3-20 19:02
厉害大佬
作者: Latidos    时间: 2020-3-21 16:04
MCBBS有你更精彩!!!!!!!!!!!!
作者: Latidos    时间: 2020-3-21 16:14
MCBBS有你更精彩!!!!!!!!!!!!
作者: simulation    时间: 2020-3-21 21:44
日常凑热闹
作者: 超子钱    时间: 2020-3-22 08:22
我di一眼看以为是英语
作者: 克鲁鲁殿下    时间: 2020-3-22 11:35
可惜bukkit插件不能用。。。
作者: catrinbow    时间: 2020-3-23 09:32
EasyAPI,支持一下!
作者: Star_Undersky    时间: 2020-3-23 12:48
优秀还是您优秀
作者: 只想与你玩    时间: 2020-3-23 13:38
这个厉害啊
作者: zy233    时间: 2020-3-23 16:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: zy233    时间: 2020-3-23 16:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: ruiweng    时间: 2020-3-23 18:01
支持支持哈哈哈
作者: Jieda    时间: 2020-3-23 20:46
支持EasyAPI nb
作者: llduyiwuerde    时间: 2020-3-24 09:33
mcbbs有你更精彩
作者: Coisini233    时间: 2020-3-24 11:55
感谢大佬
MCBBS有你更精彩

作者: Latical    时间: 2020-3-24 16:27
真的是大大简化了插件流程, 顶一个.
作者: A1124201329    时间: 2020-3-25 14:31
easy聊天显示怎么关阿  大
作者: wujipohh    时间: 2020-3-25 15:08
A1124201329 发表于 2020-3-25 14:31
easy聊天显示怎么关阿  大

EasyAPI 文件夹 integrate.yml 修改 ChatNameTagModule 为 false
作者: w844563217    时间: 2020-3-25 21:29

MCBBS有你更精彩!!!!!!!!!!!!
作者: Virr_Supty    时间: 2020-3-27 08:10
很棒的插件 收下了 作者加油嗷!
作者: Latidos    时间: 2020-3-27 11:16
感谢大佬上我们白嫖,支持你!666
作者: shura玄漪    时间: 2020-3-29 09:22
66666666666666
作者: maoqi6    时间: 2020-3-29 12:12
非常棒,期待更新

作者: 三薛定谔三    时间: 2020-3-29 20:32
用了会报错,求修复
作者: 1186019009    时间: 2020-3-29 20:49
请问GUI有什么更方便的操作了吗
作者: wujipohh    时间: 2020-3-29 22:37
1186019009 发表于 2020-3-29 20:49
请问GUI有什么更方便的操作了吗

请使用Him188的GUI前置, EasyAPI不会重复造轮子
作者: Mcayear    时间: 2020-3-30 12:29
2020-03-30 12:27:30.756 [main] INFO  - 开启 EasyAPI v1.1.8 中
2020-03-30 12:27:30.827 [main] INFO  - [EasyAPI] Module EasyBaseModule_v1.0.0 from EasyAPI by WetABQ loaded
2020-03-30 12:27:30.837 [main] ERROR - Throwing
java.lang.RuntimeException: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        at cn.nukkit.plugin.PluginManager.enablePlugin(PluginManager.java:443) [nukkit.jar:?]
        at cn.nukkit.Server.enablePlugin(Server.java:741) [nukkit.jar:?]
        at cn.nukkit.Server.enablePlugins(Server.java:730) [nukkit.jar:?]
        at cn.nukkit.Server.<init>(Server.java:491) [nukkit.jar:?]
        at cn.nukkit.Nukkit.main(Nukkit.java:112) [nukkit.jar:?]
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
        at top.wetabq.easyapi.module.defaults.ChatNameTagFormatModule.moduleRegister(ChatNameTagFormatModule.kt:55) ~[?:?]
        at top.wetabq.easyapi.module.SimpleEasyAPIModule.register(SimpleEasyAPIModule.kt:19) ~[?:?]
        at top.wetabq.easyapi.module.EasyAPIModuleManager.register(EasyAPIModuleManager.kt:16) ~[?:?]
        at top.wetabq.easyapi.module.EasyAPIModuleManager.registerDefault(EasyAPIModuleManager.kt:24) ~[?:?]
        at top.wetabq.easyapi.EasyAPI.onEnable(EasyAPI.kt:20) ~[?:?]
        at cn.nukkit.plugin.PluginBase.setEnabled(PluginBase.java:89) ~[nukkit.jar:?]
        at cn.nukkit.plugin.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:117) ~[nukkit.jar:?]
        at cn.nukkit.plugin.PluginManager.enablePlugin(PluginManager.java:439) ~[nukkit.jar:?]
        ... 4 more
2020-03-30 12:27:30.849 [main] INFO  - 关闭 EasyAPI v1.1.8 中
作者: wujipohh    时间: 2020-3-30 16:33
Mcayear 发表于 2020-3-30 12:29
2020-03-30 12:27:30.756 [main] INFO  - 开启 EasyAPI v1.1.8 中
2020-03-30 12:27:30.827 [main] INFO  - ...

新版本可能要删除原先配置
作者: wujipohh    时间: 2020-3-30 16:44
Mcayear 发表于 2020-3-30 12:29
2020-03-30 12:27:30.756 [main] INFO  - 开启 EasyAPI v1.1.8 中
2020-03-30 12:27:30.827 [main] INFO  - ...

最新版已经修复
作者: wangmingzhi    时间: 2020-3-31 23:35
666666666666
作者: My_tears    时间: 2020-4-1 19:58
哒哒哒哒哒哒多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多多的点点滴哒哒哒哒哒哒多多多多多多多
作者: msaw4    时间: 2020-4-3 14:26
楼主,最新版easyapi头顶显示貌似和tips冲突。。。能不能及时修一下
作者: wujipohh    时间: 2020-4-3 14:37
msaw4 发表于 2020-4-3 14:26
楼主,最新版easyapi头顶显示貌似和tips冲突。。。能不能及时修一下

即将发布 WTips, 我们没有计划支持 Tips, WTips 将会支持 Tips 的所有功能并提供 EasyAPI 变量的全部支持
作者: 52648496    时间: 2020-7-7 20:36
请问nametag就是玩家头上那个显示怎么关闭呢?
作者: chugelim    时间: 2020-7-18 13:22
请问一下作者,这是因为什么导致了错误

Screenshot_20200718_122354_com.android.browser.jpg (241.04 KB, 下载次数: 0)

Screenshot_20200718_122354_com.android.browser.jpg

Screenshot_20200718_122345_com.android.browser.jpg (247.47 KB, 下载次数: 0)

Screenshot_20200718_122345_com.android.browser.jpg

Screenshot_20200718_122335_com.android.browser.jpg (253.04 KB, 下载次数: 0)

Screenshot_20200718_122335_com.android.browser.jpg

Screenshot_20200718_122326_com.android.browser.jpg (244.32 KB, 下载次数: 0)

Screenshot_20200718_122326_com.android.browser.jpg

作者: 苏神扶苏    时间: 2020-11-14 13:32
支持 EasyAPI ,非常方便