# mcrmb_sub_plugin_test **Repository Path**: mcrmb/mcrmb_sub_plugin_test ## Basic Information - **Project Name**: mcrmb_sub_plugin_test - **Description**: MCRMB接口方法及事件开发实例插件。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-04-16 - **Last Updated**: 2022-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MCRMB核心插件接口开发实例插件 本插件示范了 * 使用自己的指令逻辑, `/test ` 指令调用mcrmb核心插件的查询接口. * 监听核心插件的指令事件,在 `/b` 指令基础上添加了自己的指令 * `/b nb` 纯展示 * `/b balance` 异步方式调用核心插件方法展出玩家信息 * `/b forcepay` 同步模式调用核心Pay方法(错误示范) * `/b forcepay_async` 异步模式调用核心Pay方法 * `/b qrpaytest` 利用核心插件PayApi.RequestQr发起扫码支付请求 * 监听核心插件的支付事件,在你使用 `/b forcepay_async` 时,支付监听器会有所展示。 * 核心插件扫码功能工作时,此插件可以收到两个事件的信息 * `QrDoneEvent` 为玩家在核心插件中发起扫码支付后轮询事件,用response判断支付完成情况,PayApi.RequestQr接口不会产生此事件。 * `QrRequestEvent` 为扫码请求事件,执行本测试插件的/b qrpaytest也会触发。 [【插件下载】](https://gitee.com/mcrmb/mcrmb_sub_plugin_test/raw/master/target/mcrmb_sub_plugin_test-1.0-SNAPSHOT.jar) [【插件主类】](https://gitee.com/mcrmb/mcrmb_sub_plugin_test/blob/master/src/main/java/Main.java) 本插件并无实际作用,主要是提供代码,给开发者进行参考。 ## 下面是插件实际运作截图 ![](.asset/20200416185739.png) 开启 `/b debug` 模式后,测试插件执行`/b forcepay wbb 3 test true` , 图中提示主线程运行,这种情况下,如果网络较卡,将直接卡服。 所以请开发者在调用Mcrmb核心插件接口时,务必包裹到异步线程中。如何包裹请参考本插件。 ![](.asset/20200416185841.png) 执行 `/b balance wbb` 调用接口查询玩家信息 ![](.asset/20200416192835.png) 执行 `/test wbb` 调用接口查询玩家信息 ## 如何编译 建议新手先学习Java,本项目使用Maven管理。如果你有IDEA,直接下载本项目,使用IDEA打开,在右侧Maven面板执行install。编译好插件就会出现在target目录里。 *** *** *** 以下内容来自MCRMB指南文档 https://docs.mcrmb.com/ GITEE备份 https://mcrmb.gitee.io/docs (不一定是最新版本) # 插件层接口/事件文档 使用这些MCRMB核心插件接口,您可以自己开发出合适服务器的附属插件~ *** ## 可用方法 以下方法均位于 `com.mcrmb.PayApi`,可以直接静态调用。 因为需要走网络,所以请在调用时使用异步包裹~ | 作用 | 方法 | 返回值 | | :--- | :--- | :--- | | 查询玩家余额 | look\(String playername\) | int | | 查询玩家累计充值 | allcharge\(String playername\) | int | | 查询玩家累计消费 | allpay\(String playername\) | int | | 玩家消费接口 | Pay\(String playername,String point,String useto,boolean brocast\) | boolean | | 手工操作玩家点券 | Manual\(String playername,int type,String point,String text\) | boolean | ?> `/b debug` 开启模式下,可以看到每个MCRMB的网络请求是否处于主线程内。 ### 参数值说明
参数名 说明
playername 玩家名,大小写均可
point 点卷数量,注意,请转成String类型
useto 消费说明
brocast 是否发公屏
type 手工操作点卷类型
1=加款
2=扣款
3=重设点券金额
text 点券操作说明
### 参考代码 ```java import com.mcrmb.PayApi; ... getServer().getScheduler().runTaskAsynchronously(this, new Runnable(){ public void run() { String playername = "tester"; System.out.print(PayApi.look(playername)); //打印玩家余额 } }); ... ``` *** ## 可用事件 | 事件 | 说明 | | :--- | :--- | | com.mcrmb.event.McrmbPayEvent | 支付事件 | com.mcrmb.CmdEvent | 主插件指令事件 ### 事件内方法表 事件 | 方法名 | 返回类型 | 说明 :---| :--- | :--- | :--- McrmbPayEvent | getPlayer() | String | 玩家名字符串 McrmbPayEvent | getMoney() | int | 成功消费的点券数量 McrmbPayEvent | getReason() | String | 消费说明 McrmbPayEvent | isBroadcast() | boolean | 是否进行公屏 McrmbPayEvent | getLatestBalance() | int | 最新的点券余额 McrmbPayEvent | getResponse() | Response | 返回状态,参见下表 CmdEvent | getCmd() | String | 返回指令/b 后的 首个参数,用于判断是否应该进入逻辑 CmdEvent | getCmds() | String[] | 返回指令的参数数组。 CmdEvent | getSender() | CommandSender | 返回指令的发送对象 ### Response状态释义 | 状态enum | 说明 | | :--- | :--- | | SUCCESS | 支付成功 | | MONEY\_NOT\_ENOUGH | 点券数量不足 | | NOT\_ACCOUNT | 点券数量不足(玩家无账户,未充值过) | | UNKNOWN | 未知的返回状态代码 | | ERROR | 请求接口过程错误 | ### 参考代码 ```java import com.mcrmb.CmdEvent; import com.mcrmb.event.McrmbPayEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; public class test implements Listener { @EventHandler public void test_pay_event(McrmbPayEvent payEvent){ payEvent.getPlayer(); //玩家名 String payEvent.getMoney(); //消费点券 int payEvent.getLatestBalance(); //点券余额 int payEvent.getReason(); //获取消费原因 payEvent.isBroadcast(); //是否公屏 payEvent.getResponse(); //获取消费结果 } @EventHandler public void test_cmd_event(CmdEvent cmdEvent){ cmdEvent.getCmd(); //第一个参数 cmdEvent.getCmds(); //参数数组 cmdEvent.getSender(); //命令发送人 if(cmdEvent.getCmd().equalsIgnoreCase("nb")){ // 用户执行了 /b nb xxx xxx 指令,插件处理的逻辑内容。 } } } ```