分类: Minecraft 插件
用 AI 团队打造 Minecraft 服务器#4ChatGPT 画图、Claude 审核的资源包流水线!🎨
本文译自韩语原文。
要点速览
画图交给 ChatGPT,规格和审核交给 Claude,分工明确。本文介绍如何在提示词里写明像素坐标、让它先用 Python 画好网格,如何在 1.21.11 中用 item 定义 JSON 加上拉弓三阶段,以及如果没有审核就会直接进入游戏的 5 起事故。
- Minecraft Java 1.21.11 资源包(pack_format 75)· 2026-09-30 实际合并并在游戏中确认
- 物品贴图必须放在 textures/item/ 下 —— 放在 textures/gui/ 会出现紫黑格子
- 用字体字形绘制的 GUI 背景只能用窗口原尺寸(1 倍)—— 2 倍(352px)在游戏中没有显示
- 从 1.21.4 起,拉弓不再用 overrides,而是用 items/ 定义里的 condition + range_dispatch 实现
目录8 项

大家好!我是 Mojangcam 😎
上一篇 #3 讲了数值平衡。这一篇的主题是美术。这个服务器里有自定义 GUI(向导 "奥贝尔" 的菜单、任务日志)、几十个图标,还有职业武器的贴图。这些不可能全靠我自己画,所以我把工作分了工。
| 谁 | 做什么 |
|---|---|
| ChatGPT | 画图 + 把文件打包成 zip 交付 |
| Claude(组长) | 写提示词、审核 zip、合并进资源包、升级版本号 |
| 我 | 把提示词复制粘贴给 ChatGPT、把 zip 交给 Claude、在游戏里确认 |
这一篇会整理这条流水线,以及审核中拦下的 5 起事故。

📌 第 1 步 - 提示词:不写"画好看点",而是写坐标
Minecraft 的 GUI 只要格子位置偏 1 像素就会很明显。所以我在提示词里写的不是感觉,而是规格。
- 窗口尺寸公式:宽 176,高
114 + 18 × 줄 수,格子从(7 + 18c, 17 + 18r)开始,每格 18×18 - 每个按钮的槽位编号和矩形坐标
(x, y, w, h)表 - "先用 Python(PIL)精确画好网格,再在上面只叠加质感和装饰"
- 窗口内部完全不透明(不能透出原版的灰色窗口)
- 图片里不放文字 —— 按钮名称在游戏里用提示框显示
- 禁止画出像披风的东西,禁止模仿真实游戏或品牌的风格
- 成品是一个 zip:资源包片段 + 预览图 +
validation.json+ 韩语 README
图像生成 AI 要是把网格"随便"画一画,那就全完了。让它网格交给代码、图画交给 AI 这样分开处理,是效果最明显的一招。

📌 第 2 步 - 审核:收到 zip 后 Claude 做的事
- 亲自打开预览图查看(不只相信 AI 写的 validation.json)
- 测量图片尺寸、透明度、格子位置
- 确认所有模型 JSON 指向的纹理文件真的存在
- 和现有资源包重复的文件先备份再覆盖
- 升级资源包版本号、打包成 zip,发到 Discord 的资源包频道
在这个过程中拦下了五起事故。
📌 事故 1 - 纹理路径:差点变成紫黑格子
一开始我在提示词里把图标路径写成了 textures/gui/quest/<id>.png。结果 ChatGPT 反问我:"这个路径物品模型读不到。"
Minecraft 会把物品模型用到的图片打包进方块·物品图集(atlas),但默认只收录 textures/block/、textures/item/ 这两个文件夹。放在 textures/gui/ 里就进不了图集,会出现紫黑格子。
{
"parent": "minecraft:item/generated",
"textures": { "layer0": "myserver:item/gui/quest/crest_main" }
}→ 图片放在 assets/myserver/textures/item/gui/quest/crest_main.png。(也可以改图集配置,但那样要动到 minecraft 命名空间,所以我避开了。)
📌 事故 2 - 两把弓的名字互换了
我收到了 6 张拉弓图(2 种弓 × 3 个阶段)。只看预览图的话一切正常。但和原图逐像素对比之后,发现不对劲。
- 以
t0(冒险者之弓)命名的图其实全是t1(誓约之弓),反过来也一样 - 握把位置和原图相比最多偏了 9 像素 → 拉弓的一瞬间,弓看起来会从手里跳出去
- 弓周围散落着像灰尘一样的小点

