Minecraft 基岩版addons开发 环境与基础操作
上一次制作Minecraft基岩版的行为包已经是差不多两年前了,时间过得真快。两年前我做了一个家具的生物实体和爬行僵尸的行为包,当时也加到了自己的服务器中,但是当时没有做记录的习惯,所以两年后制作行为包的方法我基本已经忘得干干净净了,最近我的服务器挺热闹的,并且行为包的功能也变得完善了许多,所以我想着再研究研究行为包的制作,并且这次将过程记录下来免得一段时间后又忘记了,也可以给想制作行为包的后来者提供一些参考。
环境准备
Minecraft的行为包主要还是用JSON来组织的,我使用VSCODE来编辑相关的文件,VSCODE的remote-ssh模式能够很好的编辑服务器上的行为包文件,不过考虑到行为包经常需要变更贴图和模型,其实还是直接在本地的文件中进行开发更为方便。
另外微软的文档还推荐了两个VSCODE的插件: Bedrock Definitions和Blockception’s Minecraft Bedrock Development 这两个插件提供了行为包编写中的高亮、提示和补全以及模板生成等功能。
新建addons
addons一般分为行为包和材质包两个部分,材质包包括贴图、模型、音乐等内容,而行为包中记录了添加的物品、生物的具体逻辑,比如属性、行为等信息。在服务器中,行为包只需要服务端加载,玩家只下载材质包即可体验到完整的内容。
材质包和行为包的结构较为相似。
新建材质包
大部分教程都来自于 fandom上的wiki,下面记录的是我自己跟着这个wiki的操作过程,所以建议前往wiki查看更详细的步骤。
现在的材质包可以使用光线追踪的特性了,但因为我的电脑不支持光线追踪所以也没办法实践了,感兴趣的可以自己查阅资料。
为了使我们的修改能够立即反馈到游戏中,我们可以直接在基岩版的资源包文件夹 (资源管理器中输入路径 %localappdata%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\development_resource_packs )中新建一个文件夹,之后在游戏中加载来进行材质包的制作。
在该文件夹下新建一个文件夹,以 fineres 为例。在该文件夹中创建用于描述的 manifest.json,添加如下内容:
|
|
UUID必须唯一,另外header和modules中的UUID不是一样的值。可以在 https://www.uuidgenerator.net/ 生成新的UUID,修改好名字和描述之后保存,此时打开游戏便可以看到我们的材质包了。
我们可以在文件夹下放一张128x128像素的图片(低一些的分辨率,比如16x16也是可以的)并命名为 pack_icon.png 来修改显示的图标。
新建行为包
新建行为包的步骤基本和材质包一样,只是目录换成了 localappdata%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\development_behavior_packs。另外编辑JSON的时候格式如下: 注意type是data
|
|
注意,如果这个行为包需要使用材质包,那么需要在dependencies中指明使用的材质包的UUID(header中的部分)
材质包基础修改
我们先尝试在原版贴图的基础上修改材质,原版材质包下载,这个材质包里面包含了原版的所有贴图、音效、模型、动画等内容,如果我们没有实力自己制作贴图,可以在它的基础上修改来制作自己的材质包。
修改实体贴图
原版材质包的结构如下,其实我们自己的材质包要做的就是使用原版材质包的结构,添加我们想要修改(覆盖)的部分。
比如我们要修改僵尸的贴图,在原版的材质包中僵尸贴图位于 textures\entity\zombie 中,于是我们也要在自己的材质包文件夹 fineres 中新建 textures\entity\zombie 文件夹。
原版贴图文件夹中有如图中的三个文件,我们可以注意到溺尸的贴图格式特殊一些,是tga格式的,tga也是一种贴图格式。PS中查看如下
可以看到TGA比一般的图片格式多了一个ALPHA通道(0%表示透明,100%表示不透明),黑色部分是不渲染的部分。在游戏中的具体表现就是黑色这部分是透明的(查看树叶、甘蔗的贴图,更加明显,部分物品的染色是由渲染controller控制的,贴图没有颜色只有纹理。),灰色部分则是半透明的。我们可以增大黑色部分看看。实际上是增大了溺尸的发光部分,不过不那么明显。
用photoshop打开drowned.tga即可修改。
我们再修改普通僵尸的贴图看看,打开zombie.png,做出一点修改后保存到我们的材质包文件夹对应的zombie文件夹中,然后在游戏里召唤一只僵尸即可看见效果。
修改方块贴图
接着我们可以试试修改方块的贴图,方块的贴图也很简单,位于 textures/blocks 文件夹中,我们只需要添加和我们想要修改的方块同名的贴图即可进行修改,注意部分方块几个面使用了不同的贴图(如熔炉),也有方块的贴图包含了几帧,以动画的形式渲染(如火焰)。
我们试着修改一下营火的火焰的颜色。 用Photoshop中的 图像->调整->替换颜色
于是得到了上图这样的东西(虽然本来就有蓝色火焰的灵魂营火了)
行为包基础修改
我们暂时不添加新的生物,而只是修改现有的生物的行为,行为包也是使用JSON来写的,所以和编程语言不同,能做的事情比较有限,主要做的还是将Minecraft提供的功能组件组合到一个实体上,并修改属性值来实现我们想要的效果。
在之前的操作中我们已经新建了一个行为包,注意如果行为包添加了新的生物、物品,需要描述对材质包的依赖。
首先下载官方的默认行为包获取生物的默认行为。
可以看见官方行为包的结构如图,实体的行为定义在entities里面。还有战利品、配方、脚本、生成规则、交易等文件夹可以定制行为。我们先尝试制作一个可以骑的幻翼。
之前提到了,行为包的功能通过组合功能组件实现,那么我们先找到可以骑的生物,并找到对应的功能组件,以马为例子: entities/horse.json 定义了马的行为。我们可以看见在 minecraft:horse_tamed 的组件内有一个rideable组件如下:
|
|
可以看见这个组件中定义了可以骑乘的属性,包括座位数量、交互的文本,座位所在的位置,能够骑乘的生物等,我们将这个组件加到幻翼phantom上,直接将原版行为包中的 phantom.json 复制到我们的自己的行为包 entities 文件夹中,并添加组件到Component中即可。
下面这些内容来源于中文wiki的行为包教程 建议多看看官方默认行为包的内容就明白怎么用了。
组件组(Component groups)
用于定义一组行为,用于简单地去除或增加多个行为,对于改变生物状态十分有用(例如幼年猪与成年猪行为的转换)。
在pig.json中含有pig_baby、pig_adult两个复合标签组。可以看到,只有当某个组件组当前被加入这个实体中时,这个组件组才会运行。因此,当这只猪是幼年猪时,pig_baby这个组件组将会被加入并运行,而pig_adult则不会。
组件(Components)
用于定义该种生物的共有行为。
可以看到“minecraft:identifier”和“minecraft:type_family”存在于这一部分,因为我们希望每一种猪都有这些行为。
事件(Events)
事件用于加入或移除复合标签组。事件被我们加入的组件或者Minecraft本身的代码所触发。
事件可以使用randomize函数在不同结果之间进行选择(请参阅pig.json中的“minecraft:entity_spawned”)。 请注意,randomize的权重可以增加到100以上。这是因为它们不是百分比! 如果你把成年猪的比重设定为23,然后将小猪的比重设定为100,那么你将有23/123的机会获得成年猪和100/123的机会获得一头小猪。
“note:”的组件
minecraft:identifier
这个语句对每一个实体来说都是必要的。它告诉游戏你的JSON对哪些实体有效。
请注意:标识符(identifier)必须被正确命名!如果乱输你可能会遇到一些不可描述的事情或是实体大罢工。不知道/不确定如何命名?请参考原版行为包中关于那个实体的JSON文件。(在/Vanilla_Behavior_Pack/entities/)
minecraft:type_family
它为实体设置族类型。族类型利用多种多样的要素,选择特定的实体。具体例子请参考“minecraft:rideable”和“minecraft:breedable”。
minecraft:entity_spawned
当你规定的的实体生成时,这个语句会被触发。 在pig.json中有一个随机化函数,可以随机地生成大猪或小猪。你可以阅读它来加深理解。
可以实现如图效果,我们发现现在的座位不太好,可以修改position属性,我把第二个坐标(y)改成0.3之后就好了很多。
此时我们还是不能控制方向,但是骑马的时候是可以控制方向的,于是我们再找找需要什么组件。发现
|
|
大概是符合我们要求的,”接收地面上的控制“组件,将其加入幻翼的组件中。之后我们便可以像骑马一样控制幻翼了,但是由于这个组件本来只在地面上生效,所以无法控制纵坐标的变化,也就是一不小心就会摔死…….
另外注意,多个行为包如果修改了同一个实体,貌似是只会取一个的,客户端可以修改优先级,但是在服务器中就是world_behavior_pack里面的顺序,越靠前越优先。
添加新的方块
添加新的物品
添加新的生物
导出包
参考
Tutorials/Creating behavior packs
下面两个是微软的官方文档,今年他们完善了相关的文档,写的非常的详细。