User Tools

Site Tools


zh_cn:tutorial:ores

This is an old revision of the document!


在世界中添加矿石

许多模组会添加自己的矿石,您需要找到一种方法以将其放置在现有生物群系中让玩家寻找。在本教程中,我们将研究将矿石添加到现有生物群系以及其他模组添加的生物群系。将矿石添加到生物群系需要2个步骤。

注意 Biome Modification API 仍是实验性的。如果 API 不起作用,考虑 mixin 版本

我们假设您此时已经创建了自己的矿石。本教程中,我们使用羊毛方块进行替换。你可以适时将羊毛改成你自己的矿石。

在群系中添加矿石

首先,我们需要创建一种方法来处理生物群系,检查其是否为有效的生物群系,然后添加矿石。

  1. private void handleBiome(Biome biome) {
  2. if(biome.getCategory() != Biome.Category.NETHER && biome.getCategory() != Biome.Category.THEEND) {
  3. biome.addFeature(
  4. GenerationStep.Feature.UNDERGROUND_ORES,
  5. Biome.configureFeature(
  6. Feature.ORE,
  7. new OreFeatureConfig(
  8. OreFeatureConfig.Target.NATURAL_STONE,
  9. Blocks.NETHER_QUARTZ_ORE.getDefaultState(),
  10. 8 //Ore vein size
  11. ),
  12. Decorator.COUNT_RANGE,
  13. new RangeDecoratorConfig(
  14. 8, //Number of veins per chunk
  15. 0, //Bottom Offset
  16. 0, //Min y level
  17. 64 //Max y level
  18. )));
  19. }
  20. }

此方法通过提供的生成设置将您的矿石添加到整个世界。 随意更改值以适合您的mod。

迭代生物群系注册表

接下来,我们需要处理已注册的所有生物群系以及将来将要注册的所有生物群落(由其他模块添加)。 我们首先遍历当前注册表,然后注册一个侦听器,以供将来添加。

  1. @Override
  2. public void onInitialize() {
  3. //Loop over existing biomes
  4. Registry.BIOME.forEach(this::handleBiome);
  5.  
  6. //Listen for other biomes being registered
  7. RegistryEntryAddedCallback.event(Registry.BIOME).register((i, identifier, biome) -> handleBiome(biome));
  8. }

结论

您应该会在整个世界中看到石英矿石的生成:

Quartz Ores

zh_cn/tutorial/ores.1632355950.txt.gz · Last modified: 2021/09/23 00:12 by solidblock