返回

Minecraft Addons记录 1

记录了制作环境的准备与创建行为包与材质包以及对游戏的材质与基本行为作出修改。

Minecraft 基岩版addons开发 环境与基础操作

上一次制作Minecraft基岩版的行为包已经是差不多两年前了,时间过得真快。两年前我做了一个家具的生物实体和爬行僵尸的行为包,当时也加到了自己的服务器中,但是当时没有做记录的习惯,所以两年后制作行为包的方法我基本已经忘得干干净净了,最近我的服务器挺热闹的,并且行为包的功能也变得完善了许多,所以我想着再研究研究行为包的制作,并且这次将过程记录下来免得一段时间后又忘记了,也可以给想制作行为包的后来者提供一些参考。

环境准备

Minecraft的行为包主要还是用JSON来组织的,我使用VSCODE来编辑相关的文件,VSCODE的remote-ssh模式能够很好的编辑服务器上的行为包文件,不过考虑到行为包经常需要变更贴图和模型,其实还是直接在本地的文件中进行开发更为方便。

另外微软的文档还推荐了两个VSCODE的插件: Bedrock DefinitionsBlockception’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,添加如下内容:

{
  "format_version": 2,
  "header": {
    "description": "Fine Resource Pack",
    "name": "Fine Resource",
    "uuid": "d9263af8-224c-4c77-ae1c-e5e1c75bc014",
    "version": [1, 0, 0],
    "min_engine_version": [1, 16, 0]
  },
  "modules": [
    {
      "description": "Pack Description",
      "type": "resources",
      "uuid": "57b308db-e7e1-4e29-a3b0-320d982b614e",
      "version": [1, 0, 0]
    }
  ]
}

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

{
    "format_version": 2,
    "header": {
        "description": "Fine Behaviour Pack",
        "name": "Fine Behavior Pack",
        "uuid": "ee649bcf-256c-4013-9068-6a802b89d756",
        "version": [ 0, 0, 1 ],
        "min_engine_version": [ 1, 16, 0 ]
    },
    "modules": [
        {
            "description": "Example vanilla behavior pack",
            "type": "data",
            "uuid": "fa6e90c8-c925-460f-8155-c8a60b753caa",
            "version": [1, 0, 0]
        }
    ],
    "dependencies": [
        {
            "uuid": "d9263af8-224c-4c77-ae1c-e5e1c75bc014",
            "version": [1, 0, 0]
        }
    ]
}

注意,如果这个行为包需要使用材质包,那么需要在dependencies中指明使用的材质包的UUID(header中的部分)

材质包基础修改

我们先尝试在原版贴图的基础上修改材质,原版材质包下载,这个材质包里面包含了原版的所有贴图、音效、模型、动画等内容,如果我们没有实力自己制作贴图,可以在它的基础上修改来制作自己的材质包。

修改实体贴图

原版材质包的结构如下,其实我们自己的材质包要做的就是使用原版材质包的结构,添加我们想要修改(覆盖)的部分。

比如我们要修改僵尸的贴图,在原版的材质包中僵尸贴图位于 textures\entity\zombie 中,于是我们也要在自己的材质包文件夹 fineres 中新建 textures\entity\zombie 文件夹。

原版贴图文件夹中有如图中的三个文件,我们可以注意到溺尸的贴图格式特殊一些,是tga格式的,tga也是一种贴图格式。PS中查看如下

tga
tga

alpha
alpha

可以看到TGA比一般的图片格式多了一个ALPHA通道(0%表示透明,100%表示不透明),黑色部分是不渲染的部分。在游戏中的具体表现就是黑色这部分是透明的(查看树叶、甘蔗的贴图,更加明显,部分物品的染色是由渲染controller控制的,贴图没有颜色只有纹理。),灰色部分则是半透明的。我们可以增大黑色部分看看。实际上是增大了溺尸的发光部分,不过不那么明显。

image-20210708005413532
image-20210708005413532

用photoshop打开drowned.tga即可修改。

我们再修改普通僵尸的贴图看看,打开zombie.png,做出一点修改后保存到我们的材质包文件夹对应的zombie文件夹中,然后在游戏里召唤一只僵尸即可看见效果。

修改方块贴图

接着我们可以试试修改方块的贴图,方块的贴图也很简单,位于 textures/blocks 文件夹中,我们只需要添加和我们想要修改的方块同名的贴图即可进行修改,注意部分方块几个面使用了不同的贴图(如熔炉),也有方块的贴图包含了几帧,以动画的形式渲染(如火焰)。

我们试着修改一下营火的火焰的颜色。 用Photoshop中的 图像->调整->替换颜色

于是得到了上图这样的东西(虽然本来就有蓝色火焰的灵魂营火了)

行为包基础修改

我们暂时不添加新的生物,而只是修改现有的生物的行为,行为包也是使用JSON来写的,所以和编程语言不同,能做的事情比较有限,主要做的还是将Minecraft提供的功能组件组合到一个实体上,并修改属性值来实现我们想要的效果。

在之前的操作中我们已经新建了一个行为包,注意如果行为包添加了新的生物、物品,需要描述对材质包的依赖。

首先下载官方的默认行为包获取生物的默认行为。

可以看见官方行为包的结构如图,实体的行为定义在entities里面。还有战利品、配方、脚本、生成规则、交易等文件夹可以定制行为。我们先尝试制作一个可以骑的幻翼。

之前提到了,行为包的功能通过组合功能组件实现,那么我们先找到可以骑的生物,并找到对应的功能组件,以马为例子: entities/horse.json 定义了马的行为。我们可以看见在 minecraft:horse_tamed 的组件内有一个rideable组件如下:

        "minecraft:rideable": {
          "seat_count": 1,
          "crouching_skip_interact": true,
          "family_types": [
            "player"
          ],
          "interact_text": "action.interact.ride.horse",
          "seats": {
            "position": [ 0.0, 1.1, -0.2 ]
          }

        },

可以看见这个组件中定义了可以骑乘的属性,包括座位数量、交互的文本,座位所在的位置,能够骑乘的生物等,我们将这个组件加到幻翼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之后就好了很多。

此时我们还是不能控制方向,但是骑马的时候是可以控制方向的,于是我们再找找需要什么组件。发现

        "minecraft:input_ground_controlled": {
        },

大概是符合我们要求的,”接收地面上的控制“组件,将其加入幻翼的组件中。之后我们便可以像骑马一样控制幻翼了,但是由于这个组件本来只在地面上生效,所以无法控制纵坐标的变化,也就是一不小心就会摔死…….

另外注意,多个行为包如果修改了同一个实体,貌似是只会取一个的,客户端可以修改优先级,但是在服务器中就是world_behavior_pack里面的顺序,越靠前越优先。

添加新的方块

添加新的物品

添加新的生物

导出包

参考

基岩版文档

制作资源包

制作行为包

Tutorials/Creating behavior packs

下面两个是微软的官方文档,今年他们完善了相关的文档,写的非常的详细。

Introduction to Behavior Packs

Introduction to Resource Packs

comments powered by Disqus
本站访客数:
Built with Hugo
Theme Stack designed by Jimmy