Repository navigation
API Reference
本页面整理 BlockOffensive 对外可用或可扩展的命令、Web API、Forge Event、地图类型、配置和依赖入口。
注册位置:command/CSCommand.java
用途:
-
/cs2 <action>保留为兼容入口。 -
/pause保留为独立暂停入口。 - 其他普通玩家比赛操作挂载到
/fpsm:/fpsm p、/fpsm unpause|up、/fpsm agree|a、/fpsm disagree|da、/fpsm drop|d。 - 命令检查执行者是否为
ServerPlayer。 - 通过
FPSMCore.getInstance().getMapByPlayer(player)获取玩家当前地图。 - 仅当地图是
CSGameMap时,将 action 传入csGameMap.handleChatCommand(action, player)。
失败情况:
| 情况 | 行为 |
|---|---|
| 执行者不是玩家 | 返回 command.cs.onlyPlayer。 |
| 玩家不在 CS 爆破地图 | 返回 command.cs.noMap。 |
CSGameMap.registerCommands() 注册以下 action。它们仍可通过 /cs2 <action> 与地图聊天点号命令调用;除完整名 pause 外,玩家入口也已挂载到 /fpsm。
| action | 别名 | 权限 | 说明 |
|---|---|---|---|
pause |
p |
玩家 | 暂停请求或设置暂停状态。 |
unpause |
up |
玩家 | 发起取消暂停投票。 |
agree |
a |
玩家 | 同意当前投票。 |
disagree |
da |
玩家 | 反对当前投票。 |
drop |
d |
玩家 | 执行丢弃/切刀相关逻辑。 |
debug_1 |
- | 权限 2 | 调整比分到测试状态。 |
debug_2 |
- | 权限 2 | 强制换边。 |
debug_3 |
- | 权限 2 | 显示玩家当前队伍。 |
debug_4 |
- | 权限 2 | 显示胜利回合与加时计数。 |
/cs2 与 /pause 按项目约定不显示在 /fpsm help。其余 /fpsm 分支由实际 Brigadier 指令树生成帮助,并根据执行者权限过滤。
CSGameEvents.onChat 会监听 FPSMatch 地图聊天事件。消息包含 . 时,会截取点号之后的内容作为地图 action 执行。
示例:
.a
.da
.pause
注册位置:command/BOCommandRegister.java
用途:
- 通过 FPSMatch 的
RegisterFPSMCommandEvent向/fpsm添加mvp子命令。 - 给目标玩家写入 MVP 音乐。
-
sound使用 MinecraftResourceLocation,并接入可用声音建议。
示例:
/fpsm mvp @p minecraft:music_disc.pigstep
管理分支固定为 /fpsm blockoffensive halftime,要求权限等级 2:
/fpsm blockoffensive halftime reload
/fpsm blockoffensive halftime select <map> <side> <from> <to>
/fpsm blockoffensive halftime facing <map> <side> <yaw> [pitch]
/fpsm blockoffensive halftime duration <map> <side> <ticks>
/fpsm blockoffensive halftime enable <map> <phase> <enabled>
/fpsm blockoffensive halftime preview <map> <side>
/fpsm blockoffensive halftime debug_halftime_switch <map> [ct_score] [t_score]
/fpsm blockoffensive halftime clear <map> <side>
side 使用 ct 或 t;时长范围为 60–140 tick。select、facing、duration、enable 和 clear 会更新世界 serverconfig/blockoffensive-halftime-intro.json,reload 从该文件重新加载。
完整运行流程见演出、死亡镜头与观战。
类:web/BOClientWebServer.java
配置:
webServerEnabled=true
webServerPort=8080
运行条件:
- 客户端处于地图内。
- 客户端处于比赛中。
- 当前客户端为旁观者。
- 配置已启用 Web Server。
这是客户端本地 API,不是服务端全局 API。
默认地址:
http://localhost:8080/api/data
方法:
GET
非 GET 请求返回:
405 Method Not Allowed
响应类型:
application/json
| 字段 | 类型 | 说明 |
|---|---|---|
currentMapSupportShop |
boolean | 当前地图是否支持商店。 |
cTWinnerRounds |
number | CT 已胜回合数。 |
tWinnerRounds |
number | T 已胜回合数。 |
time |
number | 当前同步时间。 |
isDebug |
boolean | 是否 debug 状态。 |
isStart |
boolean | 游戏是否开始。 |
isError |
boolean | 是否错误状态。 |
isPause |
boolean | 是否暂停。 |
isWaiting |
boolean | 是否等待中。 |
isWarmTime |
boolean | 是否热身中。 |
isWaitingWinner |
boolean | 是否等待胜者阶段。 |
canOpenShop |
boolean | 当前玩家是否可打开商店。 |
shopCloseTime |
number | 商店关闭时间。 |
nextRoundMoney |
number | 下一回合最低经济。 |
dismantleBombProgress |
number | 拆弹进度。 |
bombFuse |
number | C4 剩余引信。 |
bombTotalFuse |
number | C4 总引信。 |
tabData |
object | 玩家 TAB 数据,以 UUID 为键。 |
每个玩家对象包含:
| 字段 | 类型 | 说明 |
|---|---|---|
name |
string | 玩家显示名。 |
team |
string | 队伍名。 |
money |
number | 玩家经济。 |
health |
number | 玩家血量百分比,0 到 100。 |
items |
object | 武器数据,按类别或槽位组织。 |
bpAttributeHasHelmet |
boolean | 防弹护甲是否含头盔。 |
bpAttributeDurability |
number | 防弹护甲耐久。 |
同时会合并 FPSMatch PlayerData.mappedInfo() 中的统计字段,例如击杀、死亡、助攻、伤害等。
{
"currentMapSupportShop": true,
"cTWinnerRounds": 3,
"tWinnerRounds": 2,
"time": 1200,
"isStart": true,
"isPause": false,
"canOpenShop": false,
"dismantleBombProgress": 0.0,
"bombFuse": 600,
"bombTotalFuse": 800,
"tabData": {
"00000000-0000-0000-0000-000000000000": {
"name": "Player",
"team": "ct",
"money": 3200,
"health": 100.0,
"items": {},
"bpAttributeHasHelmet": true,
"bpAttributeDurability": 100
}
}
}MapRegister 注册两个 FPSMatch 游戏类型:
| 类型 | Java 类 | 说明 |
|---|---|---|
cs |
CSGameMap |
爆破模式。 |
csdm |
CSDeathMatchMap |
死斗模式。 |
商店类型:
| 类型 | ItemType |
|---|---|
cs |
map/shop/ItemType.java |
csdm |
map/shop/ItemType.java |
持久化数据 ID:
| 数据 ID | 类 |
|---|---|
CSGameMaps |
CSGameMap |
CSDeathMatchMaps |
CSDeathMatchMap |
事件均通过 Forge EventBus 使用。
基类事件。
| 方法 | 返回 | 说明 |
|---|---|---|
getMap() |
CSGameMap |
事件关联的爆破地图。 |
触发时机:爆破模式换边时。
字段和方法继承自 CSGameMapEvent。
触发时机:玩家成功放置 C4 后。
| 方法/字段 | 类型 | 说明 |
|---|---|---|
getMap() |
CSGameMap |
地图。 |
getTeam() |
ServerTeam |
玩家所在队伍。 |
getPlayer() |
ServerPlayer |
放置 C4 的玩家。 |
触发时机:爆破模式回合结束。
| 方法 | 返回 | 说明 |
|---|---|---|
getMap() |
CSGameMap |
地图。 |
getWinner() |
ServerTeam |
获胜队伍。 |
getReason() |
CSGameMap.WinnerReason |
胜利原因。 |
isCancelable() |
false |
不可取消。 |
触发时机:玩家获得 MVP。
| 方法 | 返回 | 说明 |
|---|---|---|
getPlayer() |
Player |
MVP 玩家。 |
getMap() |
BaseMap |
所属地图。 |
getReason() |
MvpReason |
MVP 原因。 |
isCancelable() |
false |
不可取消。 |
触发时机:MVP HUD 渲染前。
| 方法 | 返回 | 说明 |
|---|---|---|
getGuiGraphics() |
GuiGraphics |
渲染上下文。 |
getScreenWidth() |
int |
屏幕宽度。 |
getScreenHeight() |
int |
屏幕高度。 |
getHud() |
CSMvpHud |
当前 MVP HUD。 |
触发时机:MVP HUD 渲染后。字段同 Pre。
触发时机:MVP HUD 动画触发。
| 方法 | 返回 | 说明 |
|---|---|---|
getReason() |
MvpReason |
动画触发原因。 |
@Mod.EventBusSubscriber(modid = "yourmod", bus = Mod.EventBusSubscriber.Bus.FORGE)
public class YourEvents {
@SubscribeEvent
public static void onRoundEnd(CSGameRoundEndEvent event) {
CSGameMap map = event.getMap();
ServerTeam winner = event.getWinner();
CSGameMap.WinnerReason reason = event.getReason();
}
}配置类:BOConfig
| 类 | 说明 |
|---|---|
BOConfig.Client |
客户端 HUD 和击杀图标配置。 |
BOConfig.Common |
脚步声、C4、游戏规则、Web Server 配置。 |
详情见 配置说明。
如果使用项目自身 Maven 发布配置生成的源码构建产物:
dependencies {
modImplementation "com.phasetranscrystal:blockoffensive:<BlockOffensive version>"
}公开平台依赖示例见 README。