MC Toolkit

指南 / 建筑与资源

无需替换原版即可添加自定义画和音乐唱片

画和音乐唱片现在都是数据包注册表,因此你可以新增而不是覆盖原版内容。以下是它们各自需要的两个文件,以及画必须遵循的尺寸比例规则,画作只需要两个文件,音乐唱片则需要三个文件,各自的注册表彼此相互独立运作,互不影响。

过去要获得自定义画,只能覆盖 paintings_kristoffer_zetterstrand.png,代价是失去一幅原版画。现在画和音乐唱片都是注册表 (registry),所以你是在新增,而不是替换。

画需要两个文件

一个定义画的数据包条目:

data/<namespace>/painting_variant/my_art.json
{
  "asset_id": "my_pack:my_art",
  "width": 2,
  "height": 2,
  "title": { "text": "My Art" },
  "author": { "text": "Me" }
}

以及一个提供图像的资源包:

assets/my_pack/textures/painting/my_art.png

width 和 height 的单位是方块,纹理必须符合这个比例。原版每方块绘制 16 像素,所以一幅 2×1 的画是 32×16——但 64×32 也完全没问题。比例不对就会被拉伸,没有自动适配。

原版尺寸从 1×1 到 4×4。更大的尺寸也能用,但需要相应大小的墙面。

让它能获得

只添加变体并不会让它出现在游戏里。有两条途径:

  • 放置标签——把它加入 #minecraft:placeable,这样普通的画物品就能随机变成它。
  • 直接指定——/give @p painting[entity_data={id:"minecraft:painting",variant:"my_pack:my_art"}]

大多数地图作者想要第二种:一幅特定的画,而不是随机的。

音乐唱片需要三个

data/<namespace>/jukebox_song/my_song.json
{
  "sound_event": { "sound_id": "my_pack:music/my_song" },
  "description": { "text": "My Artist - My Song" },
  "length_in_seconds": 154,
  "comparator_output": 12
}

再加上把该声音 id 映射到文件的 sounds.json,以及 .ogg 本身:

assets/my_pack/sounds.json
assets/my_pack/sounds/music/my_song.ogg

有三个细节很重要:

  • length_in_seconds 必须正确。 它决定唱片机何时停止——粒子、红石输出,以及音频都会在该点被切断。太长会导致结尾静音;太短会把曲目截断。
  • comparator_output 取值 0–15,是比较器读取的值。原版有 22 张唱片却只有 15 个值,所以已经有七对共用同一个值;请选一个你的红石电路无需区分的唱片都没用到的值。
  • 以流式播放 ogg。 对于音乐长度的音频,在 sounds.json 中设置 "stream": true。

然后给它:

/give @p music_disc_13[jukebox_playable="my_pack:my_song"]

任何唱片物品都可以作为载体——决定播放内容的是组件。

为什么这比覆盖更好

替换原版资源的资源包会与所有做同样事情的资源包冲突,而且当 Mojang 重命名文件时就会失效。注册表新增的内容带有命名空间,所以两个添加画的资源包可以共存。这也是唯一一种在版本更新后无需修改就能继续使用的方法。

用 自定义内容包生成器 把画变体、唱片机歌曲、图腾和聊天表情打包进一个现成的资源包 zip。

自定义内容包生成器 →

更多指南

查看全部 →