- 致编者:请牢记我们的域名wiki.mcbe-dev.net!
- 致编者:欢迎加入本Wiki的官方交流QQ群或Discord服务器!
- 基岩版1.19.31现已发布!(了解更多)
- Inner Core现已支持Xbox模组联机!(了解更多)
- 如果您是第一次来到本Wiki,欢迎注册一个账户
- 点击顶部的“编辑”或“编辑源代码”按钮即可编辑当前页面
- 请知悉:在不登录时也可以编辑和新建页面,但是您当前的IP地址会记录在编辑历史中
教程:制作附加包/生物群系
引言[edit]
生物群系(Biome)是Minecraft世界中形态各异的地区,有着多样的地理特征、植物群、海拔高度、温度、湿度、天空及植被颜色。生物群系将生成的世界划分为一个个不同的自然环境,譬如森林、丛林、沙漠和针叶林。
通过编写 生物群系数据 您可以:
- 更改生物群系的一般形状
- 更改生物群系生成的比例
- 更改生物群系的装饰特征(例如树和草的分布)
- 更改生物群系的气候
- 更改生物群系的生物
- 更改生物群系的雾效
接下来让我们开始
开始[edit]
首先,生物群系都拥有一个 命名空间 ,请先了解这个内容,以为您的生物群系赋予一个适当的命名空间(或者修改已有的生物群系)。
下面有个 范例 以做参考:
{
"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": {}
}
}
}
修改已有生物群系[edit]
生物群系定义文件可以作为初始定义或覆盖,这取决于行为包的级别。
生物群系规范[edit]
接下来我们将简单的介绍有关定义生物群系的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 未来的更新重复,最好应该像赋予 命名空间 一样,创建一个标签)。
继承[edit]
生物群系定义文件可以作为初始定义或覆盖,这取决于行为包的顺序。
继承 仅会继承 components 属性中的标签和组件。但不幸的是,任何组件都需要声明所有 参数 ,这意味着重写生物群系的时候,重新声明所有的组件可能是更好的选择,也就是说转用 覆盖 而非 完全继承。
要注意的是:无论是 完全继承 还是 覆盖 的情况下,继承 总会出现,它是不可避免的,除非新定义干扰了以前的定义,也就是所谓的 表面调整。
覆盖[edit]
该页面的编辑正在进行中。 请帮助我们扩充或改进这篇文章。 |
自定义生物群系[edit]
该页面的编辑正在进行中。 请帮助我们扩充或改进这篇文章。 |
群系生成[edit]
群系的生成有几点是您要明确的:
- 选择群系生成在哪个 维度
- 选择群系在特定的 插槽 中,起到怎样的作用
- 采用何种 种子 以使 世界生成器 通过适当的 噪声 生成您的群系
先简单介绍一下 维度:
主条目:维度
维度(Dimension)为Minecraft中平行世界的称谓。包括:
目前,末地 暂时不允许添加和删除已有的 生物群系 。所以我们只能对 下界 和主世界 进行操作,先从主世界讲起。
主世界[edit]
首先要明确一个重要的地方,何谓 种子(此处提供我的世界wiki的页面) 。
当游戏准备生成一个世界时,游戏会调用一个被称作 柏林噪声 的算法,生成一个伪随机数,这个数决定了世界的样子。但由于伪随机算法的性质,若算法初始输入的数值(种子)是相同的话,算出的最终结果是相同的。这就是种子的意义:使用相同的种子可以生成出多个相同的世界。
当世界生成算法更新(通常是加入新的生物群系)后,相同的种子就不会生成相同的地形。这也是某些不同的游戏版本中,相同的种子无法产生相同的地形的原因。
再简单介绍一下 插槽:
这里插槽的指的是世界基本分布方式(这里只介绍主世界),包括
若将世界比作一张大版,插槽就将这张大板分割成了各个部分,生物群系都应该稳稳的插在插槽中,以使世界能够正常生成
在主世界中采用 地区 , 气候 和 权重 这三个值来生成群系
//下面这些本质上是个组件
"minecraft:overworld_generation_rules": {
"generate_for_climates": [
["cold", 1] //温度类型,1是权重
],
"hills_transformation": "pumpkin_pastures_hills",
"shore_transformation": "pumpkin_pastures"
}
在遇到高山等地形时,上面这个组件还能帮助 生物群系 转换自己的类型。要注意的是:它们也可以把自己注册成基本的生物群系(已有的基本生物情绪包括土地高山等),并声明自己的子群系
了解了这些后,我们就可以开始了解下面的内容了。
气候[edit]
"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]
]
上述讲的是关于气候的 温度 选项,其他选项可以在玩法中找到。
地区[edit]
游戏中的主世界由多个地区分割而成,这些地区充当了放置生物群系的插槽,一般情况下会明显的被海洋和陆地分割。
接下来我们将介绍多种 地区槽 类型。
土地
与真实的世界不同,主世界的大部分是陆地。共有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"
|
下界[edit]
"minecraft:nether_generation_rules": {
"target_temperature": 0.5,
"target_humidity": 0.75,
"target_altitude": -0.25,
"target_weirdness": 0,
"weight": 0.1
}
我们必须对您做出警告,下界虽然比主世界拥有更多的功能控制,但这是以更高的复杂性做代价的,生物群系都需要更为强大的数学系统。
基础[edit]
与主世界不一样,主世界仅拥有气候与地形两种槽,它却拥有4种(并且槽与槽之间的区分更加明显):
类型 | 槽 |
---|---|
温度 | target_temperature |
湿度 | target_humidity |
海拔 | target_altitude |
幽冥 | target_weirdness |
请注意:上面这些内容并不代表着生物群系的实际属性,如"target_altitude"值的提高,并不会使气候变暖,它也可以代表着腐败性。所以在特殊情况下,我们可以重新声明他们的表示含义,甚至忽略他们。
这些target槽的值被限定在-1到1之间。
更多考虑[edit]
群系形状[edit]
块类型[edit]
高度图[edit]
噪声[edit]
表面生成[edit]
表面调整[edit]
噪声交叉点[edit]
玩法[edit]
玩法是一个抽象的意义,下面内容包括生物群系的 迷雾 ,实体 ,地物 ,装饰。