本篇教程的视频:

本篇教程源代码

GitHub地址:TutorialMod-FlowerGen-1.21

介绍

前面一篇教程我们已经添加了花和盆栽花,那这篇教程我们将让花也生成在世界中

本篇教程我们就不去看源代码了,因为世界生成这个东西和前面讲树的世界生成类似,一个构造特征,一个放置特征

花的构造特征

构造特征和放置特征不像原版那样拆开来写的话,就直接写在我们之前的类这即可

和树一样,先来一个注册键

1
public static final RegistryKey<ConfiguredFeature<?, ?>> SIMPLE_FLOWER_KEY = of("simple_flower");

而后我们在bootstrap中注册

1
2
ConfiguredFeatures.register(featureRegisterable, SIMPLE_FLOWER_KEY, Feature.FLOWER, new RandomPatchFeatureConfig(32,6,2,
PlacedFeatures.createEntry(Feature.SIMPLE_BLOCK, new SimpleBlockFeatureConfig(BlockStateProvider.of(ModBlocks.SIMPLE_FLOWER)))));

当然,这里使用的方法是和树不一样的

这里的RandomPatchFeatureConfig是一个随机生成的配置,里面的参数分别是尝试生成次数特征的水平(xz)拓展特征的垂直(y)拓展指定生成的特征,而指定生成的特征里面是SimpleBlockFeatureConfig,这个是一个简单方块的配置,用BlockStateProvider.of来指定生成的方块

不过,你是否有一个疑惑,这种不属于地物的小植物,为什么还要为其编写构造特征?

在此之前,先看看Wiki对于地物的解释

以及,我们可以在植被这一栏中发现一个随机斑块 Random Patch(眼熟吧?)

所以,这里的构造特征其实就是一个随机斑块,相当于一个植物组团,这一个是属于构造特征的,把这玩意放在世界中,就是这种小植物的生成了

游戏已配置的随机斑块可以在Wiki上查看,这里就不一一列举了

花的放置特征

接下来我们来写放置特征

1
public static final RegistryKey<PlacedFeature> SIMPLE_FLOWER_PLACED_KEY = of("simple_flower_placed");

首先是一个注册键,然后在bootstrap中注册

1
2
3
PlacedFeatures.register(featureRegisterable, SIMPLE_FLOWER_PLACED_KEY, registryEntryLookup.getOrThrow(ModConfiguredFeatures.SIMPLE_FLOWER_KEY),
RarityFilterPlacementModifier.of(4), SquarePlacementModifier.of(),
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP, BiomePlacementModifier.of());

这里的放置特征都是一些修饰符,比如RarityFilterPlacementModifier是一个稀有度过滤器,SquarePlacementModifier是一个方形放置修饰符,PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP是一个高度图修饰符(也就是地形高度),BiomePlacementModifier是一个生物群系修饰符

花的生成器

我们还需要一个生成器,这个生成器是用来生成花的

1
2
3
4
5
6
public class ModFlowerGeneration {
public static void generateFlowers() {
BiomeModifications.addFeature(BiomeSelectors.includeByKey(BiomeKeys.PLAINS, BiomeKeys.FOREST),
GenerationStep.Feature.VEGETAL_DECORATION, ModPlacedFeatures.SIMPLE_FLOWER_PLACED_KEY);
}
}

创建一个ModFlowerGeneration类,然后在里面写一个generateFlowers方法

这里我们还是选择PLAINFOREST生物群系,利用BiomeModifications.addFeature方法

其他的参数和树的差不多,就不再赘述了

当然记得将这里的方法进行初始化

1
ModFlowerGeneration.generateFlowers();

而后,我们就可以直接跑数据生成了(当然如果你是直接跳到这一篇教程的,我建议你先去看前两篇教程)

这里同样会生成两个json文件,一个是构造特征,一个是放置特征

随后我们就可以启动游戏,还是建议新建存档,以免不生成