Class AbstractPlatformContext<S,C,P>
- Type Parameters:
S- 服务端实例类型C- 消息组件类型P- 玩家类型
平台侧继承本类并实现其中的抽象原语;core 侧只通过本类的公开方法访问平台能力, 因此 core 不依赖任何具体服务端的类型。
职责边界(重要):本类只描述"平台本身能做什么"——
平台元数据、玩家查询、组件转换、广播、私聊、Title、ActionBar。
不负责命令来源相关能力:回执(reply)与权限判定已归属
CommandExecutionContext,命令来源的类型转换也不在本类。
两者职责完全分离:
AbstractPlatformContext 平台整体能力 CommandExecutionContext 命令来源能力(谁发起的 / 如何回复 / 其权限)
结果表达:平台操作统一返回 PlatformResult,
用 PlatformResultCode 表达"平台侧发生了什么"。
本类不依赖 ProtocolException、Response、
PrivateMessageResponse 或任何协议类型——
把 PlatformResult 翻译成协议状态是 Api 层的职责。
因此其它模块(命令层、未来的非协议调用方)也可以直接调用本类并消费结果,
不需要经过 Api / WebSocket。
公开方法签名约定(重要):core 侧调用的公开方法签名中不出现
S / C / P 这三个类型参数。这样 core 侧持有
AbstractPlatformContext<?, ?, ?> 时仍可直接调用,
无需到处传播通配符;凡是要用到平台类型 P / C 的操作,
都在本类内部一次性完成。
延迟绑定:getServerType() 与 getServerVersion()
只要求在本上下文被使用前(即 Runtime start() 之后)可用,
不要求构造时即可用。因此平台可以在服务端实例就绪之前先构造本上下文。
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract PlatformResult<Void> 广播组件给所有玩家final PlatformResult<Void> broadcast(com.google.gson.JsonElement json) 广播 JSON 组件给所有玩家final PfindPlayer(String name, String uuid) 根据玩家名称或 UUID 查找在线玩家。abstract StringgetPlayerName(P player) abstract Collection<P> abstract UUIDgetPlayerUUID(P player) abstract String平台类型abstract String服务端版本boolean是否为模组服务端abstract CjsonToComponent(com.google.gson.JsonElement json) 把 JSON 组件转换为平台自己的组件类型final PlatformResult<Void> sendActionBar(com.google.gson.JsonElement json) 发送 ActionBar 给所有玩家sendActionBarComponent(C component) 向所有玩家发送 ActionBar(可选能力)final PlatformResult<PlayerModel> sendPrivateMessage(String nickname, UUID uuid, com.google.gson.JsonElement json) 发送私聊消息,并返回结果abstract PlatformResult<Void> sendPrivateMessage(P player, C component) 发送组件给指定玩家final PlatformResult<Void> sendTitle(com.google.gson.JsonElement title, com.google.gson.JsonElement subtitle, int fadeIn, int stay, int fadeOut) 发送标题给所有玩家sendTitleComponent(C title, C subtitle, int fadeIn, int stay, int fadeOut) 向所有玩家发送标题(可选能力)
-
Field Details
-
server
服务端实例平台需自行保证该实例在
getPlayers()等原语被调用前可用。
-
-
Constructor Details
-
AbstractPlatformContext
-
-
Method Details
-
getServerType
平台类型应返回
ServerTypeConstant中的规范值(如"fabric"/"spigot"), 而不是服务端返回的原始字符串(后者可能形如"spigot-beta-satshop",不可控)。- Returns:
- 平台类型
-
getServerVersion
服务端版本- Returns:
- 服务端版本,未知时可返回 null
-
isModServer
public boolean isModServer()是否为模组服务端默认按
getServerType()推导。若某平台不符合"模组 = config 目录"这一规律, 覆盖本方法即可。- Returns:
- 是否为模组服务端
-
jsonToComponent
把 JSON 组件转换为平台自己的组件类型- Parameters:
json- JSON 组件- Returns:
- 平台组件
-
getPlayers
- Returns:
- 当前在线玩家集合
-
getPlayerName
- Parameters:
player- 玩家- Returns:
- 玩家昵称
-
getPlayerUUID
- Parameters:
player- 玩家- Returns:
- 玩家 UUID
-
broadcast
广播组件给所有玩家Core 语义只有"广播成功 / 广播失败",因此不返回任何数据: 底层平台 API 的返回值(例如渲染后的文本)对 Core 调用者没有业务意义, 不应作为返回值暴露出来。
C本身不会离开平台层。若将来 Core 确实需要广播人数、消息 ID 等领域数据, 应引入专门的领域结果类型(如
BroadcastResult), 而不是保留一个无法回答"这个值代表什么"的String。- Parameters:
component- 平台组件- Returns:
- 成功 / 失败结果
-
sendPrivateMessage
发送组件给指定玩家- Parameters:
player- 玩家component- 平台组件- Returns:
- 成功 / 失败结果
-
sendTitleComponent
public PlatformResult<Void> sendTitleComponent(C title, C subtitle, int fadeIn, int stay, int fadeOut) 向所有玩家发送标题(可选能力)默认返回
PlatformResultCode.UNSUPPORTED,表示当前平台不支持标题。 支持标题的平台覆盖本方法即可。- Parameters:
title- 主标题组件,可为 nullsubtitle- 副标题组件,可为 nullfadeIn- 淡入时间(ticks)stay- 停留时间(ticks)fadeOut- 淡出时间(ticks)- Returns:
- 成功 / 失败结果
-
sendActionBarComponent
向所有玩家发送 ActionBar(可选能力)默认返回
PlatformResultCode.UNSUPPORTED,表示当前平台不支持 ActionBar。 支持的平台覆盖本方法即可。- Parameters:
component- 平台组件- Returns:
- 成功 / 失败结果
-
broadcast
广播 JSON 组件给所有玩家- Parameters:
json- JSON 组件- Returns:
- 成功 / 失败结果
-
findPlayer
根据玩家名称或 UUID 查找在线玩家。当同时提供名称和 UUID 时,优先使用 UUID 进行查找,名称不参与匹配。 当未提供 UUID 时,才使用名称进行查找。
如果名称和 UUID 均未提供,或未找到匹配的在线玩家,则返回
null。- Parameters:
name- 玩家名称,可以为null或空字符串uuid- 玩家 UUID 字符串,可以为null或空字符串- Returns:
- 匹配的在线玩家,未找到时返回
null
-
sendTitle
public final PlatformResult<Void> sendTitle(com.google.gson.JsonElement title, com.google.gson.JsonElement subtitle, int fadeIn, int stay, int fadeOut) 发送标题给所有玩家- Parameters:
title- 主标题,可为 nullsubtitle- 副标题,可为 nullfadeIn- 淡入时间(ticks)stay- 停留时间(ticks)fadeOut- 淡出时间(ticks)- Returns:
- 成功 / 失败结果;平台不支持时返回
PlatformResultCode.UNSUPPORTED
-
sendActionBar
发送 ActionBar 给所有玩家- Parameters:
json- ActionBar 内容,JSON 格式- Returns:
- 成功 / 失败结果;平台不支持时返回
PlatformResultCode.UNSUPPORTED
-
sendPrivateMessage
public final PlatformResult<PlayerModel> sendPrivateMessage(String nickname, UUID uuid, com.google.gson.JsonElement json) 发送私聊消息,并返回结果查找玩家、发送、构造结果三步都在本方法内完成——只有平台侧认识玩家类型 P, 因此这类"碰 P"的操作统一在本类内部收口,不向外暴露泛型。
成功时 data 为目标玩家的 Core DTO 快照(
PlayerModel), 因此调用方可以据此构造自己的响应,而不需要知道平台玩家类型。- Parameters:
nickname- 目标玩家昵称,可为 nulluuid- 目标玩家 UUID,可为 nulljson- 消息内容,JSON 格式- Returns:
- 未找到玩家时为
PlatformResultCode.PLAYER_NOT_FOUND; 发送失败时透传发送结果码;成功时 data 为目标玩家快照
-