User Tools

Site Tools


tutorial:ores

This is an old revision of the document!


Adding Ores to the World

A lot of mods add their own ores, and you'll need a way to place them in existing biomes for players to find. In this tutorial, we'll look at adding ores to existing biomes and biomes added by other mods. There are 2 steps that are required to add ores to biomes.

  • Make a ConfiguredFeatures. This defines how your ore block is spawned.
  • Use mixin to inject feature registration into DefaultBiomeFeature

We'll assume you've already created your own ore block at this point. Quartz Ore will serve as our replacement, and our goal will be spawning it in overworld biomes. Replace references to Quartz Ore with your ore when appropriate.

Making a ConfiguredFeatures

First we need to create a ConfiguredFeatures. Make sure to register your ConfiguredFeature at onInitialize. Feel free to change the values to suit your mod.

  1. public class ExampleMod implements ModInitializer {
  2. public static ConfiguredFeature<?, ?> ORE_QUARTZ_OVERWORLD = Feature.ORE
  3. .configure(new OreFeatureConfig(
  4. OreFeatureConfig.Rules.BASE_STONE_OVERWORLD,
  5. Blocks.NETHER_QUARTZ_ORE.getDefaultState(),
  6. 9)) // vein size
  7. .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig(
  8. 0, // bottom offset
  9. 0, // min y level
  10. 64))) // max y level
  11. .spreadHorizontally()
  12. .repeat(20); // number of veins per chunk
  13.  
  14. @Override
  15. public void onInitialize() {
  16. Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier("tutorial", "ore_quartz_overworld"), ORE_QUARTZ_OVERWORLD);
  17. }
  18. }

Injecting into DefaultBiomeFeature

This adds your ore to the overworld biomes.

  1. @Mixin(DefaultBiomeFeatures.class)
  2. public class DefaultBiomeFeaturesMixin {
  3. @Inject(method = "addDefaultOres(Lnet/minecraft/world/biome/GenerationSettings$Builder;)V", at = @At("TAIL"))
  4. private static void addDefaultOres(GenerationSettings.Builder builder, CallbackInfo ci) {
  5. builder.feature(GenerationStep.Feature.UNDERGROUND_ORES, ExampleMod.ORE_QUARTZ_OVERWORLD);
  6. }
  7. }

Conclusion

You should see quartz ore spawning in the overworld. You can use fill command to remove stone blocks surrounding you like this: /fill ~-4 0 ~-4 ~4 ~ ~4 minecraft:air replace minecraft:stone.

tutorial/ores.1598441106.txt.gz · Last modified: 2020/08/26 11:25 by siglong