教程:制作附加包/生物群系

来自Minecraft基岩版开发Wiki
生物群系
系列教程
所属系列
难度
高级
前置知识
实践设备
WindowsAndroid
所需软件
  • 假日创作者功能
  • 自定义生物群系

引言[编辑]

生物群系(Biome)是Minecraft世界中形态各异的地区,有着多样的地理特征、植物群海拔高度、温度、湿度、天空及植被颜色。生物群系将生成的世界划分为一个个不同的自然环境,譬如森林、丛林、沙漠和针叶林。

通过编写 生物群系数据 您可以:

  • 更改生物群系的一般形状
  • 更改生物群系生成的比例
  • 更改生物群系的装饰特征(例如树和草的分布)
  • 更改生物群系的气候
  • 更改生物群系的生物
  • 更改生物群系的雾效

接下来让我们开始

开始[编辑]

首先,生物群系都拥有一个 命名空间 ,请先了解这个内容,以为您的生物群系赋予一个适当的命名空间(或者修改已有的生物群系)。
下面有个 范例 以做参考:

{
  "plains": {
    "format_version": "1.12.0",
    "minecraft:climate": {
      "downfall": 0.4,
      "snow_accumulation": [ 0.0, 0.125 ],
      "temperature": 0.8
    },
    "minecraft:overworld_height": {
      "noise_type": "lowlands"
    },
    "minecraft:surface_parameters": {
      "sea_floor_depth": 7,
      "sea_floor_material": "minecraft:gravel",
      "foundation_material": "minecraft:stone",
      "mid_material": "minecraft:dirt",
      "top_material": "minecraft:grass"
    },   "minecraft:overworld_generation_rules": {
      "hills_transformation": [
        [ "forest_hills", 1 ],
        [ "forest", 2 ]
      ],
      "mutate_transformation": "sunflower_plains",
      "generate_for_climates": [
        [ "medium", 3 ],
        [ "warm", 1 ],
        [ "cold", 1 ]
      ]
    },
    "animal": {},
    "monster": {},
    "overworld": {},
    "plains": {}
  }
}

上面这段取自 官方文档 ,但已废用。下面给出 1.13.0 以后的例子。

{
    "format_version": "1.13.0",//格式版本
    "minecraft:biome": {
        "description": {
            "identifier": "pumpkin_pastures"//id 标识符
        },
        "components": { //组件
            "minecraft:surface_parameters": {
                "foundation_material": "minecraft:stone",
                "top_material": "minecraft:grass",
                "mid_material": "minecraft:dirt",
                "sea_floor_depth": 4,
                "sea_material": "minecraft:water",
                "sea_floor_material": "minecraft:sand"
            },
            "minecraft:overworld_height": {
                "noise_params": [
                    0.125,
                    0.0625
                ]
            },
            "minecraft:climate": {
                "temperature": 0.375,
                "downfall": 0.25,
                "snow_accumulation": [
                    0,
                    0.5
                ]
            },
            "minecraft:overworld_generation_rules": {                "generate_for_climates": [
                    [
                        "cold",
                        1
                    ]
                ],
                "hills_transformation": "pumpkin_pastures_hills",
                "shore_transformation": "pumpkin_pastures"
            },
            "overworld": {},
            "pumpkin_pastures": {},
            "animal": {},
            "monster": {}
        }
    }
}

修改已有生物群系[编辑]

生物群系定义文件可以作为初始定义或覆盖,这取决于行为包的级别。

生物群系规范[编辑]

接下来我们将简单的介绍有关定义生物群系的json文件的基本规范。(注意:json文件在 行为包/biomes 下,且一个json文件对应着 一个生物群系)
在json文件中,您首先能看到的是format_version属性(这里将关键字译成属性),即 版本规范 ,接下来的内容都是基于 format_version ≥ 1.13.0 的情况下,进行的。
接下来我们可以看到另一个顶层属性minecraft:biome ,它是极其重要的,接下来我们的所有操作都在这个属性下进行,我们来看一下它的基本格式

"minecraft:biome": {
	
}

minecraft:biome这个顶层属性下,有 description 这个属性,目前这个属性下仅有 identifier 属性,他便对应着这个生物群系的 命名空间 ,接下来请看下面这个例子

"description": {
	"identifier": "wiki:test_biome"
}

这里有很多注意点:

  • identifier 属性不允许省略 name: ,就像上面例子中不能省略 wiki:,但在后面很多地方允许您省略 name:(注:如果您是修改原版的生物群系,可以省略 minecraft:)
  • identifier 不能对应多个 值 ,也就是说,一个json文件仅能定义一个 生物群系
  • identifier 所对应的值 必须与文件名相同

