当前位置: 首页 > news >正文

我的世界Java版1.21.4的Fabric模组开发教程(十九)自定义生物群系

这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十九章——自定义生物群系。想要阅读其他内容,请查看或订阅上面的专栏。

生物群系(Biome) 是Minecraft中世界不同区域呈现特定的地貌景观,这些区域与现实世界类似,都具有和其他区域不同的地理特征,如地表方块、温度、湿度以及海拔高度等。当然,处于下界和末地的部分生物群系不存在于现实世界。据统计,原版游戏中大约有80个生物群系。

生物群系的加入需要在创建维度(Dimension) 之后进行。我们可以将自定义生物群系加入到原版游戏中的维度中,也可以将生物群系加入到自定义维度,因此,想要将生物群系加入到维度,需要有一定的维度系列JSON编写能力。更多信息可以参考我的世界Java版1.21.4的Fabric模组开发教程(十七)自定义维度。

生物群系是地物(Feature) 生成的基础。所有地物的生成需要在生物群系JSON中配置。关于结构和地物的相关概念将在后续章节推出。

创建生物群系定义JSON

生物群系定义JSON用于定义生物群系的诸多属性,是创建生物群系的核心文件,也是创建生物群系需要的唯一JSON。

生物群系定义JSON应当位于(generated)/data/{mod-id}/worldgen/biome目录中,文件名为生物群系的命名空间ID。整个文件中的配置项应当包含在一个根对象{}内,它们包括:

  • “carvers”:指定可以在生物群系中生成的雕刻器。提供一个以#开头的雕刻器标签、雕刻器命名空间ID,或者写成一个数组,其中提供一个雕刻器命名空间ID的列表。该项为必选项,但可以为空;
  • “downfall”:指定生物群系的降水值,提供单精度型数据,即float。此值和“temperature”的值共同影响植物颜色;
  • “effects”:指定生物群系的环境效果。需要写成一个对象,所有的配置项都需要提供一个十进制的RGB颜色值,包括:
    • “fog_color”:指定迷雾颜色;
    • “sky_color”:指定天空颜色;
    • “water_color”:指定水体颜色;
    • “water_fog_color”:指定水下迷雾颜色;
      以上配置项为必选项,更多配置项请参考官方Wiki;
  • “features”:指定在该生物群系放置的地物。需要写成一个数组,其中的每一个配置项都代表地物放置的一个阶段,且都需要写成一个数组,其中的值为该阶段需要放置的地物。地物的放置是有序的,且仅有11个阶段,包括:
    • RAW_GENERATION:原始生成;
    • LAKES:湖;
    • LOCAL_MODIFICATIONS:本地修改;
    • UNDERGROUND_STRUCTURES:地下结构;
    • SURFACE_STRUCTURES:地表结构;
    • STRONGHOLDS:要塞;
    • UNDERGROUND_ORES:地下矿物;
    • UNDERGROUND_DECORATION:地下装饰;
    • FLUID_SPRINGS:涌泉;
    • VEGETAL_DECORATION:植被装饰
    • TOP_LAYER_MODIFICATION:顶层修改;
      所有的阶段都可以为空,但必须提供一个空的数组作为该阶段的值。每个阶段中的地物放置也是有顺序的;
  • “has_precipitation”:指定生物群系是否有降水,提供一个布尔值;
  • “spawn_costs”:指定生物群系中生物的生成代价,亦称生成势,用于控制生物生成的密度,写成一个数组,其中的每一项是某个实体的生成代价对象。该项为必选项,但可以为空;
  • “spawners”:指定生物群系以类别的形式进行生物生成,需要写成一个对象,其中的每个配置项都是一个类别,需要写成一个数组,这样的数组共有8个,包括:
    • “ambient”:环境生物;
    • “axolotls”:美西螈;
    • “creature”:动物;
    • “misc”:其他;
    • “monster”:怪物;
    • “underground_water_creature”:地下水生生物;
    • “water_ambient”:水下环境生物;
    • “water_creature”:水生生物;
      如果不需要生成指定类别的实体,则可以不添加该类别的配置项,或将配置项设置为一个空数组。每个类别中可以添加多个实体对象,每个对象的名称应当为该实体的命名空间ID,并在其中提供以下必选的配置项:
      • “type”:指定实体的命名空间ID;
      • “weight”:指定实体的生成权重;
      • “minCount”:指定实体成群生成时的最低数量,取值不得小于0;
      • “maxCount”:指定实体成群生成时的最高数量,取值不得小于0;
        更多配置项请参考官方Wiki;
  • “temperature”:指定生物群系的温度值,提供单精度型数据,即float。此值和“downfall”的值共同影响植物颜色。

关于部分配置项的详细信息,请参考生物群系定义格式 - 中文 Minecraft Wiki。此外,还要注意两点:

不是所有实体都能加入到生物群系实体生成列表的类别中。所有实体都有自己独有的类别。在“spawners”配置项中,将实体加入到错误的类别时,实体不会生成或被直接替换为“猪(minecraft:pig)”。另外,有些实体不能自然生成在生物群系中,即不能加入到“spawners”配置项的任何一个类别之中,即使在所有类别中都添加该实体的命名空间ID,实体也不会自然生成。

