众所周知,Mek的小机器人(物品和实体的ID为Robit)很强(指小小的身体里塞进去一个电炉和一个铁砧,还能在熔岩上浮着),然而作者也不知道是出于什么目的,只内置了一些履带五颜六色还是LGBT骄傲旗的皮肤。本教程旨在通过资源包和数据包,将自己制作的机器人模型、皮肤加入到游戏中。
本教程主要参考Mek的Wiki。本教程仅保证对Minecraft 1.20.1 Forge,Mek V10的单人世界生效。其余加载器和版本以及服务器,请自行尝试是否能够生效。
请确保您准备好了以下软件:Blockbench(下文操作以4.12、内置中文为准);任意文本编辑器(记事本也行);任意能查看、解压.jar文件的压缩软件(如WinRAR),并对Minecraft资源包、数据包的文件格式和以上软件的用法有初步了解。
修改贴图
如果您无意更改机器人的形状,只是想改个颜色或者表情,那么只需要加入一张贴图(材质)即可。
资源包部分
机器人属于实体,所以机器人的材质也属于实体材质。首先用压缩软件打开Mek的jar文件,沿路径:根目录\assets\mekanism\textures\entity\robit,找到默认材质robit.png,解压。以此为基础绘制您的材质。如果不能确定贴图与模型的对应关系,可以参考下文修改模型的方式进行可视化的绘制,然后只向资源包加入贴图即可。
建立资源包目录(详见Minecraft Wiki),添加路径:根目录\assets\mekanism\textures\entity\robit,将您绘制的贴图适当命名(保持后缀名为png),放在这里面。如果希望是动态贴图,请将每一帧单独存入一个文件,并适当命名。每一帧将在游戏内持续3gt=0.15秒,且仅当机器人正在移动时才会循环播放,静止时材质停止于其中一帧。
可以在资源包里为这个皮肤添加本地化,如果不添加,游戏内将不能显示皮肤的名称,但不影响使用。建立目录:根目录\assets\mekanism\lang,新建json语言文件(最好至少包含默认的美国英语en_us和简体中文zh_cn),命名参考原版语言文件的命名。添加如下格式的内容(每行最后#后面的内容为解释,请不要写到文件里):
{ # 首尾一定要有一层大括号 "robit_skin.<命名空间>.<皮肤id>": "<名字>", # 对于每个皮肤,<命名空间>和<皮肤id>分别替换成你的命名空间和皮肤ID "robit_skin.my_mek_pack.green": "环保绿色", # 这一行是例子 ... # 最后一行不加逗号。当然,这个省略号不是json的一部分,有多少皮肤写多少行即可}以上文件中的第3行与my_mek_pack空间下的green皮肤对应,在游戏中将显示为“皮肤:环保绿色”。命名空间与ID请与下文的数据包严格对应。
数据包部分
每个皮肤都需要用数据包来注册到游戏中。注意,该内容无法通过/reload指令热重载,请重新进入世界来加载数据包。
打开您的数据包文件夹(位于<.minecraft或版本文件夹>\saves\<存档文件名>\datapacks,注意您需要为每个世界分别应用数据包),建立数据包目录(详见Minecraft Wiki)。添加目录:<数据包根目录>\data\<命名空间>\mekanism\robit_skin,在其中对每个皮肤建立<皮肤ID>.json文件,输入如下格式的内容:
{ # 别忘了大括号 "type": "mekanism:basic", # 对于默认可用的皮肤,这一行不用改 "textures": [ # 材质列表,也就是帧列表。注意是方括号 "mekanism:<文件名1>", # 有多少帧就写多少条,文件名不含后缀名 "mekanism:green2", # 这是样例 ... ] # 方括号} # 大括号模组内置了一个悦灵(Allay)皮肤,在取得进度“找到一个好朋友”(让悦灵向你投掷物品)后可用。如果需要设定这样取得进度方可使用的皮肤,请将type一行改成如下两行:
"type": "mekanism:advancement_based", # 这表示基于进度的皮肤"advancement": "minecraft:<进度ID>" # 进度ID可在Wiki查阅加载材质包和数据包后,进入世界。右键机器人修改外观(如有设定,请先取得进度),您应该能看见您的皮肤显示在列表中。
修改模型
您可能觉得原来的模型还是太局限了,希望机器人的形状能有更大的变化。您可以用资源包加入机器人模型,得益于Blockbench这样的可视化软件,json模型制作简单了很多。
资源包部分
从模组文件中提取模型文件:根目录\assets\mekanism\models\item\robit.json(是的,它是一个物品模型),在Blockbench中打开该文件(可能需要更改材质为上一节得到的贴图),以此为基础制作您的模型。但是在导出前后,请按照如下项目修改模型。
0、不需要更改显示调整,也不需要添加分组,按形状堆砌长方体即可。不过贴图映射还是要留意一下的。
1、点击文件-项目...,将Format Version(格式版本)改成“1.9 - 1.21.5”。
2、导出-导出方块/物品模型,将材质按照上一节的目录放置,而模型放置在根目录\assets\mekanism\models\item下。
3、现在打开模型json文件,检查和修改如下内容。
{ # 开头 "format_version": "1.9.0", # 如果版本不正确,请在软件内重新导出 "credit": "Model by CyanideX", # 因为是用模组模型改的,所以署名为原作者的名字,您可以加入您的名字 "parent": "mekanism:item/robit", # 加入或者改成这一行,以让模型显示正确 # 如果存在,请删除下面的内容 "textures": ..., # 这里面是模型内置的贴图信息,因为实际贴图由游戏确定,所以不需要 # 删除内容到此为止,不要把别的信息也删掉了 "elements": ..., # 这是长方体信息,不需要改 "display": ..., # 这是显示角度信息,不需要改 "group": ..., # 如果你建立了分组,那么这就是分组信息。实际上没必要分组,如果已经分了也不用改 "loader": "mekanism:robit" # 加入或者改成这一行,以让模型正确加载} # 结尾其余部分大体与上一节相同。
数据包部分
大体与上一节相同。为应用自定义的模型,在相应皮肤的json文件内额外添加如下一项:
"customModel":"mekanism:item/<模型文件名>", # 如果您的游戏版本较新,键名可能要改成custom_model装载,进入游戏检查。
效果展示
包含模型的项目应具有如下结构:
对于资源包:pack.mcmetapack.pngassets└mekanism ├lang │└<语言标识>.json ├models │└item │ └<模型名>.json └textures └entity └robit └<材质名>.png对于数据包:pack.mcmetapack.pngdata└<命名空间> └mekanism └robit_skin └<皮肤ID>.json下面的动图展示了我做的一个皮肤效果(基于robit.json修改,腿部仿照mekasuit.obj):
常见问题
Q:游戏对资源包/数据包没有反应,或者皮肤显示为空白。
A:再次参照上文和Minecraft Wiki,检查所有文件是否在正确的位置。如果文件的位置对了,游戏至少应该能有所反应。尝试重新进入世界(而非用/reload重载数据包,因为这个不能重载),并用F3+T重载资源包,以让变化生效。
Q:修改后,问题依然存在。加入的内容就是没法生效。
A:尝试从头重新操作一遍,删除前面用到的文件(不包括软件、游戏和模组),并尽量分开每一步用到的文件,而不是全部放在一个目录下。这样可能解决未知来源的问题。
Q:能否用这种方法引入模型动作,而不是仅仅让机器人平移?动图上的“腿”是如何实现的?
A:由于该模型本质上是个物品模型,因此模型意义上的“动画”无法在此生效。我实现走路动画的方式是,将腿部模型前后复制一份,并将同一时刻不显示的部分映射到贴图的空白区域。您可以参考下图实现。
Q:如何使用Blockbench/制作模型/使用压缩软件/构建/加载资源包/数据包/启动游戏?
A:这种问题应该查阅相应软件的文档、Minecraft Wiki或者其他教程,至少不能在这里问。