☰
Mine Goose Duck 0.1版本发布:Forge 1.19.2模组开发环境搭建与TaoToken配置指南
2026/10/3 6:38:32 网站建设 项目流程

1. 从 Mine Goose Duck 0.1 说起:Forge 1.19.2 模组开发环境到底怎么搭

Mine Goose Duck 0.1 发布之后,很多想自己动手改模组、加身份物品的朋友来问我:这个基于 Forge 1.19.2 的模组,本地开发环境到底怎么从零跑起来?我这次就把整套流程拆开讲清楚——从 JDK 选择、Forge MDK 导入、Gradle 依赖拉取,到把模组里调用大模型能力的部分接到 TaoToken 的统一 Key/API 通道上,最后验证模组能正常加载、身份物品能注册进游戏。

先说清楚这套东西是什么、能做什么、适合谁。Forge 1.19.2 是 Minecraft 1.19.2 版本对应的模组加载器,Mine Goose Duck 就是跑在它上面的一个「鹅鸭杀」玩法模组,里面注册了警长、正义使者、星界行者、保镖、观鸟者、鹈鹕、秃鹫、鸽子、爆炸王、隐形、专业杀手这些身份物品,还加了鹅、鸭、木乃伊三种新生物和扭蛋机。你要做的,是让这套代码在你自己的机器上编译通过、进游戏能看到生物和身份物品,同时把模组里需要联网的 AI 对话/文本生成能力,统一走 TaoToken 的 API 通道,而不是每个功能各配一套 Key。

适合谁看:有 Java 基础、想入门 Forge 模组开发的人;已经能跑原版模组、但卡在依赖下载或 API 配置的人;以及想把模组里的 AI 能力集中管理、不想在代码里散落一堆密钥的开发者。整篇按「先搭环境、再配通道、然后验证、最后排错」的顺序走,每一步都给可复制的命令和配置。

我试过在 Windows 和 macOS 上各跑一遍,坑主要集中在 Gradle 拉依赖和 JDK 版本上,下面会逐个说。你跟着做,大概 30 到 40 分钟能跑通本地链路。

2. TaoToken 前置准备:统一 Key 与 API 通道是什么

在动 Forge 之前,先把 TaoToken 这一侧准备好,不然后面模组里调用 AI 能力时会来回改配置。TaoToken 在这里扮演的角色,是一个统一的模型调用入口:你申请一个 Key,通过一个 Base URL 就能访问多种模型,不用为每个模型单独记地址和密钥。对模组开发来说,好处是代码里只维护一份配置,换模型只改 Model ID。

你需要准备三样东西,我把它叫做「三件套」:Base URL、API Key、Model ID。这三件套在后面 Forge 项目的配置文件、以及 Claude Code / Cline 这类工具里都会反复出现,先记牢。

Base URL 用https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为请求前缀。API Key 去控制台生成,路径是 API Keys 页面,生成后只显示一次,复制存好。Model ID 按你要用的模型填,比如做文本对话就填对应的对话模型标识,做代码补全就填代码模型标识。

具体操作顺序:先打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解整体能力,然后进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 创建 Key,生成后到 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 管理。如果你只是想先验证模型能不能通,可以直接用模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 发一条消息试试,确认 Key 有效再往下走。

这里有个容易忽略的点:Key 的权限和作用范围。生成 Key 时看清楚它绑定的额度和可用模型范围,别生成一个只能调某个模型的 Key,结果模组里想换模型发现调不通。另外 Key 不要硬编码进会提交到 Git 的源码里,后面我会给一个用本地配置文件隔离的做法。

如果你打算长期做模组开发、还要接 Agent 类工具,可以顺带看下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite,它更适合持续编码场景。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,遇到参数不确定时以文档为准。

3. 可复制配置:Forge MDK 与 TaoToken 接入片段

这一节是核心,给的都是能直接复制粘贴的片段。先搭 Forge 1.19.2 的 MDK,再把 TaoToken 的配置接进去。

第一步,确认 JDK。Forge 1.19.2 需要 JDK 17,别用 JDK 8 或 21,否则 Gradle 构建会报不支持的 class 版本。命令行验证:

java -version

输出里要能看到17.0.x。如果不是 17,先装一个 JDK 17 并切换JAVA_HOME。

第二步,拿 Forge 1.19.2 的 MDK。去 Forge 官方文件页选 1.19.2 对应的 MDK 压缩包,解压到一个空目录,比如mine-goose-duck-dev。解压后目录里应该有build.gradle、gradle.properties、settings.gradle、src等。