minecraft:biome 属性下还有 components 属性,即组件,这是生物群落定义的核心。在这里,定义生物群落的 各种特点

"components": {
	
	"minecraft:ignore_automatic_features": {}
}

要注意的是:组件中的所有内容始终是 对象属性 ,尽管是那些看起来要被赋予 布尔值 的 属性,例如:minecraft:ignore_automatic_features 不能被赋予 ture 或者 false 的 布尔值,而是赋予一个空对象

"components": {
	
	"minecraft:ignore_automatic_features": {}
}

同时,组件允许出现相同的 属性名 ,像下面这个例子,同时出现了 两次 minecraft:overworld_height 属性,但是游戏仅采用最后定义的 属性 ,也就是第二个 minecraft:overworld_height 属性,尽管 noise_type 的覆盖级别比 noise_params 更高,所以这样应该尽量减少重复的 属性名

"components": {
	
	"minecraft:overworld_height": {
		"noise_type": "ocean"
	},
	"minecraft:overworld_height": {
		"noise_params": [1.25, 0]
	}
}

还要注意的是:当在生物群系定义中使用组件时,必须提供其所有必需的属性;如果没有提供,将抛出错误,生物群系将无法生成。 除了用于创建生物群系的组件之外,components 属性下还需要 标签

"components": {
	
	"overworld": {},
	"pumpkin_pastures": {},
	"animal": {},
	"monster": {}
}

标签看起来像空组件,它同样需要满足 正则表达式 。标签允许创作者自己定义,大部分情况下,您应当使用示例中所提供的标签,或者使用 特定的标签 (这个意思是您不能以minecraft: 开头,以防与 mojang 未来的更新重复,最好应该像赋予 命名空间 一样,创建一个标签)。

继承[编辑]

生物群系定义文件可以作为初始定义或覆盖,这取决于行为包的顺序。
继承 仅会继承 components 属性中的标签和组件。但不幸的是,任何组件都需要声明所有 参数 ,这意味着重写生物群系的时候,重新声明所有的组件可能是更好的选择,也就是说转用 覆盖 而非 完全继承。
要注意的是:无论是 完全继承 还是 覆盖 的情况下,继承 总会出现,它是不可避免的,除非新定义干扰了以前的定义,也就是所谓的 表面调整。

覆盖[编辑]

自定义生物群系[编辑]

群系生成[编辑]

群系的生成有几点是您要明确的:

  • 选择群系生成在哪个 维度
  • 选择群系在特定的 插槽 中,起到怎样的作用
  • 采用何种 种子 以使 世界生成器 通过适当的 噪声 生成您的群系

先简单介绍一下 维度:

  主条目:维度

维度(Dimension)为Minecraft中平行世界的称谓。包括:

  • 主世界 - Minecraft的起始维度与主要维度。
  • 下界 - 通过在主世界中建造下界传送门到达的地狱风格的维度。
  • 末地 - 整个维度都是由末地石构成的浮空岛,可通过进入要塞中的末地传送门到达。

目前,末地 暂时不允许添加和删除已有的 生物群系 。所以我们只能对 下界主世界 进行操作,先从主世界讲起。

主世界[编辑]

首先要明确一个重要的地方,何谓 种子(此处提供我的世界wiki的页面)
当游戏准备生成一个世界时,游戏会调用一个被称作 柏林噪声 的算法,生成一个伪随机数,这个数决定了世界的样子。但由于伪随机算法的性质,若算法初始输入的数值(种子)是相同的话,算出的最终结果是相同的。这就是种子的意义:使用相同的种子可以生成出多个相同的世界。
当世界生成算法更新(通常是加入新的生物群系)后,相同的种子就不会生成相同的地形。这也是某些不同的游戏版本中,相同的种子无法产生相同的地形的原因。
再简单介绍一下 插槽:
这里插槽的指的是世界基本分布方式(这里只介绍主世界),包括

若将世界比作一张大版,插槽就将这张大板分割成了各个部分,生物群系都应该稳稳的插在插槽中,以使世界能够正常生成
在主世界中采用 地区 , 气候 和 权重 这三个值来生成群系

//下面这些本质上是个组件
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["cold", 1]   //温度类型,1是权重
	],
	"hills_transformation": "pumpkin_pastures_hills",
	"shore_transformation": "pumpkin_pastures"
}

在遇到高山等地形时,上面这个组件还能帮助 生物群系 转换自己的类型。要注意的是:它们也可以把自己注册成基本的生物群系(已有的基本生物情绪包括土地高山等),并声明自己的子群系
了解了这些后,我们就可以开始了解下面的内容了。

气候[编辑]
"generate_for_climates": [
	["frozen", 2],
	["cold", 1]
]

