跳过正文
  1. 学习笔记/
  2. Demo && Resources/
  3. Minecraft/

PatPat 模组 — 资源包制作指南

·7 分钟·
lyrumu
作者
lyrumu
目录

PatPat 模组 — 资源包制作指南
#

结合 PatPat 官方 Wiki 与实际操作,涵盖两种修改方式。


目录
#

  1. 两种修改方式
  2. PatPat 模组资产结构
  3. 前置条件
  4. 方式 A:替换默认动画(简单)
  5. 方式 B:自定义动画配置(高级)
  6. 获取原版 Minecraft 素材
  7. 官方模板资源包
  8. 常见踩坑
  9. 参考链接

两种修改方式
#

方式 A:替换默认资产方式 B:自定义动画配置
原理直接覆盖 PatPat 默认的纹理和音效文件通过 JSON 配置文件添加新动画,可指定实体、触发者、优先级
适用场景修改所有生物的抚摸效果为特定实体/玩家制作专属动画
配置复杂度低(只改文件不改配置)中(需要编写 .json / .json5 配置)
灵活性一种动画通用于所有生物可同时存在多个动画,按实体类型/名称/UUID 匹配

两种方式可以共存 —— 方式 B 的动画会在匹配到特定实体时覆盖方式 A 的默认效果。


PatPat 模组资产结构
#

PatPat-1.2.6+26.1+fabric.jar 解压得到:

 1assets/patpat/
 2├── sounds.json                     # 默认音效注册表
 3├── sounds/
 4│   ├── pat.ogg     (9KB)           # 抚摸音效变体 1
 5│   ├── pat1.ogg    (9KB)           # 抚摸音效变体 2
 6│   ├── pat2.ogg    (9KB)           # 抚摸音效变体 3
 7│   ├── lopi.ogg    (16KB)          # 彩蛋音效变体 1
 8│   ├── lopi1.ogg   (15KB)          # 彩蛋音效变体 2
 9│   ├── lopi2.ogg   (17KB)          # 彩蛋音效变体 3
10│   └── lopi3.ogg   (17KB)          # 彩蛋音效变体 4
11├── textures/
12│   ├── default/patpat.png          # 默认动画纹理(560×112,5帧)
13│   ├── cape/patpat_cape_hand.png   # 披风纹理(64×32)
14│   ├── config/                     # 配置界面图标
15│   └── easter/egg.json             # 内置彩蛋配置(山羊 "Снежа")
16└── lang/                           # 140+ 语言文件

默认纹理规格

属性
文件textures/default/patpat.png
尺寸560 × 112(5 帧精灵图)
每帧112 × 112
格式PNG, RGBA

默认音效规格

属性
文件sounds/pat.ogg / pat1.ogg / pat2.ogg
格式OGG Vorbis, 单声道
采样率44100 Hz

sounds.json 内容:

1{
2    "patpat": { "sounds": ["patpat:pat", "patpat:pat1", "patpat:pat2"] },
3    "lopi":   { "sounds": ["patpat:lopi", "patpat:lopi1", "patpat:lopi2", "patpat:lopi3"] }
4}

前置条件
#

