花的世界生成 1.20 Fabric 长线教程计划
本篇教程的视频
(待发布)
本篇教程的源代码
(待发布)
本篇教程目标
- 理解原版花的构造特征和放置特征
- 学会自己编写花的构造特征和放置特征
查看源代码
像花这种小植物,在游戏中是以一种叫随机斑块
的形式出现的,也就是一些小植被
,它也是地物
的一种,所以它们也具有构造特征和放置特征
构造特征
构造特征我们可以在VegetationConfiguredFeatures
类中找到
1 | public static final RegistryKey<ConfiguredFeature<?, ?>> FLOWER_DEFAULT = ConfiguredFeatures.of("flower_default"); |
光是涉及花
的,就有很多种
默认的是FLOWER_DEFAULT
1 | ConfiguredFeatures.register( |
在下面的bootstrap
方法中,我们可以看到蒲公英
的构造特征
其中的createRandomPatchFeatureConfig
方法,就是创建一个随机斑块
第一个参数是方块的提供器
,第二个是尝试生成的次数
,以区块
为单位
当然,我们在写时候,和这个并不完全一样
放置特征
放置特征我们可以在VegetationPlacedFeatures
类中找到
1 | public static final RegistryKey<PlacedFeature> FLOWER_DEFAULT = PlacedFeatures.of("flower_default"); |
同样的,它也是差不多的,一个注册键,bootstrap
方法中注册
RarityFilterPlacementModifier.of
方法是生成几率,这个就是百分数了
SquarePlacementModifier.of()
是生成方式,这个就是方块为单位了,应该指按照一个方形平面放置(联想一下笔刷
)
PlacedFeatures.MOTION_BLOCKING_HEIGHTMAP
是高度图,按照高度来放置
BiomePlacementModifier.of()
是生物群系,按照生物群系来放置
这些其实就是在世界生成时,尝试生成的一些方法规则
注册花的世界生成
注册构造特征
我们回到之前的ModConfiguredFeatures
类中
首先写一个注册键
1 | public static final RegistryKey<ConfiguredFeature<?, ?>> SIMPLE_FLOWER_KEY = of("simple_flower"); |
之后在bootstrap
方法中注册构造特征
1 | ConfiguredFeatures.register(featureRegisterable, SIMPLE_FLOWER_KEY, Feature.FLOWER, |
这里的随机斑块方法,我们就直接实例化RandomPatchFeatureConfig
第一个参数是尝试生成的次数
,第二个参数是xz方向上拓展
的距离,第三个参数是y方向上拓展
的距离,第四个参数是注册表项
注册表项提供一个简单方块特征和它的配置参数
注册放置特征
我们回到之前的ModPlacedFeatures
类中
同样的一个注册键
1 | public static final RegistryKey<PlacedFeature> SIMPLE_FLOWER_PLACED_KEY = ModPlacedFeatures.of("simple_flower_placed"); |
之后在bootstrap方法中注册放置特征
1 | PlacedFeatures.register(featureRegisterable, SIMPLE_FLOWER_PLACED_KEY, |
这里的写法和原版的差不多,可以仿照原版的方法来写
花的世界生成器
接下来我们还要创建一个ModFlowerGeneration
类
1 | public class ModFlowerGeneration { |
和前面写树一样,我们要用Fabric API
来让花生成在某一个生物群系
中
1 | public static void registerFlowers() { |
这里的BiomeSelectors.includeByKey
方法,就是让花生成在指定的生物群系中,和前面讲到树的时候一样
registerFlowers
方法要在ModWorldGeneration
类中调用
1 | ModFlowerGeneration.registerFlowers(); |
测试
在此之后,我们就可以跑数据生成,然后得到对应的构造json
文件和放置json
文件,之后我们就可以进入游戏进行测试了