材质包开发文档
如果您尚未学习如何开发基岩版材质包, 请从起步开始看起.
为了让您的材质包能够最佳化的适配所有玩家, 请您仔细阅读 优化 部分.
保证您的材质包能够正常提交, 请您仔细阅读 规范 部分.
起步
在本教程中,你将学习:
- 如何创建一个资源包。
- 如何创建清单文件 (manifest.json)。
- 如何将自定义材质加载到《我的世界》中。
创建资源包
为了让《我的世界》能够找到并使用你的资源文件,你必须以特定的方式设置文件夹和文件。 本教程将指导你创建这种文件夹和文件结构。
创建一个文件夹
我们将先创建一个名为 My_RESOURCE_Pack 的文件夹。 从技术上讲,你可以将这个文件夹命名为任意名称,但接下来要创建的其他文件夹必须严格按照本教程中指定的名称命名,这样《我的世界》才能正确找到所需的信息。
- 在桌面上右键单击, 选择新建 > 文件夹
- 按照以上步骤新建一个文件夹,并将其命名为 My_RESOURCE_Pack。
- 双击 My_RESOURCE_Pack 文件夹将其打开。
创建清单文件
要将资源包加载到《我的世界》中,我们需要一个 清单文件(manifest file)。
清单文件是一个 JSON 文件,包含以下信息:
- Description(描述):资源包在游戏中的说明。
- Name(名称):资源包在游戏中的显示名称。
- UUID(全局唯一标识符):用于唯一标识资源包。
- Version(版本):资源包的版本号。
- Minimum Engine Version(最低引擎版本):该资源包正常运行所需的最低《我的世界》版本。
想要了解更多关于 manifest.json 文件的工作原理,请参阅 Addons Reference 中的 manifest.json 文档。
《我的世界》会解析清单文件中的信息,并在游戏的 附加内容(Add-On) 部分显示出来。 在文件内部,这些信息分为两个部分:
Header(头部):包含整个资源包的总体信息。
Modules(模块):包含资源包内各个功能模块的具体信息。
要创建 manifest.json 文件,请执行以下步骤:
- 在资源管理器窗口中 右键单击,选择 新建 > 文本文档。
- 将文件命名为 manifest.json。需要将文件扩展名从 .txt 修改为 .json。如果资源管理器未显示文件扩展名,可以在“查看”选项卡中启用 文件扩展名(File Name Extensions)。
- 双击 manifest.json 文件,用文本编辑器将其打开。
- 将以下代码复制并粘贴到文件中。
{
"format_version": 2,
"header": {
"description": "My dirt resource pack Add-On!",
"name": "My Resource Pack",
"uuid": "<FIRST GENERATED UUID>",
"version": [1, 0, 0],
"min_engine_version": [1, 16, 0]
},
"modules": [
{
"description": "My First Add-On!",
"type": "resources",
"uuid": "<SECOND GENERATED UUID>",
"version": [1, 0, 0]
}
]
}
设置全局唯一标识符
全局唯一标识符(UUID) 是用于身份识别的唯一数字。
在《我的世界》中,UUID 用于定义特定的资源包,并防止重复的软件引发问题。
对于 Header(头部) 和 Modules(模块),每个 "uuid"
字段中都需要输入 不同的 UUID。
你可以通过在线 UUID 生成器获取 UUID,例如 https://www.uuidgenerator.net/
当您生成了UUID后, 将您生成的UUID按顺序分别替换掉 <FIRST GENERATED UUID>
以及 <SECOND GENERATED UUID>
.
创建纹理
清单文件完成后,你现在可以开始向Minecraft添加自定义内容了。让我们从为原版泥土方块应用新纹理开始。过程的第一部分涉及创建一个文件夹结构来存放自定义纹理。
- 打开My_RESOURCE_Pack文件夹并创建一个名为textures的文件夹。
- 双击textures文件夹以打开它。
- 打开textures文件夹并创建一个名为blocks的文件夹。
- 双击blocks文件夹以打开它。
现在文件夹结构已经创建完成,我们可以开始添加一些自定义材质。
这个绿色方块是一个示例,展示了按照以下步骤创建的文件类型。
你可以下载这个绿色方块并将其保存到 blocks 文件夹中,或者按照以下步骤自己创建材质:
- 打开图像编辑器,例如 MS Paint。
- 在 文件(File) 菜单中选择 属性(Properties)。
- 将 宽度(Width) 和 高度(Height) 都设置为 16 像素。
- 点击 确定(OK)。
现在你可以在编辑器中设计图案或任何艺术作品。要创建绿色方块,只需使用填充颜色即可。
- 编辑完成材质后,执行以下操作:在 文件(File) 菜单中选择 另存为(Save As)。
- 选择 PNG 图片 选项。
- 在“另存为”对话框中,导航到 blocks 文件夹。
- 将文件保存为 dirt.png。
打包
当您完成以上步骤后,您需要完成打包步骤使得资源包可移植。
为了打包您的资源包,您需要一个压缩软件。
例如 7-Zip,可以从 这里 获取。
- 打开My_RESOURCE_Pack文件夹
- 全选当前目录的所有文件,右键单击选择 7-Zip > 添加到 "My_RESOURCE_Pack.zip"
- 等待进度条完成,您将看到 My_RESOURCE_Pack.zip 出现在文件夹中。这将会是您的资源包成品。
测试
现在资源包已同时包含清单文件和纹理文件,你就可以启动Minecraft来测试新的资源附加组件了。
资源包堆叠(Pack Stacking)是指在原版内容(Vanilla content)之上加载附加内容的方式。 当两个资源包中存在同名的对象时,后应用的资源包会覆盖之前的内容。
在我们的示例中,原始的 dirt 材质会被自定义材质覆盖。
如果在 My_RESOURCE_Pack 之后加载了另一个使用 dirt.png 文件的资源包,那么《我的世界》将使用那个新资源包中的文件,而不是我们的自定义材质。
优化
由于基岩版大多数受限于其设备的性能,对较为复杂和体积巨大的材质包具有兼容性问题。 所以我们推荐您尽量进行优化。
无效堆叠
正如教程中所说,资源包堆叠是指在原版内容之上加载附加内容的方式。
如果您开发材质包时,直接复制原版的纹理和其他资源文件到您的材质包目录,这是不可以接受的行为。
这将导致游戏重复加载一份相同的资源文件,由于基岩版的内存管理问题,游戏出现内存溢出时将可能出现问题 (闪退、黑紫方块、贴图错乱)。
我们推荐您仅将修改过的纹理文件加入您的材质包中,您的材质包中应只包含您修改过的文件!
无效音效
在我们审核材质包的多次实践中,我们发现材质包中包含一些从Java版材质包直接转换而来的音效文件。
我们希望您在提取音效时,仔细检查是否有原版完全相同的音效,这些音效文件是完全没有必要存在于材质包中的。
纹理优化
压缩
基岩版的纹理支持多种文件格式(PNG JPG TGA),其中JPG具有最佳的压缩率。
经过我们的多次实践,材质包中包含的天空纹理 (textures\environment\overworld_cubemap),实际上可以转换为 jpg 格式以节省空间和内存占用。
还有一些不具有透明度的纹理,也可以执行JPG压缩,但是请知悉,使用PIL等压缩将会产生显著损失,所以推荐使用 ffmpeg 等工具进行处理。
分辨率
对于移动端设备来说,分辨率过于高是没有意义的,反而会占用更多内存。
根据我们的数据,大多数材质包的部分纹理,甚至于达到4096px,其效果根本不匹配这样的分辨率,我们推荐缩小一定倍数的分辨率。
另外,我们将给出推荐的最大分辨率表。
类型/文件名 | 最大分辨率 | 理由 |
---|---|---|
pack_icon | 64px | 作为材质包的图标,过大的icon反而会出现因为显示框大小有限出现看不清的情况 |
overworld_cubemap | 2048px | 作为天空贴图,过高的分辨率并不会提高多少清晰度 |
paramona | 2048px | 作为玩家切换世界时的背景图,玩家关心分辨率的可能性很小 |
去除EXIF信息
可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机之照片设定的文件格式,可以记录数码照片的属性信息和拍摄数据。
EXIF信息对于直接分发给玩家的材质包没有意义,玩家无需关心材质包内部的图片信息,可以使用工具去除这些无效信息。
对于小规模的图片,处理后甚至于能减少 50% 的体积。
我们已对上述优化方法开发了工具,可以快速优化材质包内容,将在整理后公开发布。
但是我们仍然希望您仔细检查无效堆叠,工具只能找出大多数情况。
规范
以下为服务器内材质包的提交需求,您必须符合以下规定才可提交给服务器。
打包
材质包必须符合基岩版材质包的基础设定(合法的 manifest.json),打包为 zip 格式或 mcpack 格式。
如果您的材质包格式不匹配(例如将目录打包而非是目录的内容),我们将不再代为您修改,请您自行修改后上传。
当您确定要上传时,请您将材质包重命名为 材质包名称_版本号_RP.zip
数据格式
在我们长期的材质包实践中,有部分作者的材质包根本无法在基岩版中以材质包的形式加载。
这是因为其材质包中包含的 JSON 文件格式不正确导致的. 请您在编辑完成 JSON 文件后,复制其内容,在 https://jsonlint.com/ 中检查格式是否正确。
不正确的格式,在一个完整的材质包中,基岩版实际上会拒绝加载。
冗余
我们不再接受材质包中包含原版未修改资源(包括但不限于纹理、音效),这代表着您的材质包是无效堆叠的,将会浪费玩家的内存资源。
对于低配玩家,这将可能导致其内存溢出,甚至闪退。
合规性
您理解并同意,您将材质包的使用权授权给服务器及其玩家,此授权是不可撤销的。
- 服务器不会将材质包用于盈利,所以也不会提供利润。
- 服务器可能根据使用情况,修改其获取途径、调整所需条件或是从服务器中移除。
- 您必须保证其原创或是授权合理性,应承担因为此内容造成的侵权的全部责任。
- 材质包内容必须符合公序良俗,传播违禁内容的将直接提报给公安机关处理。
投稿
我们目前接受投稿方式为 bjdmc@qq.com
,请您以邮件附件的形式提交,标题为 材质包投稿-材质包名称
。并在正文中注明是否原创(非原创应提供授权证明),材质包描述,UUID等信息。
您有任何相关问题,欢迎加群 915067559
讨论。