跳到主要内容
版本:2.0.0

注册扩展

为什么?

像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 可序列化的对象 作为参数
)

请看此文档 - 如何定义一个主程序RPC方法

遇到麻烦了?

我们提供有偿代安装服务,解决您的环境配置烦恼。

了解详情