
Grasscutter 服务器部署完全指南从环境准备、源码构建到客户端连接与排障【免费下载链接】GrasscutterA server software reimplementation for a certain anime game.项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter本文基于 Grasscutter 仓库中的荷兰语部署文档docs/README_NL.md整理而成结合仓库内的启动脚本、代理脚本与核心入口源码进行补充说明。Grasscutter 是一款对某动漫风格游戏服务端进行重新实现的开源项目本文面向希望自行搭建、编译并接入客户端的服务器运维者与开发者讲解完整的部署链路环境依赖 → 获取/构建grasscutter.jar→ 启动服务 → 配置客户端流量代理 → 常见故障排查。项目定位与当前能力概览Grasscutter 的核心目标是以 Java 重新实现官方游戏服务器使玩家可以通过自定义服务器进行登录、战斗与社交等玩法。根据荷兰语文档列出的当前功能主要包括账号登录Logging in战斗系统Combat好友列表Friends list传送功能Teleportation抽卡系统Gacha system多人联机Co-op——部分可用通过控制台生成怪物Spawning monsters via console背包/仓库功能Inventory features如获取与升级物品、角色等从源码结构看上述能力均有对应的模块支撑登录与账号系统位于 src/main/java/emu/grasscutter/game/Account.java抽卡系统位于 src/main/java/emu/grasscutter/game/gacha/背包系统位于 src/main/java/emu/grasscutter/game/inventory/多人联机相关逻辑位于 src/main/java/emu/grasscutter/game/world/ 与 src/main/java/emu/grasscutter/server/game/GameSession.java。因此文档中“Co-op 部分可用”的描述与仓库当前实现是吻合的。需要注意Grasscutter 并非官方客户端的内置模式而是需要在客户端与真实服务器之间插入一层本地代理把游戏流量重定向到本地服务进程。这一点贯穿整个部署流程也是本文后续配置的核心。快速安装指南Quick Setup环境依赖Requirements按照荷兰语文档搭建服务需要三类软件依赖说明备注Java SE 17运行 Grasscutter 服务端若仅需运行不编译安装JRE即可MongoDB数据存储推荐 4.0 及以上版本代理守护进程Proxy Daemon拦截并重定向游戏流量推荐 mitmproxy即 mitmdump也可用 Fiddler Classic 等Java 17 这一要求与仓库构建配置一致build.gradle 中显式声明了sourceCompatibility JavaVersion.VERSION_17与targetCompatibility JavaVersion.VERSION_17意味着低于 17 的 JDK 无法编译或运行该项目。MongoDB 是 Grasscutter 的数据后端仓库使用 MorphiaMongoDB ODM作为对象映射层见 build.gradle服务启动时通过 src/main/java/emu/grasscutter/database/DatabaseManager.java 完成数据库初始化随后主类 src/main/java/emu/grasscutter/Grasscutter.java 中的DatabaseManager.initialize()才会被调用。因此先启动 MongoDB 再启动 Grasscutter是基本顺序要求。启动步骤Opstarten升级注意若你从旧版本升级而来请先删除旧的config.json让服务重新生成默认配置。获取grasscutter.jar从 CI Actions 产物下载或按下文“源码构建”一节自行编译。准备资源目录在grasscutter.jar所在目录下创建resources文件夹并将BinOutput、ExcelBinOutput、Readables、Scripts、Subtitle、TextMap等资源子目录移入其中。这些是游戏数据资源需要按官方 wiki 的说明获取。从仓库结构可以印证这些资源在服务中的角色ResourceLoader会在启动阶段加载全部资源src/main/java/emu/grasscutter/data/ResourceLoader.java并依赖BinOutput、ExcelBinOutput等目录解析出怪物、物品、场景等数据表src/main/java/emu/grasscutter/data/GameData.java。启动服务执行java -jar grasscutter.jar同时确保 MongoDB 服务正在运行。关于config.json主类 Grasscutter.java 的配置加载逻辑显示当config.json不存在时服务会自动生成一份默认配置并写入磁盘若文件存在则通过JsonUtils反序列化为ConfigContainer任何语法错误都会导致启动终止。因此“删除 config.json 以重新生成”是官方推荐的有效恢复手段。配置文件的结构定义可参考 src/main/java/emu/grasscutter/config/ConfigContainer.java。连接客户端Verbinden met de client接入客户端的整体流程如下创建账号使用服务器控制台命令创建一个账号。流量重定向三选一mitmdump 方式执行mitmdump -s proxy.py -k并信任 mitmproxy 生成的 CA 证书。Fiddler Classic 方式启动 Fiddler在设置中开启Decrypt https traffic并在Tools - Options - Connections中把默认端口8888改为其他端口然后加载官方 wiki 提供的 Fiddler 脚本。Hosts 文件方式直接修改 hosts 文件完成域名重定向。设置网络代理将客户端网络代理指向127.0.0.1:8080或你指定的代理端口。信任 mitmproxy CA 证书mitmproxy 的 CA 证书通常位于%USERPROFILE%\.mitmproxy目录下也可以从http://mitm.it下载。安装方式有两种双击证书文件按系统引导导入到“受信任的根证书颁发机构”。命令行方式certutil -addstore root %USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer注意荷兰语文档中该命令行示例存在转义笔误实际路径应为%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer。仓库中的 Windows 一键脚本 start.cmd 也执行了完全一致的逻辑等待 CA 证书生成后调用certutil -addstore root将证书加入系统存储可见信任 CA 证书是 HTTPS 流量解密链路上不可缺少的一环。代理脚本的工作原理源码佐证荷兰语文档中mitmdump -s proxy.py所指的proxy.py正是仓库 scripts/proxy.py 文件。其核心逻辑如下维护了一份需要拦截的官方服务器域名列表如api-os-takumi.mihoyo.com、dispatchosglobal.yuanshen.com、hk4e-sdk-os.hoyoverse.com等见 scripts/proxy.py当请求的pretty_host命中该列表时将请求的scheme、host、port改写为本地目标见 scripts/proxy.py目标地址由 scripts/proxy_config.py 提供默认REMOTE_HOST localhost、REMOTE_PORT 443、USE_SSL True同时支持通过环境变量MITM_REMOTE_HOST、MITM_REMOTE_PORT、MITM_USE_SSL覆盖便于在服务器位于其他机器时指向真实 IP额外实现了 TLS 策略控制保守策略/概率策略以处理握手失败场景见 scripts/proxy.py。这意味着客户端 → mitmdump(本地代理) → Grasscutter(localhost)的链路是明确的代理只改写命中列表的官方域名流量其余流量正常放行。使用 start.cmd 自动启动Windows文档指出也可以使用仓库根目录下的start.cmd自动启动服务器与代理守护进程但前提是配置好JAVA_HOME环境变量并填写start_config.cmd。start.cmd 会依次完成加载start_config.cmd配置 → 校验 Java、grasscutter.jar、mitmdump、mongod 的路径 → 以管理员权限启动 mitmdump含--allow-hosts白名单→ 等待并安装 CA 证书 → 设置系统代理为127.0.0.1:8080→ 启动 mongod → 启动java -jar grasscutter.jar退出时还会自动恢复系统代理设置并卸载 CA 证书start.cmd。start_config.cmd 是用户侧配置默认JAVA_PATH%JAVA_HOME%\bin\MITMDUMP_PATH与MONGODB_PATH指向当前目录并声明SERVER_JAR_NAMEgrasscutter.jar、PROXY_SCRIPT_NAMEproxy。若 Java 或 mitmproxy 安装在其他位置需要按需修改这些路径。该脚本的实现细节UAC 提权、注册表代理读写、证书安装与清理可作为 Windows 平台自动化部署的参考模板。从源码构建BouwenGrasscutter 使用Gradle管理依赖与构建流程settings.gradle 声明了根项目名Grasscutter。构建前置要求Java SE Development Kit 17build.gradle 要求 JDK 17GitWindows 构建git clone https://github.com/Grasscutters/Grasscutter.git cd Grasscutter .\gradlew.bat # 初始化构建环境 .\gradlew jar # 编译打包Linux 构建git clone https://github.com/Grasscutters/Grasscutter.git cd Grasscutter chmod x gradlew # 赋予执行权限 ./gradlew jar # 编译打包构建完成后可在项目根目录找到输出的grasscutter.jar。这由 build.gradle 的 jar 任务保证archiveBaseName grasscutter且destinationDirectory file(.)将产物直接输出到项目根目录manifest 中指定的Main-Class为emu.grasscutter.Grasscutter与 src/main/java/emu/grasscutter/Grasscutter.java 的主类一致。此外 build.gradle 还通过com.google.protobuf插件在src/generated/目录自动生成 protobuf 相关的 Java 协议类protobuf { generatedFilesBaseDir $projectDir/src/generated/ }这些类正是 src/generated/main/java/emu/grasscutter/net/proto/ 下大量*OuterClass.java文件的来源构成服务端与客户端通信的协议基础。构建过程中会顺带生成 handbook玩家手册页面若某些系统上生成失败可以跳过在gradlew jar命令后追加-PskipHandbook1。关于 handbook 的源码位置可参考 src/handbook/Vite React 前端工程构建产物会复制到src/main/resources/html/handbook.html。快速排障指南Quick Troubleshooting荷兰语文档给出的排障要点如下编译失败检查 JDK 安装是否正确需要 JDK 17且确认 JDK 的bin目录已加入PATH环境变量。客户端无法连接、无法登录、出现 4206 等错误绝大多数情况下是代理守护进程配置有问题。如果使用 Fiddler务必确保它运行在除8888以外的端口因为官方客户端与 Grasscutter 默认约定将代理指向其他端口8888与客户端默认端口冲突。正确的启动顺序MongoDB → Grasscutter → 代理守护进程mitmdump、fiddler 等→ 游戏客户端。参与项目开发Bijdragen aan het project仓库欢迎贡献者但要求遵守以下协作规范遵守行为准则在提交贡献前请仔细阅读仓库的 CONTRIBUTING.md其中包含 Code of Conduct 要求。提交范围控制只修复/添加所涉及的功能或只处理大范围的空白/风格问题不要两者混在一起单个 pull request 应聚焦单一问题且尽量用最少的改动行数实现。分支策略不要向stable分支发起合并请求除非是 hotfix开发工作应提交到development分支。PR 流程构建前确保已移除所有安装/构建依赖同步更新 README 与 wiki记录接口变更、新增环境变量、暴露端口、有用的文件位置与容器参数在 PR 描述中详细写下改动内容方便维护者编写 changelog。关键结论速览部署环节要点运行环境Java 17仅运行可只用 JRE MongoDB 4.0 代理守护进程服务启动先启 MongoDB再java -jar grasscutter.jar升级时删除旧config.json让其重新生成资源目录与 jar 同级的resources/下放置BinOutput、ExcelBinOutput、Readables、Scripts、Subtitle、TextMap客户端接入通过 mitmdumpmitmdump -s proxy.py -k 信任 CA 证书或 Fiddler改非 8888 端口或 hosts 重定向流量客户端代理指向127.0.0.1:8080自动部署Windows配置好JAVA_HOME与 start_config.cmd 后运行 start.cmd源码构建GradleWindows 用.\gradlew.bat.\gradlew jarLinux 用chmod x gradlew./gradlew jar产物在项目根目录典型排障编译失败查 JDK 17 与 PATH4206 等连接问题查代理端口Fiddler 勿用 8888遵循 MongoDB → Grasscutter → 代理 → 游戏的启动顺序通过本文你可以完整走通“环境准备 → 获取/构建服务端 → 启动服务 → 代理接入客户端 → 排障”的全流程。若在部署中遇到文档未覆盖的问题可以参考 README.md英文版以及仓库docs/目录下的其他语言版本说明如 docs/README_zh-CN.md并结合 src/main/java/emu/grasscutter/config/ConfigContainer.java 等配置类源码核对参数含义。【免费下载链接】GrasscutterA server software reimplementation for a certain anime game.项目地址: https://gitcode.com/GitHub_Trending/gr/Grasscutter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考