注册扩展
为什么?
像Bukkit的JavaPlugin一样, 你需要在插件内注册一个
IBridgeExtension, 并实现其方法才能够被EasyBot识别为扩展
import com.springwater.easybot.bridge.api.IBridgeExtension;
import java.util.List;
public class MyTestExtension implements IBridgeExtension {
@Override
public String getIdentifier() {
return "bridge:test"; // 调用rpc什么的时候需要
}
@Override
public String getName() {
return "单元测试扩展";
}
@Override
public String getDescription() {
return "这是一个由单元测试创建的扩展 用于测试EasyBot的各种功能";
}
@Override
public String getAuthor() {
return "MiuxuE";
}
@Override
public String getVersion() {
return "1.0.0";
}
@Override
public List<String> requiredPlugins() {
return List.of(); // 依赖的主程序插件id (填写后会检查依赖,强制安装)
}
}
监听事件
import com.springwater.easybot.bridge.api.BridgeEventHandler;
import com.springwater.easybot.bridge.api.IBridgeListener;
import com.springwater.easybot.bridge.api.events.lifecycle.BridgeOnlineAsyncEvent;
public class TestHandler implements IBridgeListener {
@BridgeEventHandler // 支持优先级
public void connected(BridgeOnlineAsyncEvent event) {
System.out.println("已连接");
}
}
注册使用:
MyTestExtension myTestExtension = new MyTestExtension();
TestHandler testHandler = new TestHandler();
IBridgeExtensionApi.getInstance().register(
myTestExtension,
testHandler
);
事件列表
嗯.. 你可以看com.springwater.easybot.bridge.api.events里面有啥
注册RPC方法
import com.springwater.easybot.bridge.api.rpc.BridgeRpc;
import com.springwater.easybot.bridge.api.rpc.IRpcListener;
import com.springwater.easybot.bridge.api.rpc.RpcContext;
public class TestRpc implements IRpcListener {
@BridgeRpc(method = "get_date", description = "获取服务器时间", displayName = "获取时间")
public void getDate(RpcContext context) {
context.getResult().addProperty("date", System.currentTimeMillis());
}
}
注册
MyTestExtension myTestExtension = new MyTestExtension();
TestRpc testRpc = new TestRpc();
IBridgeExtensionApi.getInstance().register(
myTestExtension,
testRpc
);
在插件中调用
// 1. 获取服务器连接实例
const server = sessions.GetBridge("服务器TOKEN写这里");
if (server) {
try {
// 2. 发起 RPC 请求
// 参数 identifier: "bridge:test"
// 参数 method: "get_date"
// 参数 args: 根据实际业务需求传递对象
const response = await server.RpcInvoke(
"bridge:test",
"get_date",
{ /* params */ } // 这里无参
);
logger.info("服务器时间: {res}", response.date); // (正常情况下打印) 服务器时间: xxxxxxxxxxxxxxxx
} catch (err) {
logger.error("调用失败: {err}", err);
}
} else {
logger.warning("服务器离线或未连接");
}
如何在主程序插件中定义RPC方法?
在Bridge中也可以调用主程序扩展中的RPC方法
BridgeClient.getInstance().rpcCall(
"", // 此处填写插件的 ID (manifest.json 中的 id 字段)
"", // 这里是 RPC 接口的名称 (和上面的差不多)
new JsonObject() // 这里可以传递任意 JSON 可序列化的对象 作为参数
)
遇到麻烦了?
我们提供有偿代安装服务,解决您的环境配置烦恼。