Repository navigation
Architecture
SSOrangeCATY edited this page Sep 16, 2026
·
3 revisions
本页面说明 BlockOffensive 的主要模块、生命周期与源码入口。
BlockOffensive 是一个 Forge Mod,核心职责是在 FPSMatch 提供的竞技 FPS 框架上实现 CS 风格玩法。
Minecraft Forge
└─ BlockOffensive
├─ FPSMatch 地图/队伍/经济/商店/网络基础能力
├─ cs 爆破模式
├─ csdm 死斗模式
├─ C4、拆弹器、声音、HUD、TAB、击杀反馈
├─ TaCZ / Modern UI / Physics Mod / KubeJS 等兼容层
└─ 可选本地 Web API
主类:com.ptcrys.blockoffensive.BlockOffensive
关键职责:
- 定义
MODID=blockoffensive。 - 创建网络通道
blockoffensive:main。 - 协议版本为
1.6.0。 - 注册物品、创造模式标签、实体类型、音效。
- 注册 CLIENT 和 COMMON 配置。
- 监听 Forge 命令注册事件并注册
/cs2。 - 在 common setup 中调用
BOPacketRegistration注册全部自定义网络包。 - 初始化枪械拾取/丢弃声音、投掷物类型、Physics Mod 和 CounterStrikeGrenade 兼容逻辑。
- 在 IMC 阶段注册 Modern UI / Cloth Config 配置界面。
地图注册类:map/MapRegister.java
注册内容:
| 类型 | 类 | 说明 |
|---|---|---|
cs |
CSGameMap |
爆破模式。 |
csdm |
CSDeathMatchMap |
死斗模式。 |
同时注册:
-
CSGameMaps持久化数据。 -
CSDeathMatchMaps持久化数据。 -
CSGameMap旧数据修复器。 -
cs与csdm商店类型。
FPSMatch BaseMap
└─ CSMap
├─ CSGameMap
└─ CSDeathMatchMap
CSMap 是 BlockOffensive 两个模式共享的基类,负责:
- CT/T 队伍基础行为。
- 通用地图开始逻辑。
- 比赛游戏规则应用。
- 经济和商店辅助逻辑。
- 自动开始状态。
- 队伍颜色与玩家颜色。
- 旁观/玩家状态通用处理。
- 地图清理通用逻辑。
CSGameMap 是爆破模式核心,负责:
- 回合制比赛生命周期。
- 热身、等待、暂停、取消暂停投票。
- 胜利回合、加时、换边。
- 购买阶段与商店锁定。
- C4 发放、放置、引信、拆弹、爆炸。
- CT/T 胜负判定。
- MVP 判定与消息。
- 回合经济结算。
- 爆破模式内置 action。
CSDeathMatchMap 是死斗模式核心,负责:
-
csdm地图类型。 - 个人死斗或团队死斗开关。
- 比赛计时。
- 重生保护。
- 出生点选择。
- 玩家死亡后的快速重生。
- 死斗 TAB 和 HUD 数据同步。
类:client/BOClientBootstrap.java
职责:
- 注册打开商店按键。
- 注册拆弹按键。
- 注册旁观切换按键。
- 注册队伍聊天按键。
- 将旁观切换键接入 FPSMatch
SpecKeyHandler。 - 注册
CSGameTabRenderer和CSDMTabRenderer。 - 为
cs和csdm注册CSGameHud。 - 注册 C4 实体渲染器。
类:client/BOClientEvent.java
职责:
- 客户端 tick 中检查比赛数据是否需要重新拉取。
- 在等待/暂停状态锁定移动输入。
- 恢复商店界面临时修改过的 GUI scale。
- 根据 Web Server 配置和旁观状态启动/停止
BOClientWebServer。 - 在
csdm中同步玩家移动输入。 - 根据 FPSMatch 投掷物事件发送投掷物语音/消息。
- 处理客户端数据重置。
类:client/data/CSClientData.java
保存从服务端同步到客户端的比赛状态,例如:
- 当前地图是否支持商店。
- CT/T 分数。
- 当前时间。
- debug/start/error/pause/waiting/warm/waitingWinner flags。
- 商店是否可打开、商店关闭时间、下一回合最低经济。
- 拆弹进度。
- C4 引信和总引信。
- 武器与护甲数据。
| 类 | 说明 |
|---|---|
command/CSCommand.java |
注册 /cs2 <action>,将 action 转发给玩家所在 CSGameMap。 |
command/BOCommandRegister.java |
监听 FPSMatch 命令注册事件,添加 /fpsm mvp <targets> <sound>。 |
BlockOffensive 提供自己的 Forge Event:
CSGameMapEventCSGameMapEvent.TeamSwitchEventCSGameMapEvent.PlayerEvent.PlacedC4EventCSGameRoundEndEventCSGamePlayerGetMvpEventCSHUDRenderEvent.RenderMvpHud.PreCSHUDRenderEvent.RenderMvpHud.PostCSHUDRenderEvent.RenderMvpHud.TriggeredAnimation
这些事件用于让其他 Mod 或脚本扩展队伍换边、C4 放置、回合结束、MVP 和 HUD 渲染。
网络通道:
blockoffensive:main
协议版本:
1.6.0
网络包按领域分组:
| 目录 | 说明 |
|---|---|
net/bomb |
C4 拆弹动作、拆弹进度、C4 行为同步。 |
net/dm |
死斗移动输入同步。 |
net/intro |
入场与换边演出序列、客户端完成回执。 |
net/mvp |
MVP 消息、HUD 和音乐上传/分块。 |
net/ping |
队友 Ping 请求和标记同步。 |
net/shop |
商店状态、附近掉落查询和拾取。 |
net/spec |
旁观、击杀回放、观战名单、武器数据、C4 引信。 |
net/vote |
投票状态同步和玩家投票。 |
net 根目录 |
比赛设置、比分板、TAB 移除、死亡消息、Physics Mod 兼容。 |
详情见 网络包文档。
| 模块 | 说明 |
|---|---|
item/BOItemRegister.java |
注册 C4、拆弹器等物品与创造模式标签。 |
entity/BOEntityRegister.java |
注册 C4 实体。 |
sound/BOSoundRegister.java |
注册 C4、武器拾取/丢弃、阵营语音、投掷物语音、MVP 等声音。 |
| 类或包 | 说明 |
|---|---|
compat/BOImpl.java |
兼容检测入口。 |
compat/BOMenuIntegration.java |
配置界面集成。 |
compat/CSGrenadeCompat.java |
CounterStrikeGrenade 兼容。 |
compat/PhysicsModCompat.java |
Physics Mod 客户端兼容。 |
compat/HitIndicationCompat.java |
Hit Indication 兼容。 |
compat/PhysicsDeathProxyGuard.java |
Physics Mod 死亡代理保护。 |
src/main/resources/assets/blockoffensive/
├─ lang/
├─ models/
├─ shaders/
├─ sounds/
├─ textures/
└─ sounds.json
主要资源:
- 中文和英文语言文件。
- C4 方块/物品模型。
- killcam 灰度 shader。
- C4、武器、阵营语音、投掷物语音声音。
- UI 贴图和提示图标。
BlockOffensive 通过 FPSMatch 的 SaveHolder 和 DataFixer 持久化地图数据:
CSGameMapsCSDeathMatchMaps
CSGameMapFixer.OldV0 用于修复旧版本 CSGameMap 数据。
开发新功能时建议遵循:
- 地图与比赛生命周期优先复用 FPSMatch。
- 模式共享逻辑放入
CSMap。 - 爆破专属逻辑放入
CSGameMap。 - 死斗专属逻辑放入
CSDeathMatchMap。 - 客户端显示状态通过网络包同步到
CSClientData。 - 对外扩展优先暴露 Forge Event,而不是让外部直接依赖内部字段。
- 网络包必须在服务端校验发送者状态和地图状态。