zh_cn:tutorial:ores
This is an old revision of the document!
Table of Contents
在世界中添加矿石
许多模组会添加自己的矿石,您需要找到一种方法以将其放置在现有生物群系中让玩家寻找。在本教程中,我们将研究将矿石添加到现有生物群系以及其他模组添加的生物群系。将矿石添加到生物群系需要2个步骤。
- 制作一个 ConfiguredFeature,定义你的矿石方块如何生成。
- 使用 Fabric API 中的 Biome Modification API以将地物添加到生物群系。
注意 Biome Modification API 仍是实验性的。如果 API 不起作用,考虑 mixin 版本。
我们假设您此时已经创建了自己的矿石。本教程中,我们使用羊毛方块进行替换。你可以适时将羊毛改成你自己的矿石。
添加到主世界生物群系
本段落将会在主世界生成矿石。
我们需要创建一个 ConfiguredFeature,确保在 onInitialize
中注册你的 ConfiguredFeature,你可以自由地改变一些值以适应你的模组。
public class ExampleMod implements ModInitializer { private static ConfiguredFeature<?, ?> ORE_WOOL_OVERWORLD = Feature.ORE .configure(new OreFeatureConfig( OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, Blocks.WHITE_WOOL.getDefaultState(), 9)) // Vein size .range(new RangeDecoratorConfig( // You can also use one of the other height providers if you don't want a uniform distribution UniformHeightProvider.create(YOffset.aboveBottom(0), YOffset.fixed(64)))) // Inclusive min and max height .spreadHorizontally() .repeat(20); // Number of veins per chunk @Override public void onInitialize() { RegistryKey<ConfiguredFeature<?, ?>> oreWoolOverworld = RegistryKey.of(Registry.CONFIGURED_FEATURE_KEY, new Identifier("tutorial", "ore_wool_overworld")); Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, oreWoolOverworld.getValue(), ORE_WOOL_OVERWORLD); BiomeModifications.addFeature(BiomeSelectors.foundInOverworld(), GenerationStep.Feature.UNDERGROUND_ORES, oreWoolOverworld); } }
结果
检查你的世界生成结果时,记得要创建新世界。你应该看见羊毛在主世界生成了。你可以使用下面的命令移除周围的石头方块。
/fill ~-8 0 ~-8 ~8 ~ ~8 minecraft:air replace minecraft:stone
迭代生物群系注册表
接下来,我们需要处理已注册的所有生物群系以及将来将要注册的所有生物群落(由其他模块添加)。 我们首先遍历当前注册表,然后注册一个侦听器,以供将来添加。
@Override public void onInitialize() { //Loop over existing biomes //Listen for other biomes being registered RegistryEntryAddedCallback.event(Registry.BIOME).register((i, identifier, biome) -> handleBiome(biome)); }
结论
zh_cn/tutorial/ores.1632356121.txt.gz · Last modified: 2021/09/23 00:15 by solidblock