Table of Contents
Ajouter un biome [1.16.5]
Il y a 3 étapes nécessaires pour ajouter un biome au monde.
- Création d'un biome
- Enregistrement d'un biome
- Ajout d'un biome à une zone climatique dans le monde
Dans ce tutoriel, nous ajouterons un nouveau biome appelé biome d'obsiland, dont la surface est recouverte d'obsidiennes.
Création d'un biome
Pour créer un biome, utilisez “Biome.Builder” et configurez les propriétés.
Manquer une propriété entraînera probablement le crash du jeu.
Il est recommandé de regarder les biomes de base(créés dans DefaultBiomeCreator
) comme exemples.
public class ExampleMod implements ModInitializer { // SurfaceBuilder defines how the surface of your biome looks. // We use custom surface builder for our biome to cover surface with obsidians. private static final ConfiguredSurfaceBuilder<TernarySurfaceConfig> OBSIDIAN_SURFACE_BUILDER = SurfaceBuilder.DEFAULT .withConfig(new TernarySurfaceConfig( Blocks.OBSIDIAN.getDefaultState(), Blocks.DIRT.getDefaultState(), Blocks.GRAVEL.getDefaultState())); private static final Biome OBSILAND = createObsiland(); private static Biome createObsiland() { // We specify what entities spawn and what features generate in the biome. // Aside from some structures, trees, rocks, plants and // custom entities, these are mostly the same for each biome. // Vanilla configured features for biomes are defined in DefaultBiomeFeatures. SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder(); DefaultBiomeFeatures.addFarmAnimals(spawnSettings); DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100); GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); generationSettings.surfaceBuilder(OBSIDIAN_SURFACE_BUILDER); DefaultBiomeFeatures.addDefaultUndergroundStructures(generationSettings); DefaultBiomeFeatures.addLandCarvers(generationSettings); DefaultBiomeFeatures.addDefaultLakes(generationSettings); DefaultBiomeFeatures.addDungeons(generationSettings); DefaultBiomeFeatures.addMineables(generationSettings); DefaultBiomeFeatures.addDefaultOres(generationSettings); DefaultBiomeFeatures.addDefaultDisks(generationSettings); DefaultBiomeFeatures.addSprings(generationSettings); DefaultBiomeFeatures.addFrozenTopLayer(generationSettings); return (new Biome.Builder()) .precipitation(Biome.Precipitation.RAIN) .category(Biome.Category.NONE) .depth(0.125F) .scale(0.05F) .temperature(0.8F) .downfall(0.4F) .effects((new BiomeEffects.Builder()) .waterColor(0x3f76e4) .waterFogColor(0x050533) .fogColor(0xc0d8ff) .skyColor(0x77adff) .build()) .spawnSettings(spawnSettings.build()) .generationSettings(generationSettings.build()) .build(); } }
Enregistrement des biomes
Nous enregistrerons notre biome au point d'entrée onInitialize
.
Si vous utilisez votre propre constructeur de surfaces, vous devrez également l'enregistrer.
public class ExampleMod implements ModInitializer { public static final RegistryKey<Biome> OBSILAND_KEY = RegistryKey.of(Registry.BIOME_KEY, new Identifier("tutorial", "obsiland")); @Override public void onInitialize() { Registry.register(BuiltinRegistries.CONFIGURED_SURFACE_BUILDER, new Identifier("tutorial", "obsidian"), OBSIDIAN_SURFACE_BUILDER); Registry.register(BuiltinRegistries.BIOME, OBSILAND_KEY.getValue(), OBSILAND); } }
Vous devez également donner à votre biome une entrée de langue dans votre fichier en_us.json
:
- src/main/resources/assets/modid/lang/en_us.json
{ "biome.tutorial.obsiland": "Obsiland" }
Ajout d'un biome à une zone climatique dans le monde
Nous devons spécifier le climat auquel le biome est ajouté, le biome que nous ajoutons et le poids du biome (une valeur double). Le poids est une mesure de la chance que le biome a de se reproduire. Un poids plus élevé correspond à une probabilité plus élevée pour le biome d'apparaitre, proportionnellement aux poids des autres biomes. Vous devrez peut-être donner à votre biome un poids plus élevé pendant les tests afin de pouvoir trouver le biome plus facilement. Dans ce tutoriel, nous allons ajouter le biome personnalisé aux climats TEMPERATE et COOL à titre d'exemple.
public class ExampleMod implements ModInitializer { @Override public void onInitialize() { [...] OverworldBiomes.addContinentalBiome(OBSILAND_KEY, OverworldClimate.TEMPERATE, 2D); OverworldBiomes.addContinentalBiome(OBSILAND_KEY, OverworldClimate.COOL, 2D); } }