
Grasscutter 服务端重实现功能概览、Cultivation 快速部署与 Gradle 源码构建全指南【免费下载链接】GrasscutterA server software reimplementation for a certain anime game.项目地址: https://gitcode.com/GitHub_Trending/gr/GrasscutterGrasscutter 是某个二次元动漫风格游戏的服务端软件重实现server software reimplementation它允许玩家搭建自己的私人游戏服务器实现登录、战斗、背包、祈愿等核心玩法。本文以仓库根目录 README.md 为骨架结合仓库内的 build.gradle、Dockerfile、start.cmd、scripts/install/install.sh 以及 Grasscutter.java 等源码文件系统讲解 Grasscutter 的现状、功能边界、一键部署Cultivation与从源码编译的完整流程并深入解析其核心模块结构与运行配置帮助读者从零搭建并理解这套服务端实现。项目定位与现状Grasscutter 是一个独立的服务端程序其设计目标是用 Java 重新实现游戏的服务端逻辑从而支持玩家自建服务器。整个项目围绕 Java 17 生态构建网络层基于 Netty数据持久化依赖 MongoDB通过 Morphia 对象映射协议通信使用 Google Protocol Buffers 自动生成 Java 代码脚本执行则内嵌 Lualuaj-jse引擎这些依赖都可以在 build.gradle 中一一对应查证。当前版本与游戏版本兼容性需要特别强调的是版本匹配问题。README 明确说明截至 2025 年 1 月 12 日Grasscutter 已不再积极维护目前只支持到游戏版本 REL4.0.1对应 4.0 版本即枫丹 Fontaine 区域引入的版本。因此服务器版本与客户端游戏版本必须严格匹配不能混搭——README 以粗体强调YOU CANNOT MIX AND MATCH GAME VERSIONS AND SERVER VERSIONS请务必为你的游戏版本下载对应版本的 Grasscutter如果你拿到的是 beta 版或非官方构建的 Grasscutter本文的指南理论上依然适用但官方不提供技术支持。已实现的核心功能根据 README 的 Current features 列表当前版本已实现的功能包括功能说明登录Logging in支持账号登录流程默认认证系统允许任意用户名登录战斗Combat包含战斗相关逻辑与怪物 AI 的基础实现好友列表Friends list支持好友系统的部分功能传送Teleportation支持在地图/场景之间传送祈愿系统Gacha system实现抽卡/祈愿机制与卡池逻辑多人游戏Co-op仅部分可用partially works控制台生成魔物Spawning monsters via console可通过服务端控制台指令生成怪物背包功能Inventory features接收/升级物品、角色等这些功能在源码结构中均有对应模块支撑例如 game/entity 目录承载实体角色、怪物、道具、机关逻辑game/gacha 目录实现祈愿系统command/commands 目录则包含 Spawn、Give、Teleport 等控制台指令的实现类其中 SpawnCommand.java 与 GiveCommand.java 正是 README 所描述控制台生成魔物与背包收发物品能力的命令入口。快速开始使用 Cultivation 一键部署对于大多数玩家README 推荐使用Cultivation启动器完成全自动部署。这是最快、最省事的路径步骤如下准备 Java 17安装 JDK 17注意是 JDK 而非仅 JRE因为服务端编译与运行都需要它准备 MongoDB Community ServerGrasscutter 使用 MongoDB 存储账号、角色、背包等持久化数据获取游戏客户端 REL4.0.x如果本地没有 4.0.x 客户端需要自行寻找对应版本的客户端资源下载最新版 Cultivation.msi安装包并以管理员身份打开点击右上角的下载按钮选择Download All-in-One一键下载 Grasscutter 完整包点击右上角的齿轮图标进入设置将游戏安装路径设置为你的游戏客户端所在目录将自定义 Java 路径设置为C:\Program Files\Java\jdk-17\bin\java.exe其余设置保持默认即可点击启动按钮旁边的小按钮准备环境随后点击启动按钮在游戏内登录界面输入任意用户名即可登录密码可随意填写默认认证系统不校验密码可对照 DefaultAuthentication.java 的实现理解这一行为。提示整个部署链路中Cultivation 负责下载并整合 Grasscutter 服务端 jar、资源文件resources与密钥keys并自动处理与客户端的衔接这也是它被 README 作为首选方案的原因。从源码构建前置要求与环境准备如果你希望自行编译最新代码例如参与开发或需要自定义构建Grasscutter 使用Gradle管理依赖与构建流程。构建所需前置条件如下Java Development Kit 17 或更高版本源码中sourceCompatibility JavaVersion.VERSION_17、targetCompatibility JavaVersion.VERSION_17见 build.gradle项目明确以 Java 17 为编译目标Git用于克隆仓库项目包含 submodule克隆时需--recurse-submodulesNodeJS可选仅在需要构建前端 Handbook在线手册时需要。仓库根目录提供了平台相关的 Gradle WrapperLinux/macOS 使用 gradlewWindows 使用 gradlew.bat无需单独安装 Gradle 本体。克隆与编译首先克隆仓库并进入目录由于仓库包含子模块务必使用--recurse-submodulesgit clone --recurse-submodules https://gitcode.com/GitHub_Trending/gr/Grasscutter.git cd GrasscutterWindows 环境编译.\gradlew.bat # 初始化构建环境首次会下载 Gradle 发行版与依赖 .\gradlew jar # 编译并打包 jarLinuxGNU环境编译chmod x gradlew ./gradlew jar编译完成后输出的 jar 位于项目根目录由 build.gradle 中的destinationDirectory file(.)指定默认命名为grasscutter-version.jar例如版本号定义在version 1.7.4见 build.gradle。关于 Handbook 生成的注意事项gradlew jar在打包过程中会尝试生成 Handbook前端手册。README 特别提醒Handbook 生成在某些系统上可能失败。若遇到该问题可在jar命令后追加参数跳过生成.\gradlew.bat jar -PskipHandbook1 # Windows ./gradlew jar -PskipHandbook1 # Linux从 build.gradle 可以看到generateHandbook任务的完整逻辑它通过npm installnpm run build构建位于 src/handbook 的前端项目再将其产物dist/index.html复制为src/main/resources/html/handbook.html打进 jar。任务执行前会逐一检查commands.json、avatars.csv、entities.csv、items.csv、mainquests.csv、quests.csv、scenes.csv等数据文件是否存在这些数据需要单独准备任一缺失都会跳过生成这也是生成失败最常见的根源。手动编译 Handbook可选除随 jar 自动生成外Handbook 也可以单独手动构建两种方式等价通过 Gradle./gradlew generateHandbook通过 NPM 直接构建cd src/handbook npm install npm run buildHandbook 前端基于 React Vite Tailwind CSS 构建见 src/handbook/package.json 与 src/handbook/vite.config.ts配合后端数据接口可提供角色、物品、实体、指令等资料的查询页面其后端查询逻辑对应 src/handbook/src/backend 目录中的server.ts、commands.ts、data.ts等文件。源码结构导读核心模块速览阅读完构建流程后理解源码的组织方式有助于排查问题与二次开发。项目的 Java 源码全部位于 src/main/java/emu/grasscutter 下按职责划分为多个包包路径职责auth认证系统抽象与默认实现任意用户名/密码登录即源于此command控制台指令框架与全部指令实现Spawn、Give、Teleport 等configconfig.json配置容器与运行时配置data游戏资源数据加载Excel 配置、BinOut 资源、资源装载器 ResourceLoaderdatabaseMongoDB 连接管理DatabaseManagergame核心玩法逻辑实体、背包、祈愿、任务、成就、活动、副本、尘歌壶、多人等net协议数据包packet定义与 Opcodes 管理plugin插件系统PluginManager 与插件 APIserver服务器实现游戏服 GameServer、分发包分发服 DispatchServer、HTTP 服务 HttpServer、事件与数据包收发task定时任务框架公告任务、月卡等utils工具类加解密 Crypto、JSON 序列化、语言本地化等项目的启动入口是 Grasscutter.javamain 类定义于 build.gradle。从启动流程可以看出服务端的整体架构程序启动后依次完成密钥加载Crypto.loadKeys()、启动参数解析StartupArguments.parse、配置加载loadConfig()若config.json不存在则自动生成默认配置、数据库初始化DatabaseManager.initialize()随后根据运行模式ServerRunMode启动对应服务器——HYBRID混合模式同时启动游戏服与 HTTP 服DISPATCH_ONLY仅启动分发包分发服务GAME_ONLY仅启动游戏服。HTTP 服务还挂载了区域信息RegionHandler、公告AnnouncementsHandler、认证AuthenticationHandler、祈愿GachaHandler、手册HandbookHandler等路由见 Grasscutter.java。运行与配置要点配置文件 config.json服务端首次运行时如果当前目录不存在config.json会自动生成一份默认配置逻辑见 Grasscutter.java。核心配置类为 ConfigContainer.java涉及服务器监听地址、运行模式、数据库连接、HTTP 端口等。若手动编辑配置后语法有误程序会报错退出并提示检查语法或删除config.json恢复默认配置。服务器端口从仓库的容器化部署定义 Dockerfile 的EXPOSE 80 443 8888 22102以及 scripts/install/install.sh 中的说明可以看出服务端依赖的关键端口包括80/443HTTP/HTTPS 服务端口dispatch 与 SDK 请求入口其中 443 为特权端口Linux 下通常需要sudo运行 jar8888本地 HTTP 服务端口22102游戏服GameServer的 TCP/UDP 通信端口。README 与安装脚本均强调若客户端需要远程连接服务器必须确保443 与 22102 端口TCP 与 UDP对外开放。密钥文件 keystore.p12 与服务器 IP服务端与客户端之间的通信依赖 SSL 证书仓库根目录附带默认的 keystore.p12。该默认证书仅针对localhost生成——如果你的服务器 IP 不是本机回环地址就需要基于服务器实际 IP 重新生成证书否则客户端在进入主界面/打开传送门时会出现 Connection Timed Out 错误。Linux 一键安装脚本 scripts/install/install.sh 完整展示了这一过程脚本会提示输入服务器 IP校验 IP 合法性后执行sed将config.json中的127.0.0.1替换为目标 IP并通过openssl生成 CA 证书、SSL 证书与keystore.p12导出密码为123456证书 CN 与 SAN 均指向该 IP这正是远程部署时最关键的一步。Windows 启动脚本仓库根目录的 start.cmd 提供了 Windows 平台的一键启动脚本其行为逻辑可归纳为通过 start_config.cmd 读取可执行文件路径配置JAVA_PATH、MITMDUMP_PATH、MONGODB_PATH等默认值均设为DO_NOT_CHECK_PATH以跳过路径探测也可显式指定自动检测grasscutter.jar是否存在缺失则报错退出若检测到 mitmdump 与 proxy.py 代理脚本则以管理员权限启动 mitmproxy 代理仅放行*.yuanshen.com、*.mihoyo.com、*.hoyoverse.com域名等待并安装 mitmproxy CA 证书到系统根证书库同时开启系统代理到127.0.0.1:8080若检测到mongod.exe则在resources\Database目录启动 MongoDB 守护进程最后启动java -jar grasscutter.jar退出时依次还原系统代理设置、移除 CA 证书并关闭 MongoDB。该脚本的设计目标是把代理 数据库 服务端三件套整合为一次点击适合不想手动管理依赖进程的 Windows 玩家。Docker 部署仓库同时提供了容器化部署方案。Dockerfile 采用多阶段构建builder 阶段基于gradle:jdk17-alpine安装 Node.js/npm 后执行gradle jar --no-daemon编译出grasscutter-*.jardata 阶段基于bitnami/git从资源仓库克隆 4.0 分支的游戏资源文件DATA_REPOSITORY与DATA_BRANCH为可配置的构建参数默认资源分支为4.0result 阶段基于amazoncorretto:17-alpine将编译产物grasscutter.jar、keystore.p12、resources/资源目录与 entrypoint.sh 启动脚本内容为java -jar /app/grasscutter.jar组装为最终镜像。Docker 镜像对外暴露 80、443、8888、22102 四个端口与前述端口说明完全对应。常见问题与故障排除TroubleshootingREADME 提供的官方排障途径是加入项目 Discord 社区并在support支持频道提问。结合前文内容这里整理几类高频问题的自查方向启动即退出检查config.json是否存在语法错误可直接删除文件恢复默认配置确认 Java 版本为 17 或更高确认 MongoDB 已安装并在运行Handbook 构建失败确认 Node.js 已安装或直接使用-PskipHandbook1跳过远程连接超时Connection Timed Out确认config.json中的服务器地址为实际公网/局域网 IP 而非127.0.0.1并基于该 IP 重新生成keystore.p12确认 443 与 22102 端口在防火墙/路由器上开放版本不匹配严格核对服务端与客户端版本的一致性当前仅支持 REL4.0.x。结语从 README 的快速指南出发本文已覆盖 Grasscutter 的功能边界、Cultivation 一键部署、Gradle 源码构建、Handbook 生成、源码模块结构、配置文件与端口说明、SSL 证书生成以及 Windows/Docker 两种运行方式。对于想要动手搭建私有服务器的玩家Cultivation 是最低门槛的路径对于希望深入定制或参与开发的工程师build.gradle、Grasscutter.java 与 Dockerfile 则是理解整套构建与运行体系的最佳起点。多语言说明文档可在 docs 目录下查阅中文版见 docs/README_zh-CN.md参与贡献前请先阅读仓库的 CONTRIBUTING.md 与 CODE_OF_CONDUCT.md。【免费下载链接】GrasscutterA server software reimplementation for a certain anime game.项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考