于是 Claude 亲自动手修好了。
- 和原图对比,改正名字
- 找到握把上青绿色缠绳部分的中心,对齐到原图位置
- 把只有几个像素的零散小块删掉

从 1.21.4 开始,拉弓不再用旧的 overrides,而是用物品定义文件来实现。下面是基于 1.21.11 实际使用的文件。
{
"model": {
"type": "minecraft:condition",
"property": "minecraft:using_item",
"on_false": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a" },
"on_true": {
"type": "minecraft:range_dispatch",
"property": "minecraft:use_duration",
"scale": 0.05,
"fallback": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_0" },
"entries": [
{ "threshold": 0.65, "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_1" } },
{ "threshold": 0.9, "model": { "type": "minecraft:model", "model": "myserver:item/t0_sylvanor_bow_a_pulling_2" } }
]
}
}
}逐项拆开来看 💡
assets/myserver/items/<id>.json:这个文件位置就是 1.21.4+ 的"物品定义"。服务器只需要给物品加上item_model = myserver:<id>。using_item:是否正在拉弓use_duration+scale: 0.05:拉弓时间(tick)× 0.05 → 20 tick(1 秒)时为 1.0。和原版弓的数值一样。
📌 事故 3 - GUI 背景不显示
我加好了奥贝尔菜单和任务窗口的背景,结果在游戏里一打开,出现的是没有背景的原版灰色窗口,标题还被挤到了窗口外的左边。

自定义 GUI 背景的做法是在窗口标题里画一个巨大的字符(字体字形)。为了更清晰,我把背景做成了2 倍尺寸(352×444),结果这个尺寸的字形在游戏里没有被画出来。原因看起来是字体字形所在图集的尺寸上限(推测为 256 像素)。背景没了,只剩把标题往左拉的负间距生效,所以标题就被挤出去了。
→ 换成 ChatGPT 另外准备好的1 倍(176×222)背景后,问题马上解决。之后我在规则里写明:字体背景只收 1 倍尺寸。
📌 事故 4 - 闪烁的弓
加上拉弓之后,弓的侧面出现了阶梯状的闪烁条纹。

Minecraft 会给手里拿着的 2D 物品按像素加上厚度,把它变成立体的。16 像素的图没问题,但我们的弓是128 像素,于是生成了几百个细线和像素侧面,变成了条纹。
- 先把它换成厚度为 0 的单张平面 → 条纹没了,但太薄,看着别扭
- 于是用脚本做了一个模型:只把弓身按 64 格网格合并并给一点薄薄的厚度,弓弦和箭保持平面(一个模型大约 70~100 个方块)

📌 事故 5 - 缩成 16 像素的"3D 弓"
我也试着让 ChatGPT 做真正的 3D 弓。收到的模型是把128 像素的图缩到 16×16,每格做成一个单色方块。花纹、缠绳、羽毛装饰全都没了,弓身断开,只剩一些点浮在空中。而且拉弓用的是 1.21.4 已经废弃的 overrides 方式,在 1.21.11 里根本不生效。

→ 没有采用,先存档。3D 版之后会改为用 Blockbench 把弓身按分段曲线亲手搭建的方式重新提需求。
📌 总结
- 网格交给代码,图画交给 AI —— 提示词里写坐标,而不是感觉
- 审核要亲自看预览图,还要和原图逐像素对比
- 1.21.11 要记住的:物品贴图放
textures/item/,字体背景用1 倍,拉弓用 items/ 定义文件 - 即使是 AI 做的成品,该退回的就退回
下一篇是系列的最后一篇,讲 Discord 运营。会介绍决策论坛的标签和打勾规则、命令列表论坛、资源包频道这类由机器人自动管理的频道。敬请期待 🙌
这篇文章由我定方向,并和 Claude 一起整理而成。这个服务器是个人项目,不是 Minecraft 官方内容,与 Mojang、Microsoft 无关。
连载 · 共 5 篇中的第 4 篇