工具用途
图像编辑器(GIMP / Aseprite / Photoshop / Pillow)制作/编辑 PNG 纹理
Audacity 或在线转换器导出 OGG Vorbis 单声道音效(不能只改后缀名
7-Zip / Python zipfile打包 ZIP
浏览器访问 Mojang API 获取原版素材

方式 A:替换默认动画
#

直接覆盖 patpat.pngpat*.ogg,改变所有生物的抚摸效果。这是我们实际操作中采用的方式。

A1. 确定 pack_format
#

pack_format 是 Minecraft 判断资源包兼容性的版本号。错误的值会导致资源包不显示或不兼容。

Minecraft 版本pack_format
1.21.134
1.21.446
1.21.555
26.184

自查方法

1# API 查询(以 26.1 为例)
2curl -s "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" \
3  | jq -r '.versions[] | select(.id=="26.1") | .url' \
4  | xargs curl -s | jq '.pack_version.resource'
5# 输出: {"resource": 84, "data": 103}

A2. 处理纹理
#

目标路径:assets/patpat/textures/default/patpat.png

必须为 560 × 112 的精灵图(5 帧 × 112×112)。

示例:倒置末地烛(Python / Pillow):

 1from PIL import Image, ImageOps
 2
 3# 加载原版末地烛纹理(16×16)
 4src = Image.open("end_rod.png")
 5
 6# 垂直翻转 → 倒置
 7flipped = ImageOps.flip(src)
 8
 9# 缩放到 112×112(NEAREST 保留像素风格)
10frame = flipped.resize((112, 112), Image.NEAREST)
11
12# 平铺 5 帧 → 560×112
13spritesheet = Image.new("RGBA", (560, 112))
14for i in range(5):
15    spritesheet.paste(frame, (i * 112, 0))
16
17spritesheet.save("patpat.png")

也可以用 Aseprite 逐帧绘制真正的动画(而非 5 帧相同),参考 官方 Wiki:Creating Animation Texture

A3. 处理音效
#

目标路径:assets/patpat/sounds/pat.ogg / pat1.ogg / pat2.ogg

1# 从原版素材复制(以史莱姆音效为例)
2cp slime_big1.ogg   pat.ogg
3cp slime_big2.ogg   pat1.ogg
4cp slime_small1.ogg pat2.ogg

格式验证

1file pat.ogg
2# 期望: Ogg data, Vorbis audio, mono, 44100 Hz
3# ❌ 如果是 stereo → 用 Audacity 重新导出为 Mono

A4. 编写 pack.mcmeta
#

1{
2  "pack": {
3    "description": "PatPat × 倒置末地烛 + 史莱姆音效",
4    "pack_format": 84,
5    "supported_formats": 84
6  }
7}

A5. 打包 ZIP
#

⚠️ 最常见的错误:ZIP 多了一层文件夹
#

 1❌ 错误:
 2my_pack.zip
 3└── MyPack/                  ← 多余!
 4    ├── pack.mcmeta
 5    └── assets/...
 6
 7✅ 正确:
 8my_pack.zip
 9├── pack.mcmeta              ← 必须在 ZIP 根层级
10└── assets/
11    └── patpat/
12        ├── textures/default/patpat.png
13        └── sounds/...

验证 ZIP 结构
#

1python3 -c "
2import zipfile
3with zipfile.ZipFile('my_pack.zip', 'r') as zf:
4    for name in zf.namelist():
5        print(name)
6"
7# 第一行必须是 pack.mcmeta

Python 打包脚本
#

1import zipfile, os
2
3src_dir = "my_pack_folder"  # 源文件夹
4with zipfile.ZipFile("my_pack.zip", "w", zipfile.ZIP_DEFLATED) as zf:
5    for root, dirs, files in os.walk(src_dir):
6        for f in files:
7            fp = os.path.join(root, f)
8            arcname = os.path.relpath(fp, src_dir)
9            zf.write(fp, arcname)

方式 B:自定义动画配置
#

PatPat 支持通过 JSON 配置文件创建专属动画,可精确控制哪些实体触发、谁可以触发、动画参数等。这是官方 Wiki 的核心内容。

根据 PatPat Wiki — Creating Animation Config,你需要三个文件:

文件必需说明
动画纹理 .png精灵图(所有帧放一张图)
动画配置 .json / .json5定义纹理路径、帧数、持续时间、实体匹配规则等
自定义音效 .ogg + sounds.json❌(可选)注册新音效事件

配置文件的存放位置:assets/patpat/ 下的任意子目录

B1. 动画配置文件格式
#

参考 官方示例配置

 1// animated_piston.json5(文件名随意,后缀 .json 或 .json5)
 2{
 3    "version": "1.0.0",           // 配置版本(必需)
 4    "priority": 10,               // 优先级(可选,默认 0)
 5    "blacklist": false,           // true=黑名单 / false=白名单(可选,默认 false)
 6    "animation": {
 7        "texture": "patpat:textures/animated_piston.png",
 8        "duration": 300,          // 动画时长(ms)
 9        "frame": {
10            "totalFrames": 5,     // 总帧数
11            "scaleX": 1.0,        // X 轴缩放(默认 0.9)
12            "scaleY": 1.0,        // Y 轴缩放(默认 0.9)
13            "offsetX": 0.0,       // X 轴偏移(默认 0)
14            "offsetY": 0.0,       // Y 轴偏移(默认 0)
15            "offsetZ": 0.0        // Z 轴偏移(默认 0)
16        },
17        "sound": {
18            "id": "patpat:my_custom_sound_id",
19            "minPitch": 0.5,
20            "maxPitch": 1.5,
21            "volume": 0.8
22        }
23    },
24    "entities": [
25        // 指定实体(可以是类型字符串或 entity 对象)
26        "minecraft:zombie",
27        {
28            "id": "minecraft:sheep",
29            "name": "Jeb_",                       // 仅匹配名为 "Jeb_" 的羊
30            "from": {
31                "name": "LopyMine"                // 仅 LopyMine 抚摸时触发
32            }
33        }
34    ]
35}

B2. 配置字段详解
#

以下内容来自 PatPat Wiki: Creating Animation Config,标注 ✅ 为必需项。

主选项
#

字段类型默认值说明
versionString配置版本号(如 "1.0.0"),用于未来兼容处理
priorityInteger0优先级,范围建议 [-10000, 10000]
blacklistBooleanfalsetrue=黑名单模式 / false=白名单模式
entitiesArray实体匹配列表,设为 "all" 匹配所有实体

animation 对象
#

字段类型默认值说明
textureString纹理路径,如 "patpat:textures/xxx.png"。纹理必须在 textures/ 目录下
durationInteger动画持续时间(毫秒),不可为负
frameObject帧设置
sound ✅Object音效设置

frame 对象
#

字段类型默认值说明
totalFramesInteger纹理中的总帧数
scaleXDouble0.9X 轴缩放比例
scaleYDouble0.9Y 轴缩放比例
offsetXDouble0.0X 轴偏移
offsetYDouble0.0Y 轴偏移
offsetZDouble0.0Z 轴偏移

sound 对象
#

字段类型默认值说明
idString音效 ID,如 "patpat:my_sound"
minPitchDouble1.0最小音高
maxPitchDouble1.0最大音高
volumeDouble1.0音量

entity 对象(entities 数组中每个元素可以是字符串或对象)
#

字段类型说明
idString实体类型,如 "minecraft:pig"
nameString实体名称(不是类型名),如 "My Cute Dog"
uuidString实体 UUID
from.nameString触发者玩家名
from.uuidString触发者玩家 UUID

B3. 优先级系统
#

来源:PatPat Wiki — priority

当玩家抚摸实体时,PatPat 按以下顺序选择动画:

  1. 筛选匹配当前实体类型 / 实体名称 / 实体 UUID 的动画
  2. 如果多个动画匹配同一实体:
    • 不同资源包中 → 使用资源包列表靠上
    • 同一资源包中 → 使用 priority更高
    • priority 相同时 → 按文件路径字母序排列

B4. 自定义音效注册
#

来源:PatPat Wiki — Adding Animation Sound(s)

如果要使用新音效(而非 PatPat 内置的 patpat:patpat 音效事件),需要注册:

  1. .ogg 文件放入 assets/patpat/sounds/
  2. 创建/编辑 assets/patpat/sounds.json
1{
2    "my_custom_sound_id": {
3        "sounds": ["patpat:my_sound_file_name"]
4    }
5}
  1. 在动画配置中引用:
1"sound": {
2    "id": "patpat:my_custom_sound_id",
3    "minPitch": 0.8,
4    "maxPitch": 1.2,
5    "volume": 1.0
6}

⚠️ 如果 sounds.json 格式有误,整个文件会被忽略。使用 JSON 校验器检查。

B5. 完整示例
#

以下是一个为僵尸定制活塞动画的资源包结构:

 1MyPatPatAnimation/
 2├── pack.mcmeta
 3└── assets/
 4    └── patpat/
 5        ├── textures/
 6        │   └── animated_piston.png         # 活塞精灵图
 7        ├── sounds/
 8        │   └── piston_sound.ogg             # 自定义音效
 9        ├── sounds.json                       # 音效注册
10        └── my_animations/
11            └── animated_piston.json5         # 动画配置

对应的 pack.mcmeta

1{
2  "pack": {
3    "description": "PatPat × 自定义活塞动画",
4    "pack_format": 84,
5    "supported_formats": 84
6  }
7}

获取原版 Minecraft 素材
#

如果希望借用原版 Minecraft 纹理或音效(如末地烛、史莱姆声音),可从 Mojang 官方服务器下载。

从 Asset Index 获取
#

 1# 1. 获取版本元数据
 2VER="26.1"
 3VER_URL=$(curl -s "https://piston-meta.mojang.com/mc/game/version_manifest_v2.json" \
 4  | python3 -c "import sys,json; d=json.load(sys.stdin); \
 5    [print(v['url']) for v in d['versions'] if v['id']=='$VER']")
 6
 7# 2. 获取 asset index URL
 8ASSET_IDX=$(curl -s "$VER_URL" \
 9  | python3 -c "import sys,json; print(json.load(sys.stdin)['assetIndex']['url'])")
10
11# 3. 搜索目标文件
12curl -s "$ASSET_IDX" | python3 -c "
13import sys,json
14d=json.load(sys.stdin)
15for path, info in d['objects'].items():
16    if 'end_rod' in path or 'slime' in path:
17        print(f'{path} -> {info[\"hash\"]}')
18"

输出示例:

1minecraft/textures/block/end_rod.png -> <sha1_hash>
2minecraft/sounds/mob/slime/big1.ogg -> b5eca1979e69271b2065ac67ba2c37b5afac0f98

下载文件
#

1https://resources.download.minecraft.net/{hash前2位}/{完整hash}
1# 例
2curl -o big1.ogg \
3  "https://resources.download.minecraft.net/b5/b5eca1979e69271b2065ac67ba2c37b5afac0f98"

从客户端 JAR 提取(纹理)
#

部分纹理也可直接从客户端 JAR 解压:

1curl -o client.jar "<version.json 中 downloads.client.url>"
2unzip client.jar "assets/minecraft/textures/block/end_rod.png"

官方模板资源包
#

PatPat 官方提供了模板资源包,结构如下:

1Template Custom Animation/
2├── pack.mcmeta
3└── assets/
4    └── patpat/
5        ├── sounds.json
6        ├── sounds/
7        └── texture/

可以直接下载后修改。官方 Wiki 也有一个成品示例(活塞动画资源包)。


常见踩坑
#

症状原因解决
资源包不显示在列表中pack_format 版本号不对F3+V 确认当前版本值
显示但标记**“不兼容”**pack_format 太低(如 34 用于 26.1)更新为正确值(26.1 = 84)
显示**“已损坏”**ZIP 根结构错误 / JSON 语法错误pack.mcmeta 必须在 ZIP 根层级
纹理显示异常尺寸不匹配默认纹理必须 560×112;自定义动画纹理可任意尺寸
音效无声OGG 是立体声而非单声道Audacity → 导出 Mono
sounds.json 内所有音效全部失效JSON 格式错误(缺少逗号/引号)用 JSON 校验器检查语法
自定义动画不生效实体匹配规则不满足 / version 字段缺失检查 entities 配置和 version 字段
F3+T 重载后不变未启用资源包或优先级太低选项→资源包 → 移到列表顶部

调试快捷键
#

快捷键作用
F3 + V显示当前支持的 pack_format / data pack version
F3 + T重新加载所有资源包(无需重启游戏)

参考链接
#

资源链接
PatPat 官方 Wiki — 入门https://github.com/LopyMine/PatPat/wiki/Getting-Started-%E2%80%A2-About-Custom-Animations
PatPat Wiki — 创建动画纹理https://github.com/LopyMine/PatPat/wiki/Creating-Animation-Texture
PatPat Wiki — 创建动画配置https://github.com/LopyMine/PatPat/wiki/Creating-Animation-Config
PatPat Wiki — 添加音效https://github.com/LopyMine/PatPat/wiki/Adding-Animation-Sound(s)
PatPat Wiki — 模板资源包https://github.com/LopyMine/PatPat/wiki/Template-Resource-Pack
PatPat 官方配置示例https://github.com/LopyMine/PatPat/blob/master/src/main/resources/example/example_custom_animation_config.json5
PatPat 模组源码https://github.com/LopyMine/PatPat
Minecraft Wiki — Pack formathttps://minecraft.wiki/w/Pack_format
Minecraft Wiki — pack.mcmetahttps://minecraft.wiki/w/Pack.mcmeta
Minecraft Wiki — Resource Packhttps://minecraft.wiki/w/Resource_Pack
Minecraft Wiki — sounds.jsonhttps://minecraft.wiki/w/Sounds.json
Mojang 版本清单 APIhttps://piston-meta.mojang.com/mc/game/version_manifest_v2.json
Mojang 资源 CDNhttps://resources.download.minecraft.net/
Fabric 官方文档https://docs.fabricmc.net/

本文档结合 PatPat 官方 Wiki(2024-2025)与实际操作验证,在 Minecraft 26.1(Fabric)上测试通过。