Jump to content

[1.16] Add custom features to a custom biome


kiou.23

Recommended Posts

I have a custom biome, and I want to add custom features to it. however, using ".withFeature()", in the biome generation settings isn't working, because the biome gets initialized before the features does, giving me a Null Pointer Exception

 

Biome (gets initialized through a deferred register):

@Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ModBiomes {

    public static final DeferredRegister<Biome> BIOMES = DeferredRegister.create(ForgeRegistries.BIOMES, Main.MOD_ID);

    public static final RegistryObject<Biome> EFFETE_FOREST = BIOMES.register("effete_forest", Maker::EffeteForest);

    @SubscribeEvent
    public static void setupBiomes(FMLCommonSetupEvent event) {
        event.enqueueWork(() ->
            setupBiome(EFFETE_FOREST.get(), BiomeManager.BiomeType.WARM, 10000000, //1000
                Type.NETHER, Type.FOREST, Type.HOT, Type.DRY)
        );
    }

    private static void setupBiome(Biome biome, BiomeManager.BiomeType type, int weight, Type... types) {
        RegistryKey<Biome> key = RegistryKey.getOrCreateKey(
            ForgeRegistries.Keys.BIOMES,
            Objects.requireNonNull(ForgeRegistries.BIOMES.getKey(biome), "Biome registry name was null")
        );

        BiomeDictionary.addTypes(key, types);
        BiomeManager.addBiome(type, new BiomeManager.BiomeEntry(key, weight));
    }

    private static class Maker {

        private static Biome EffeteForest() {
            BiomeGenerationSettings genset = new BiomeGenerationSettings.Builder()
                .withFeature(GenerationStage.Decoration.VEGETAL_DECORATION, ModFeatures.EFFETE_STEM_CONFIG)
              	// Above line gives a null pointer exception since EFFETE_STEM_CONFIG hasn't been initialized yet
                .withFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.RED_MUSHROOM_NETHER)
                .withFeature(GenerationStage.Decoration.VEGETAL_DECORATION, Features.NETHER_SPROUTS)
                .withFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Features.ORE_GOLD_NETHER)
                .withFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Features.ORE_QUARTZ_NETHER)
                .withStructure(StructureFeatures.BASTION_REMNANT)
                .withStructure(StructureFeatures.NETHER_FOSSIL)
                .withStructure(StructureFeatures.RUINED_PORTAL_NETHER)
                .withSurfaceBuilder(ModConfiguredSurfaceBuilders.EFFETE_SURFACE_BUILDER)
                .build();

            MobSpawnInfo mobspawn = new MobSpawnInfo.Builder()
                .withSpawner(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.CAT, 4, 2, 4))
                .copy();


            BiomeAmbience ambience = new BiomeAmbience.Builder()
                .withGrassColor(0xDA67C1)
                .setFogColor(0xEEEEEE)
                .setWaterColor(0xCF21B8)
                .setWaterFogColor(0xCF78C5)
                .withSkyColor(0xE83452)
                .withFoliageColor(0xCA57C1)
                .build();

            return new Biome.Builder()
                .category(Biome.Category.NETHER)
                .withTemperatureModifier(Biome.TemperatureModifier.NONE)
                .withGenerationSettings(genset)
                .withMobSpawnSettings(mobspawn)
                .depth(0.09f)
                .scale(0.2f)
                .downfall(0.1f)
                .precipitation(Biome.RainType.NONE)
                .temperature(1.1f)
                .setEffects(ambience)
                .build();
        }
    }

}

 

Feature (gets initialized in Common setup):

@Mod.EventBusSubscriber(modid = Main.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ModFeatures {

    public static ConfiguredFeature<?, ?> EFFETE_STEM_CONFIG;

    @SubscribeEvent
    public static void setup(FMLCommonSetupEvent e) {
        EFFETE_STEM_CONFIG = register("effete_stem_feature",
            Feature.RANDOM_PATCH
                .withConfiguration(
                    (new BlockClusterFeatureConfig.Builder(
                        new SimpleBlockStateProvider(ModBlocks.EFFETE_STEM.get().getDefaultState()),
                        new EffeteColumnBlockPlacer(1, 2)
                    )).tries(3).ySpread(0).func_227317_b_().build()
                ).withPlacement(
                    Placement.COUNT_MULTILAYER.configure(new FeatureSpreadConfig(5)).square()
                )
        );
    }

    private static <FC extends IFeatureConfig> ConfiguredFeature<FC, ?> register(String key, ConfiguredFeature<FC, ?> configuredFeature) {
        return Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, key, configuredFeature);
    }
}

 

Link to comment
Share on other sites

You should register your features inside their apposite registry event. Also, there is another version of the BiomeGenerationSettings.Builder#withFeature method that takes in a Supplier<ConfiguredFeature<?, ?>>. You can look here to see an example on registering custom biomes with their custom features: https://github.com/Beethoven92/BetterEndForge/blob/master/src/main/java/mod/beethoven92/betterendforge/BetterEnd.java

  • Thanks 1

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello, I am experiencing the following error once an hour and sometimes two hours, does anyone know what might cause the crash? Is it a mod that is causing it or is there a mod that can fix that? Server Forge version: 1.20.1 Forge: net.minecraftforge:47.2.20   JVM Flags: 24 total; -Xms128M -Xmx16384M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 Mods: - fightorflight-forge-0.5.3.jar - BadMobs-1.20.1-19.0.2.jar - netherportalfix-forge-1.20-13.0.1.jar - NoChatReports-FORGE-1.20.1-v2.2.2.jar - architectury-9.1.13-forge.jar - accelerated-decay-forge-3.0.1+mc1.20.1.jar - ferritecore-6.0.1-forge.jar - balm-forge-1.20.1-7.2.1.jar - Terralith_1.20.4_v2.4.11.jar - memoryleakfix-forge-1.17+-1.1.5.jar - cloth-config-forge-11.1.106.jar - kffmod-4.10.0.jar - Cobblemon-forge-1.4.1+1.20.1.jar Error: https://pastebin.com/XKNM1Ak5 Stacktrace: https://pastebin.com/GESmmB4s  
    • Merging Minecraft modpacks is simpler than it sounds. Just think of it as combining ingredients from two recipes into one. If you're not sure how to start, there's a handy tutorial on YouTube titled "How to combine mods in Curseforge Minecraft" that breaks it down step by step. It's like following a cooking show but for Minecraft mods. And if you need more help, the Reddit's r/feedthebeast are like the community kitchen where everyone shares their cooking tips.
    • String Name: 1 wanderlite_matrix Class Name: class net.minecraft.world.item.ItemStack Mod Name: Clockwork: Create x Valkyrien Skies Registry Name: vs_clockwork:wanderlite_matrix Display Name: Wanderlite Matrix Yes    
    • Tried panorama_screens and some other mod, but it still gives me the same error : https://pastebin.com/CG2hUbcY What is the problem exactly ? Is there a problem with the model of one of the items of Clockwork ?
    • Been having this crash report on a pack I'm running with some friends. No idea what's causing it, was able to replicate this crash by making a new modpack with nothing but mekanism in it https://pastebin.com/RNQLVEP4 Mekanism definitely isn't the problem I've just identified it as having items that create this rendering error below is a further crash report, same error just not mekanism  https://pastebin.com/D05EQW5U Any help would be greatly appreciated
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.