Bridge - 服务器对象
Bridge 类是 EasyBot 的核心桥接实现,他表示一个在线的MC服务器,继承自 WebSocketBehavior,提供了与 Minecraft 服务器交互的完整 API 接口。
Bridge 是一个抽象类,不能直接实例化,要获取到此对象,请通过 Sessions 获取
类概述
declare class Bridge extends WebSocketBehavior {
readonly Session: Session;
// ... 方法定义
}
属性
Session
- 类型:
Session
(只读) - 描述: 获取当前的会话对象,包含连接状态和会话相关信息
方法详解
UpdateSyncSetting()
功能描述: 更新同步设置,用于刷新客户端与服务器之间的同步配置。
语法:
UpdateSyncSetting(): void
参数: 无
返回值: 无
使用示例:
bridge.UpdateSyncSetting();
注意事项:
- 通常在配置变更后调用
- 确保服务器连接正常时调用
SendAndWaitForCallbackAsync()
功能描述: 发送数据包并异步等待服务器回调响应,支持泛型返回类型。
语法:
SendAndWaitForCallbackAsync<T extends object>(packet: PacketWithCallBackId): Promise<T>
参数:
packet
(PacketWithCallBackId): 包含回调ID的数据包对象
返回值: Promise<T>
- 返回指定类型的回调结果
使用示例:
const packet = { callbackId: "123", data: "test" };
const result = await bridge.SendAndWaitForCallbackAsync<MyResponseType>(packet);
logger.info(result);
注意事项:
- 需要在异步上下文中使用
- 确保数据包包含有效的回调ID
- 超时处理需要在调用方实现
NotifyPlayerUnBind()
功能描述: 通知指定玩家解除账户绑定,服务器收到消息后会认为玩家解绑,并执行相对应操作。
语法:
NotifyPlayerUnBind(playerName: string, kickMessage: string): void
参数:
playerName
(string): 要解绑的玩家名称kickMessage
(string): 踢出玩家时显示的消息
返回值: 无
使用示例:
bridge.NotifyPlayerUnBind("Steve", "您的账户已解绑,请重新登录");
注意事项:
- 玩家名称必须精确匹配
- 踢出消息会显示给被踢出的玩家
NotifyPlayerBindSuccess()
功能描述: 通知玩家账户绑定成功,建立玩家与账户的关联关系。
语法:
NotifyPlayerBindSuccess(playerName: string, accountId: string, accountName: string): void
参数:
playerName
(string): 玩家名称accountId
(string): 绑定的账户IDaccountName
(string): 绑定的账户名称
返回值: 无
使用示例:
bridge.NotifyPlayerBindSuccess("Steve", "12345", "steve_account");
注意事项:
- 确保账户ID的唯一性
- 绑定成功后玩家将获得相应权限
SendPlaceholderApiQueryAsync()
功能描述: 异步查询 PlaceholderAPI 变量值,支持动态变量解析。
语法:
SendPlaceholderApiQueryAsync(playerName: string, text: string): Promise<PlaceholderApiQueryResultPacket>
参数:
playerName
(string): 目标玩家名称text
(string): 包含占位符的查询文本
返回值: Promise<PlaceholderApiQueryResultPacket>
- 查询结果数据包
使用示例:
const result = await bridge.SendPlaceholderApiQueryAsync("Steve", "%player_name% 的等级是 %player_level%");
logger.info(result.Text);
注意事项:
- 需要服务器安装 PlaceholderAPI 插件
- 查询文本中的占位符格式为
%placeholder_name%
- 玩家必须在线才能获取准确信息
GetPlayerListAsync()
功能描述: 异步获取当前服务器在线玩家列表及其详细信息。
语法:
GetPlayerListAsync(): Promise<GetPlayerInfoResultPacket>
参数: 无
返回值: Promise<GetPlayerInfoResultPacket>
- 包含玩家信息的结果数据包
使用示例:
const playerInfo = await bridge.GetPlayerListAsync();
logger.info(`在线玩家数量: ${playerInfo.players.length}`);
playerInfo.players.forEach(player => {
logger.info(`玩家: ${player.name}, UUID: ${player.uuid}`);
});
注意事项:
- 返回的是 实时在线玩家信息
- 包含玩家基本信息如名称、UUID等
SendRunCommandAsync()
功能描述: 异步执行服务器命令,支持以指定玩家身份运行命令。
语法:
SendRunCommandAsync(playerName: string, command: string, enablePapi: boolean): Promise<RunCommandResultPacket>
参数:
playerName
(string): 执行命令的玩家名称command
(string): 要执行的命令文本enablePapi
(boolean): 是否启用 PlaceholderAPI 变量解析
返回值: Promise<RunCommandResultPacket>
- 命令执行结果数据包
使用示例:
// 执行普通命令
const result = await bridge.SendRunCommandAsync("Steve", "gamemode creative", false);
// 执行带PAPI变量的命令
const result2 = await bridge.SendRunCommandAsync("Steve", "tell %player_name% 你好", true);
注意事项:
- 命令不需要包含前缀斜杠
/
- 启用PAPI时命令中的占位符会被自动解析
- 需要确保玩家有执行该命令的权限
SendMessageWithExtra()
功能描述: 向聊天频道发送包含额外信息的富文本消息,支持复杂的消息格式。
语法:
SendMessageWithExtra(text: string, extra: any[]): void
参数:
text
(string): 基础消息文本extra
(any[]): 额外信息对 象数组,可包含格式化、点击事件等
返回值: 无
使用示例:
const extra = [
{
text: "点击这里",
color: "blue",
clickEvent: {
action: "run_command",
value: "/help"
}
}
];
bridge.SendMessageWithExtra("欢迎来到服务器!", extra);
注意事项:
- extra 数组支持 Minecraft 原版文本组件格式
- 可以包含颜色、样式、点击事件、悬停事件等
SendMessageToAllPlayer()
功能描述: 向服务器所有在线玩家发送广播消息。
语法:
SendMessageToAllPlayer(text: string): void
参数:
text
(string): 要发送的消息文本
返回值: 无
使用示例:
bridge.SendMessageToAllPlayer("服务器将在5分钟后重启,请做好准备!");
注意事项:
- 消息会发送给所有当前在线的玩家
- 支持 Minecraft 颜色代码(如
&c
表示红色)
GetServerInfo()
功能描述: 异步获取服务器连接和配置的详细信息。
语法:
GetServerInfo(): Promise<ServerConnectionInfo>
参数: 无
返回值: Promise<ServerConnectionInfo>
- 服务器连接信息对象
使用示例:
const serverInfo = await bridge.GetServerInfo();
logger.info(`服务器名称: ${serverInfo.ServerName}`);
logger.info(`服务器版本: ${serverInfo.ServerVersion}`);
logger.info(`支持PAPI: ${serverInfo.IsPapiSupported}`);
logger.info(`正版验证: ${serverInfo.IsOnlineMode}`);
注意事项:
- 返回的信息反映服务器当前状态
- 可用于判断服务器功能支持情况
ServerConnectionInfo 接口
描述与服务器连接相关的元数据信息:
interface ServerConnectionInfo {
/** 服务器显示名称(通常为配置文件中的名称) */
ServerName: string;
/** 服务器核心版本号(例如:Paper 1.19.2) */
ServerVersion: string;
/** 客户端插件要求的协议版本 */
PluginVersion: string;
/** 指示服务器是否支持PAPI(PlaceholderAPI)变量替换功能 */
IsPapiSupported: boolean;
/** 标识服务器是否支持自定义命令扩展 */
IsCommandSupported: boolean;
/** 标记服务器是否安装了GeyserMC跨平台桥接插件 */
HasGeyser: boolean;
/** 表示服务器是否处于正版验证模式(true=仅正版账号可进入) */
IsOnlineMode: boolean;
}
最佳实践
- 错误处理: 对所有异步方法使用 try-catch 进行错误处理
- 连接检查: 在调用方法前确保 WebSocket 连接正常
- 权限验证: 执行命令前检查玩家权限
- 资源管理: 合理使用异步方法,避免过多并发请求
完整示例
// 完整的使用示例
async function handlePlayerJoin(playerName: string) {
try {
// 获取服务器信息
const serverInfo = await bridge.GetServerInfo();
// 发送欢迎消息
bridge.SendMessageToAllPlayer(`欢迎 ${playerName} 加入 ${serverInfo.ServerName}!`);
// 如果支持PAPI,查询玩家信息
if (serverInfo.IsPapiSupported) {
const papiResult = await bridge.SendPlaceholderApiQueryAsync(
playerName,
"玩家 %player_name% 等级: %player_level%"
);
logger.info(papiResult.Text);
}
// 更新同步设置
bridge.UpdateSyncSetting();
} catch (error) {
logger.error("处理玩家加入时出错:", error);
}
}