所有生物群系都拥有温度(Temperature)、降水(Downfall)和降水类型(Precipitation)三个基本属性,这些属性组合在一起就是 气候
这里我们先看 温度 ,这里的温度与常规情况下的极为不同,在现实世界中,我们直接用数字表示温度,但现在你将会看到5种不同意义的温度,这些温度插槽表示着群系能在哪些温度地图下产生

温度类型 属性名
冰冻 frozen
寒冷 cold
常规 medium
不热 lukewarm
温暖 warm
  不热 的温度只适用于海洋和深海。土地只使用其他4种温度类型。

气候槽和地区槽形成了独有的插槽地图(指同类型插槽所占有的空间),这些地图相互重叠,形成了 噪音交又点 (这个我们之后会讲到) ,换句话说:生物群系只能在这些 噪音交叉点 上生成,基本气候插入这些 点 ,然后它的子群系就会申请更精细的形状,但是这么多群系,难道全部给它们生成吗?所以就需要权重来帮忙,权重规定了 生物群系可以争夺的空间
关于 权重 ,您需要注意的点:

  • 气候槽和地区槽是无法配置和修改的,这导致群众成为了您唯一修改 生物群系 大小的方式
  • 权重应该是一个整数值,您也可以给它提供几位小数,但是游戏会将小数向下取整
  • 权重应该是一个自然数,如果您给它设置为负数,它的情况将会跟设置为零的时候一样
  • 权重也同样在 generate_for_climates 之下(这里的意思是说温度后面的数字即为权重,就像上面的json例子一样),通常来说将 所有权重 修改为 0 ,应当可以使当前群系消失(无法生成),但是游戏有个回退系统,所以此方法无效

要注意的是:

  • 在游戏底层中,气候插槽比地区插槽更早考虑,也就是说:一个生物体系会先考虑这个群系是否满足 气候 要求,再考虑是否满足 地区 要求
  • 如果同一个群系生成在两个相邻的温度插槽时,这两个群系会合成一个
  • 首次加载时,玩家定然会在 平原 , 丛林 ,针叶林 , 黑森林 , 草原 , 森林 及它们的变种 诞生 ,如果它们不存在,游戏将会无休止的寻找 合适的 生成 位置
  • 与地区插槽不同,一个生物群系能注册多个 气候插槽
//平原生物群系的范例
"generate_for_climates": [
	["cold", 1],
	["medium", 3],
	["warm", 1]
]

上述讲的是关于气候的 温度 选项,其他选项可以在玩法中找到。

地区[编辑]

游戏中的主世界由多个地区分割而成,这些地区充当了放置生物群系的插槽,一般情况下会明显的被海洋和陆地分割。
接下来我们将介绍多种 地区槽 类型。
土地
与真实的世界不同,主世界的大部分是陆地。共有56个 生物群落 属于它,其中许多是变异或丘陵形式的基础生物群落。

共有土地
"generate_for_climates": [
	["cold", 1]
]

这是游戏内最大的 槽 ,占有了大部分 土地,除非另有标记,不然所有的自定义生物群群系 都将插入这个 槽

 当所有属于共有土地的群系都被特殊的方法清除后,稀有土地的群系就会占据原来的共有土地,如果稀有土地的也被清除,游戏将会从备用表中直接提取
稀有土地
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["medium", 1]
	]
	
},

"rare": {}

稀有土地槽是主世界中为生物群落预留的一些大而罕见的区域。当生物群系拥有 rare 标签时,生物群系便可以生成在 稀有土地槽 中,要注意的是:

  • rare 标签的级别比 ocean 标签低(这两个标签不共存)
  • 稀有土地槽 目前拥有的群系中不包括气候有 frozen 温度的群系,但仍然允许您将拥有这种气候温度的群系,添加进稀有土地,像下面这个例子
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["frozen", 1]
	]
},

"rare": {}

海洋
主世界的其余部分都被海洋所覆盖,事实上海洋这个词不太恰当,因为看起来像河和湖泊的也是海洋。使用 ocean 标签可以将生物群系插入海洋,您要注意的是:

  • 海洋通常分为浅海和深海,两者的比重大致相等。分散的岛屿可以在海洋区域内生成。
  • 一般地,有10种海洋群系
基本海洋
"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["lukewarm", 1]
	]
},

"ocean": {}

基本海洋约占海洋面积的一半。该区域旨在供深度相对较浅的水生生物群落使用,您要注意的是:

  • 基本海洋不能用deep标签来开槽


深海

深海采用 deep 标签,但 deep 的标签必需与 ocean 标签一起使用。

"minecraft:overworld_generation_rules": {
	"generate_for_climates": [
		["frozen", 1]
	]
},

