Skip to main content
Version: 1.21.4

纹理(Textures)

在 Minecraft 中,所有的纹理都是位于命名空间(namespace)的 textures 文件夹下的 PNG 文件。不支持 JPG、GIF 及其他图片格式。资源位置(resource locations) 中引用纹理的路径通常是相对于 textures 文件夹的。例如,资源位置 examplemod:block/example_block 实际指向的纹理文件路径为 assets/examplemod/textures/block/example_block.png

纹理的尺寸通常应为 2 的幂,例如 16x16 或 32x32。与旧版本不同,现代 Minecraft 原生支持大于 16x16 的方块和物品纹理。如果你需要渲染的纹理(例如 GUI 背景)尺寸不是 2 的幂,请创建一个尺寸为下一个 2 的幂(通常是 256x256)的空白文件,并将你的纹理放在该文件的左上角,剩余部分保持空白。实际绘制纹理的尺寸可以在使用该纹理的代码中设置。

纹理元数据(Texture Metadata)

纹理元数据可以通过一个与纹理同名、后缀为 .mcmeta 的文件进行指定。例如,位于 textures/block/example.png 的动画纹理,需要一个对应的 textures/block/example.png.mcmeta 文件。.mcmeta 文件的格式如下(所有字段均为可选项):

{
// 如果需要模糊处理该纹理,则设置为 true。默认值为 false。
// 目前仅由编解码器指定,在文件和代码中未被实际使用。
"blur": true,
// 如果需要钳制该纹理,则设置为 true。默认值为 false。
// 目前仅由编解码器指定,在文件和代码中未被实际使用。
"clamp": true,
"gui": {
// 指定纹理在需要时的缩放方式。可为以下三种之一:
"scaling": {
"type": "stretch" // 默认值
},
"scaling": {
"type": "tile",
"width": 16,
"height": 16
},
"scaling": {
// 类似于 "tile",但允许指定边框偏移量。
"type": "nine_slice",
"width": 16,
"height": 16,
// 也可以只写一个 int,表示四个边的相同值。
"border": {
"left": 0,
"top": 0,
"right": 0,
"bottom": 0
},
// 若为 true,纹理中心部分将采用 stretch 类型的方式渲染,而不是 nine slice 平铺。
"stretch_inner": true
}
},
// 详见下文。
"animation": {}
}

动画纹理(Animated Textures)

Minecraft 原生支持方块和物品的动画纹理。动画纹理由一个纹理文件组成,不同的动画帧依次垂直排列(例如,一个有 8 帧的 16x16 动画纹理,应为 16x128 的 PNG 文件)。 要让纹理真正实现动画效果,而不仅仅是显示为扭曲的贴图,纹理元数据中必须包含一个 animation 对象。该子对象可以为空,但也可以包含以下可选项:

{
"animation": {
// 自定义帧播放顺序。如果省略,则帧会从上到下依次播放。
"frames": [1, 0],
// 每一帧在切换到下一个动画阶段前停留的时间,单位为帧。默认值为 1。
"frametime": 5,
// 是否在动画阶段之间进行插值。默认值为 false。
"interpolate": true,
// 单个动画阶段的宽度和高度。如果省略,则都使用纹理的宽度。
"width": 12,
"height": 12
}
}