第三步,改gradle.properties,把模组元信息填上。这是 Forge MDK 的标准配置,路径就是项目根目录的gradle.properties:

org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false minecraft_version=1.19.2 forge_version=43.2.0 mod_id=minegooseduck mod_name=Mine Goose Duck mod_license=MIT mod_version=0.1.0 mod_group_id=com.example.minegooseduck mod_authors=yourname mod_description=Mine Goose Duck mod for Forge 1.19.2

forge_version按你下载的 MDK 实际版本填,43.x 系列对应 1.19.2。mod_id全小写,别用大写或空格。

第四步,把 TaoToken 三件套写进一个本地配置,不要写进gradle.properties(那个会进版本库)。在项目根目录建一个taotoken.local.properties,并把它加进.gitignore:

taotoken.base_url=https://taotoken.net/api taotoken.api_key=sk-你的Key taotoken.model_id=你的模型ID

然后在build.gradle里读取这个文件,把值注入到模组运行时能读到的资源里。在build.gradle末尾加一段:

def localProps = new Properties() def localFile = file('taotoken.local.properties') if (localFile.exists()) { localFile.withInputStream { localProps.load(it) } } processResources { inputs.property "taotoken_base_url", localProps.getProperty('taotoken.base_url', '') inputs.property "taotoken_model_id", localProps.getProperty('taotoken.model_id', '') filesMatching('taotoken.properties') { expand( base_url: localProps.getProperty('taotoken.base_url', ''), model_id: localProps.getProperty('taotoken.model_id', '') ) } }

注意 API Key 不要通过processResources打进 jar,那等于把密钥发出去。Key 只在本地开发时由运行参数注入,下面给做法。

第五步,在src/main/resources下建taotoken.properties模板:

taotoken.base_url=${base_url} taotoken.model_id=${model_id}

第六步,本地运行时把 Key 通过 JVM 参数传进去。在 IDE 的 Run Configuration 里,给 VM options 加:

-Dtaotoken.api_key=sk-你的Key

代码里用System.getProperty("taotoken.api_key")读取。这样 Key 不进 jar、不进 Git,只在本地运行环境里存在。

第七步,写一个最小的调用示例,验证通道能通。在模组主类里加一个方法:

public static String askTaoToken(String prompt) throws IOException { String baseUrl = System.getProperty("taotoken.base_url", "https://taotoken.net/api"); String apiKey = System.getProperty("taotoken.api_key", ""); String modelId = System.getProperty("taotoken.model_id", ""); HttpClient client = HttpClient.newHttpClient(); String body = "{\"model\":\"" + modelId + "\",\"messages\":[{\"role\":\"user\",\"content\":\"" + prompt + "\"}]}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(baseUrl + "/v1/chat/completions")) .header("Content-Type", "application/json") .header("Authorization", "Bearer " + apiKey) .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); }

这段是示意,实际请求体按你用的模型接口格式调整,参数以接入文档为准。重点是三件套的读取方式和请求头Authorization: Bearer的写法。

到这里,Forge MDK 和 TaoToken 配置就都齐了。下一步是构建和验证。

4. 验证请求与模组加载:从 gradle runClient 到身份物品注册

配置写完,先别急着写业务逻辑,把「能构建、能进游戏、能调通 API」这三件事验证掉。

先构建。在项目根目录执行:

./gradlew build

Windows 下用gradlew.bat build。第一次会拉 Forge 和依赖,时间比较长,耐心等。如果卡在下载,看第五节排错。构建成功后,build/libs下会生成 jar。

再跑客户端:

./gradlew runClient

这会启动一个带 Forge 的 Minecraft 1.19.2 客户端。进游戏后,新建世界,检查两件事:一是新生物鹅、鸭、木乃伊能不能刷出来(可以用/summon命令测试,实体 ID 按你注册的填);二是身份物品能不能通过创造模式物品栏或扭蛋机拿到。如果这两样都在,说明模组加载和注册没问题。

然后验证 TaoToken 通道。在模组里加一个调试命令,或者直接在游戏里触发一次askTaoToken调用,把返回打到日志。命令行侧也可以先用 curl 单独验证 Key 和地址:

curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的Key" \ -d '{"model":"你的模型ID","messages":[{"role":"user","content":"ping"}]}'

返回里有正常的choices数组,就说明三件套没问题。这一步能帮你把「是 Key 的问题」和「是模组代码的问题」分开。

成功结果长这样:gradlew build输出BUILD SUCCESSFUL;runClient进游戏后能看到鹅、鸭、木乃伊;curl 返回 JSON 里choices[0].message.content有内容。三个都过,本地开发链路就算跑通了。

如果你用的是 Claude Code 这类工具辅助写模组代码,接入时同样填三件套:Base URL 填https://taotoken.net/api,Key 填你生成的,Model ID 填对应模型。Claude Code 的接入说明在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,按文档把地址和 Key 配好即可,不要用其它来路不明的地址。

5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth

这一节按真实报错来,遇到对号入座。

401 Unauthorized。最常见。原因通常是 Key 没传对或没生效。检查三处:Authorization头是不是Bearer sk-xxx格式,中间有空格;Key 是不是复制时带了换行或空格;Key 是不是已经过期或被禁用。用 curl 单独测一次,能排除模组代码干扰。如果 curl 也 401,就是 Key 本身的问题,去 API Keys 页面重新生成。

local proxy failed / connection refused。这个报错一般出现在你本地配了某个代理端口,但代理没起来,或者地址写错。先确认你请求的 Base URL 是https://taotoken.net/api,不要自己拼奇怪的端口。如果你本地环境有网络工具在跑,先关掉再试,避免请求被劫持到不存在的本地端口。模组里如果用了自定义 HttpClient 并设了 Proxy,检查ProxySelector配置。

reading choices 报错 / 解析不到 choices。这通常是返回体不是预期的 JSON,或者你解析的字段路径不对。先看原始返回字符串,别直接反序列化。可能情况:返回的是错误信息(比如额度不足、模型 ID 不存在),此时没有choices字段;或者模型 ID 填错,接口返回了错误对象。把model_id和文档里的可用模型列表对一遍。还有一种是把流式返回当非流式解析,导致 JSON 不完整。

OAuth 相关报错。如果你在 Claude Code 或类似工具里看到 OAuth 报错,多半是认证方式选错了。用 API Key 方式接入时,不需要走 OAuth 流程,直接在配置里填 Base URL 和 Key。检查工具配置里是不是残留了旧的 OAuth 配置,清掉再填三件套。Codex 的auth.json如果存在,确认里面的地址和 Key 与 TaoToken 一致,不要混用两套凭证。

Gradle 拉依赖失败。报错里常见Could not resolve或超时。先确认 JDK 是 17;再确认settings.gradle里的仓库地址没被改坏;如果是公司网络,检查是否需要配置 Gradle 的仓库镜像。别去改 Forge 版本号硬凑,版本对不上会引发一堆连锁错误。

模组加载了但生物不生成。检查生物注册用的实体类型有没有加到EntityType注册表,以及生成规则(Spawn Placement)有没有配。鹅要生成在森林、平原、丛林,木乃伊在沙漠,这些生物群系标签要写对。身份物品拿不到,检查物品有没有注册进创造模式标签页,或者扭蛋机的掉落逻辑有没有触发。

排错时记住一个原则:先用 curl 把 API 侧和 Key 侧的问题隔离掉,再回头看模组代码。这样能省一半时间。

6. 把链路固定下来:后续开发与统一通道的用法

环境跑通之后,建议把几个习惯固定下来,后面加身份物品、加生物会顺很多。

第一,三件套只维护一份。Base URL、Key、Model ID 统一放在taotoken.local.properties和运行参数里,代码里不要出现第二份硬编码。以后换模型只改 Model ID,换 Key 只改本地文件,不用满项目搜。

第二,模组里所有需要 AI 能力的地方,都走同一个封装方法。比如你后面要给鹈鹕、秃鹫加对话,或者给扭蛋机加随机身份描述,都调askTaoToken这一层,别每个类各写一套 HTTP 请求。这样出错时只查一个地方。

第三,验证顺序固定成「curl 通 → build 成功 → runClient 进游戏 → 触发一次调用」。任何一步不过,先解决这一步,别跳。

第四,Key 不进 Git。.gitignore里加上taotoken.local.properties,提交前扫一眼有没有误提交。如果已经提交了,去控制台把那个 Key 禁用并重新生成。

后续你要发布 1.18 或 1.16 版本时,Forge 版本和 JDK 要求会变(1.16 用 JDK 8,1.18 用 JDK 17),但 TaoToken 这一侧的三件套不变,Base URL 还是https://taotoken.net/api,换的只是模组侧的 Forge 配置。把通道和模组版本解耦,是这套做法最省心的地方。

如果你在接入过程中卡在某个具体报错,先去接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 对照参数,再去 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 确认 Key 状态。想先验证模型返回是否正常,用模型对话 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite 发一条最快。长期做模组和 Agent 开发的话,Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 更合适。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询