User Tools

Site Tools


zh_cn:tutorial:ores

在世界中添加矿石

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

  • 遍历生物群系注册表以将您的矿石添加到现有生物群系中。
  • 使用RegistryEntryAddedCallback以确保您的矿石被添加到mod添加的任何生物群系中。

我们假设您此时已经创建了自己的矿石。 石英矿石将替代我们,我们的目标是在整个世界生物群系中生成它。 适当时用您的矿石替换对石英矿石的引用。

在群系中添加矿石

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

  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.txt · Last modified: 2020/01/08 11:56 by lightcolour