Repository navigation
Developer Guide
本页面面向准备参与 BlockOffensive 开发的开发者,覆盖从克隆项目到运行、构建、理解模块和开始扩展的完整流程。
| 工具 | 要求 |
|---|---|
| JDK | Java 17 和 Java 21,均需能被 Gradle toolchain 发现 |
| Git | 可访问 GitHub |
| Gradle | 使用仓库自带 gradlew.bat,无需全局安装 |
| IDE | IntelliJ IDEA 或 Eclipse |
项目使用 Forge 1.20.1、NeoForged legacyforge Gradle 插件和 Parchment mappings。
推荐 IntelliJ IDEA:
- 选择
File -> Open。 - 打开仓库根目录。
- 等待 Gradle 同步完成。
- 确认 Project SDK 和源码语言级别为 Java 17。
- 在 Gradle JVM/toolchain 列表中确认 Java 21 可用。
源码以 Java 17 编译。createMinecraftArtifacts 使用 Java 21 运行 ModDev 工具,因此 build、首次开发运行或需要生成 Minecraft artifacts 的任务可能同时解析两个 toolchain。可用下列命令检查 Gradle 识别到的 JDK:
.\gradlew.bat javaToolchains --console=plainEclipse 用户可参考仓库中的 .eclipse/configurations 启动配置。
git clone https://github.com/SSOrangeCATY/BlockOffensive.git
cd BlockOffensive仓库包含本地 FPSMatch 子项目,并通过 Gradle composite build 替换依赖:
includeBuild("FPSMatch") {
dependencySubstitution {
substitute module('com.phasetranscrystal:fpsmatch') using project(':')
}
}这意味着你修改 FPSMatch 子目录源码后,BlockOffensive 可以直接引用本地源码版本。
.\gradlew.bat tasks --all --console=plain常用任务:
| 命令 | 说明 |
|---|---|
.\gradlew.bat runClient |
启动开发客户端。 |
.\gradlew.bat runServer |
启动开发服务端,带 --nogui。 |
.\gradlew.bat runGameTestServer |
启动 GameTest 服务端。 |
.\gradlew.bat runData |
运行数据生成,输出到 src/generated/resources/。 |
.\gradlew.bat compileJava |
编译 Java 源码。 |
.\gradlew.bat build |
构建完整产物。 |
建议先运行:
.\gradlew.bat compileJava --console=plain如果只需要验证完整构建:
.\gradlew.bat build --console=plain构建成功后,jar 会出现在:
build\libs\.\gradlew.bat runClient --console=plain开发运行目录为:
run/
如果需要额外测试依赖或地图数据,可放入该运行目录对应位置。
.\gradlew.bat runServer --console=plain服务端运行配置会自动添加:
--nogui
.\gradlew.bat runData --console=plain数据生成任务配置:
- mod id:
blockoffensive - 输出目录:
src/generated/resources/ - existing 目录:
src/main/resources/
BlockOffensive/
├─ build.gradle
├─ gradle.properties
├─ settings.gradle
├─ FPSMatch/
├─ src/main/java/com/ptcrys/blockoffensive/
│ ├─ client/
│ ├─ command/
│ ├─ compat/
│ ├─ data/
│ ├─ entity/
│ ├─ event/
│ ├─ item/
│ ├─ map/
│ ├─ mixin/
│ ├─ net/
│ ├─ sound/
│ ├─ spectator/
│ ├─ util/
│ ├─ web/
│ ├─ BOConfig.java
│ └─ BlockOffensive.java
└─ src/main/resources/
建议顺序:
-
BlockOffensive.java:Mod 入口、配置注册、网络包注册、通用初始化。 -
MapRegister.java:注册cs和csdm地图类型。 -
CSMap.java:CS 系模式基类,封装队伍、旁观、经济、通用规则。 -
CSGameMap.java:爆破模式主逻辑。 -
CSDeathMatchMap.java:死斗模式主逻辑。 -
BOClientBootstrap.java:客户端按键、HUD、TAB、实体渲染注册。 -
BOClientEvent.java:客户端 tick、Web Server、移动同步、投掷物消息。 -
net/:自定义网络包。 -
event/:对外 Forge 事件。 -
BOConfig.java:Forge Config 定义。
- 先判断功能属于通用 CS 行为、爆破模式还是死斗模式。
- 通用逻辑优先放在
CSMap。 - 爆破模式专属逻辑放在
CSGameMap。 - 死斗模式专属逻辑放在
CSDeathMatchMap。 - 如果需要对外扩展,优先增加 Forge Event。
- 如果需要同步到客户端,增加或复用
net/包。 - 编译验证:
.\gradlew.bat compileJava --console=plain。
- 服务器侧准备同步数据。
- 新增或复用 S2C 网络包。
- 将数据写入
CSClientData或专门的客户端缓存。 - 在 HUD、Overlay、TAB 或 Screen 中读取缓存。
- 用
runClient实际检查显示。
- 在
BOConfig.Client或BOConfig.Common添加配置。 - 如果有配置界面,需要同步更新
BOMenuIntegration。 - 如果是游戏规则,确认
CSMap.configureGameRules是否需要应用。 - 在 Wiki 的 配置说明 中补充配置项。
- 在
net/下按领域放置:bomb、dm、mvp、shop、spec或根包。 - 提供
encode、decode、handle。 - 在
BOPacketRegistration.register(...)中注册,并保持已有 discriminator 顺序。 - 确认方向、线程切换和发送方校验。
- 在 网络包文档 中补充字段与用途。
当前仓库主要使用 Gradle 编译和运行任务验证。常用检查:
.\gradlew.bat compileJava --console=plain
.\gradlew.bat build --console=plain如果变更涉及客户端 UI、HUD、按键、Web Server 或渲染,建议额外运行:
.\gradlew.bat runClient --console=plain如果变更涉及服务端地图生命周期、队伍、经济或 C4 逻辑,建议额外运行:
.\gradlew.bat runServer --console=plain源码构建发布坐标:
com.phasetranscrystal:blockoffensive:<BlockOffensive version>公开平台 Maven 示例见 README。当前源码使用 mod_group_id=com.phasetranscrystal、mod_id=blockoffensive、mod_version=1.3.0。
- 保持 Java 17 源码 toolchain,并保留
createMinecraftArtifacts的 Java 21 工具运行时。 - 不要绕开 FPSMatch 已有地图、队伍、商店、经济、统计和网络工具。
- 修改 FPSMatch 子项目时要同时验证 BlockOffensive。
- 修改网络包时要注意客户端/服务端两端协议一致。
- 修改比赛逻辑时要检查旁观者、掉线、死亡、回合重置、地图清理等边界。
- 不要把本地运行目录、缓存、账号文件或构建产物提交到主仓库。