"ocean": {},
"deep": {}

岛屿
岛屿本身不是一个主生物群系,是一个子生物群系。您可以先了解什么是岛屿:

  从概念上讲,岛屿与陆地区域的次级生物群落没有什么不同,它看起来更像是丘陵,但又并非是山丘。海洋中的岛屿才算真正意义上岛屿
"minecraft:overworld_generation_rules": {
	"hills_transformation": "tropical_island"
},

上面指的是陆地上的岛屿(即所谓的山丘)

"minecraft:overworld_generation_rules": {
	"hills_transformation": "deep_ocean"
},

上面指的是海洋中的岛屿(有时可能会成为海岸)
蘑菇

  下面的蘑菇特指包含蘑菇的生物群系

有关蘑菇最有名的生物群系应当是蘑菇岛,可怕的是,有关蘑菇的生物群系几乎是无法删除的。当你删除主世界其他的群系之后,蘑菇就会覆盖掉这些
因为蘑菇的这种特性,如果你在一个世界中不想要蘑菇,使它变得跟海洋特别像,可能是唯一的方法。

"minecraft:overworld_generation_rules": {
	
	"hills_transformation": [
		["overgrown_forest_hills_short", 4],
		["overgrown_forest_hills_tall", 1]
	],
	"shore_transformation": "rocky_shore"
}



现在主世界所有的 主生物体系 ,已经介绍完毕,接下来我们将介绍 子生物群系类型 。
首先一个主生物群系可以通过以下的 生成规则转变 来声明自己的子生物群系:

类型转变 生成规则
"hills_transformation"
突变 "mutate_transformation"
"river_transformation"
海岸 "shore_transformation"

子生物群系也可以声明自己的子生物群系,但是不可以同类嵌套,比如说山不能再声明山,但可以声明 突变山。下面我们列举它们的使用方法:

子生物群系声明
类型 注意 示例
它们通常拥有着高海拔,在生物群系中很常见,虽说它们的名字是丘陵,但是他们不一定必须要生成丘陵,它们也可以用于生成天山湖,火山口等生物群系。它们的特点是小而常见
"hills_transformation": "pumpkin_pastures_hills"
突变 这是一种大而罕见的群系。要注意的是,突变只能在子群系中声明,比如说您可以声明突变丘陵,但是您不应该期望它可以在主生物群系中生成。
"mutate_transformation": "mushroom_forest_dense"
//突变丘陵
"hills_transformation": "mangrove_forest_hills"
//另一种形式
"mutate_transformation": "mangrove_forest_hills_mutated"
河流 河流生物群系的生成是极其危险的,所以建好一个生物群系只拥有一种河流,这在接下来我们可能会详细介绍
"river_transformation": "ivory_shallows"
海岸 跟河流一样,海岸有点特别,它既可以属于陆地生物群系,也可以属于海洋生物群系(添加ocean标签)。一般用沙子或者石头装饰,它能够用来生成大而浅的湖泊,或者陆地与海洋的过渡
"shore_transformation": "lava_fields"

下界[编辑]

"minecraft:nether_generation_rules": {
	"target_temperature": 0.5,
	"target_humidity": 0.75,
	"target_altitude": -0.25,
	"target_weirdness": 0,
	"weight": 0.1
}

我们必须对您做出警告,下界虽然比主世界拥有更多的功能控制,但这是以更高的复杂性做代价的,生物群系都需要更为强大的数学系统。

基础[编辑]

与主世界不一样,主世界仅拥有气候与地形两种槽,它却拥有4种(并且槽与槽之间的区分更加明显):

类型
温度 target_temperature
湿度 target_humidity
海拔 target_altitude
幽冥 target_weirdness
 请注意:上面这些内容并不代表着生物群系的实际属性,如"target_altitude"值的提高,并不会使气候变暖,它也可以代表着腐败性。所以在特殊情况下,我们可以重新声明他们的表示含义,甚至忽略他们。

这些target槽的值被限定在-1到1之间。

更多考虑[编辑]

群系形状[编辑]

块类型[编辑]

高度图[编辑]

噪声[编辑]

表面生成[编辑]

表面调整[编辑]
噪声交叉点[编辑]

玩法[编辑]

玩法是一个抽象的意义,下面内容包括生物群系的 迷雾实体地物 ,装饰。

特征[编辑]

外部特征[编辑]
不可变特征[编辑]
洞穴(内部特征)[编辑]

生物[编辑]

标签[编辑]

参考[编辑]

  1. 官方文档:生物群系
  2. 我的世界wiki:种子(世界生成)
  3. 我的世界wiki:噪声生成器
  4. 我的世界wiki:维度
  5. 我的世界wiki:生物群系