[Mod编写经验] 矿物/结构生成

适用版本1.16.5±
平台Forge
Mappingssnapshot_20210309
版本不一定完全对应

在Minecraft 1.16中更改了生物群系,导致以前1.15的矿物/结构生成无法在1.16使用。

我们先谈谈1.15下的结构生成:先在FMLCommonSetupEvent事件中遍历注册的生物群系,再调用Biome中的addFeature()添加生成。

但是在1.16,事情就变得不同了。

在1.16中,生物群系在注册时就已经把矿物生成一类的写死了,你无法直接修改。这时候就体现Forge事件系统的强大了。Forge事件系统提供了一个叫BiomeLoadingEvent的事件,我们可以通过监听这个事件,获取生物群系的BiomeGenerationSettings.Builder(准确来说应该是继承于BiomeGenerationSettings.BuilderBiomeGenerationSettingsBuilder),然后调用withFeature()添加。

withFeature()有两个参数:decorationStagefeature

  • decorationStage:生成的结构类型,例如LAKES(湖)、UNDERGROUND_ORES(地下矿物)等。
  • feature:生成的结构。

decorationStage倒没啥问题,但是feature就有问题了,它需要注册才能使用。其实也不是多大的问题,就是Forge提供的注册方法仅针对Feature,我们使用的是ConfiguredFeature或是其它,因此需要使用原版的方法,即Registry.register()注册。