例如,将雪傀儡(minecraft:snow_golem)添加到“spawners”配置项的“creature”类别中,会导致其被替换为猪,但数量和权重等其他配置保持不变。

在这里插入图片描述

关于生物类别,更多信息可以参考生成 - 中文 Minecraft Wiki。

不是所有地物都能加入到生物群系中。 所有地物都有属于自己的生成阶段。在“features”配置项中,将地物添加到错误的生成阶段时,地物不会在生物群系中生成。另外,有些地物的生成是有顺序的,在某个阶段中添加地物的命名空间ID时需要按照一定的顺序,否则地物同样不会生成。而且,有些地物的生成需要条件,尤其是某些生成在地表的地物,对使用了噪声型区块生成器维度的表面规则有着严格的要求,地表被维度的噪声设置JSON控制而覆盖了错误的方块时,地物同样不会生成。

例如,将冰刺(minecraft:ice_spike)添加到“features”配置项的SURFACE_STRUCTURES类别中,会发现生物群系中没有冰刺生成,这是因为冰刺要求在雪块(minecraft:snow_block)上生成。即使将生物群系的温度降低,又或者通过噪声设置JSON修改表面规则使生物群系表面生成覆雪草方块,由于其本质始终为草方块(minecraft:grass_block),而并非雪块,冰刺始终不会在生物群系中生成。

在这里插入图片描述

下面这个例子添加了一个具有指定的环境效果、会在地面上生成杜鹃花树(minecraft:rooted_azalea_tree)且会自然生成猫(minecraft:cat)的生物群系:

	{"carvers": [],"downfall": 0.0,"effects": {"fog_color": 12638463,"sky_color": 7254527,"water_color": 4159204,"water_fog_color": 329011},"features": [[],["minecraft:lake_lava_underground","minecraft:lake_lava_surface"],[],[],[],[],[],[],[],["minecraft:rooted_azalea_tree"],["minecraft:freeze_top_layer"]],"has_precipitation": false,"spawn_costs": {},"spawners": {"creature": [{"type": "minecraft:cat","maxCount": 5,"minCount": 1,"weight": 100}]},"temperature": 1.0
}

然后将生物群系加入到维度中:

{"type": "test:new_dimension","generator": {"type": "minecraft:noise","biome_source":{"type": "minecraft:fixed","biome": "test:test_biome"},"settings":"test:new_dimension"}
}

需要使用生物群系的命名空间IDtest:test_biome,这里使用了噪声型区块生成器,生物群系源为固定型。启动游戏,使用命令或传送门来到新维度,可以看到生物群系的设置均已生效;

在这里插入图片描述

也可以将生物群系加入原版游戏的维度中,可能需要使用到第三方库。

本章小结

本章详细阐述了创建自定义生物群系JSON的编写过程,并提供了可供调试的例子,是创建自定义生物群系的入门级教程。本文总体难度不大,篇幅适中,但文件中的配置项比较繁杂,一些配置项要求严格,仍需要开发者细心学习。感谢各位的阅读,有兴趣可以订阅此专栏!

http://www.lryc.cn/news/622923.html

相关文章:

  • 小迪安全v2023学习笔记(六十三讲)—— JS加密断点调试
  • 【图论】分层图 / 拆点
  • 什么是模型预测控制?
  • Windows MCP.Net:革命性的 .NET Windows 桌面自动化 MCP 服务器
  • 【C++学习篇】:基础
  • ZKmall开源商城的数据校验之道:用规范守护业务基石
  • 中本聪思想与Web3的困境:从理论到现实的跨越
  • PyTorch生成式人工智能——使用MusicGen生成音乐
  • 新手向:Python异常处理(try-except-finally)详解
  • JVM垃圾回收器
  • 学习日志35 python
  • Python:如何在Pycharm中显示geemap地图?
  • 基于深度学习的老照片修复系统
  • k8sday08深入控制器(3/3)
  • Docker小游戏 | 使用Docker部署人生重开模拟器
  • K8S的ingress
  • 玩转云原生,使用k9s管理k8s集群和k3s集群
  • 如何在 MacOS 上安装 SQL Server
  • VS Code配置MinGW64编译ALGLIB库
  • 水分含量低、残留物少且紫外光谱纯净的生物溶剂推荐
  • python学习DAY43打卡
  • VScode 使用遇到的问题
  • 北京JAVA基础面试30天打卡11
  • MQ迁移方案
  • Linux软件编程:进程与线程(线程的传参、属性、通信(互斥锁、信号量))
  • 嵌入式硬件篇---电容本质
  • 【图像算法 - 15】智能行李识别新高度:基于YOLO12实例分割与OpenCV的精准检测(附完整代码)
  • Redis-plus-plus 安装指南
  • IOMMU的2级地址翻译机制及多级(2~5)页表查找
  • 区块链技术原理(14)-以太坊数据结构