diff --git a/src/main/java/dev/micle/firefly_bush_backport/event/OnBiomeLoadingEventHandler.java b/src/main/java/dev/micle/firefly_bush_backport/event/OnBiomeLoadingEventHandler.java new file mode 100644 index 0000000..50d9d7d --- /dev/null +++ b/src/main/java/dev/micle/firefly_bush_backport/event/OnBiomeLoadingEventHandler.java @@ -0,0 +1,19 @@ +package dev.micle.firefly_bush_backport.event; + +import dev.micle.firefly_bush_backport.worldgen.ModConfiguredFeatures; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.GenerationStage; +import net.minecraftforge.event.world.BiomeLoadingEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class OnBiomeLoadingEventHandler { + @SubscribeEvent + public void onBiomeLoadingEvent(final BiomeLoadingEvent event) { + if (event.getCategory() == Biome.Category.SWAMP) { + event.getGeneration().addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, ModConfiguredFeatures.PLACED_PATCH_FIREFLY_BUSH_SWAMP); + event.getGeneration().addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, ModConfiguredFeatures.PLACED_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP); + } else if (event.getCategory() != Biome.Category.THEEND && event.getCategory() != Biome.Category.NETHER) { + event.getGeneration().addFeature(GenerationStage.Decoration.VEGETAL_DECORATION, ModConfiguredFeatures.PLACED_PATCH_FIREFLY_BUSH_NEAR_WATER); + } + } +} diff --git a/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java b/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java index 1221a13..2f4de60 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java +++ b/src/main/java/dev/micle/firefly_bush_backport/proxy/Proxy.java @@ -1,6 +1,5 @@ package dev.micle.firefly_bush_backport.proxy; -import dev.micle.firefly_bush_backport.FireflyBushBackport; import dev.micle.firefly_bush_backport.block.ModBlocks; import dev.micle.firefly_bush_backport.config.Config; import dev.micle.firefly_bush_backport.event.OnWandererTradesEventHandler; @@ -9,6 +8,7 @@ import dev.micle.firefly_bush_backport.item.ModItems; import dev.micle.firefly_bush_backport.particle.FireflyParticle; import dev.micle.firefly_bush_backport.particle.ModParticles; import dev.micle.firefly_bush_backport.sound.ModSounds; +import dev.micle.firefly_bush_backport.event.OnBiomeLoadingEventHandler; import net.minecraft.block.ComposterBlock; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.RenderType; @@ -53,6 +53,7 @@ public class Proxy implements IProxy { // Register event handlers MinecraftForge.EVENT_BUS.register(new OnWandererTradesEventHandler()); + MinecraftForge.EVENT_BUS.register(new OnBiomeLoadingEventHandler()); } private static void setup(FMLCommonSetupEvent event) { diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java deleted file mode 100644 index 49f640a..0000000 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModBiomeModifiers.java +++ /dev/null @@ -1,59 +0,0 @@ -package dev.micle.firefly_bush_backport.worldgen; - -import dev.micle.firefly_bush_backport.FireflyBushBackport; -import net.minecraft.core.HolderGetter; -import net.minecraft.core.HolderSet; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.worldgen.BootstapContext; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.BiomeTags; -import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.levelgen.GenerationStep; -import net.minecraft.world.level.levelgen.placement.PlacedFeature; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.world.BiomeModifier; -import net.minecraftforge.common.world.ForgeBiomeModifiers; -import net.minecraftforge.registries.ForgeRegistries; - -import java.util.Set; - -public class ModBiomeModifiers { - public static final ResourceKey ADD_PATCH_FIREFLY_BUSH_SWAMP = registerKey("add_patch_firefly_bush_swamp"); - public static final ResourceKey ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP = registerKey("add_patch_firefly_bush_near_water_swamp"); - public static final ResourceKey ADD_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("add_patch_firefly_bush_near_water"); - public static final ResourceKey REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("remove_patch_firefly_bush_near_water"); - - public static void bootstrap(BootstapContext context) { - HolderGetter placedFeatures = context.lookup(Registries.PLACED_FEATURE); - HolderGetter biomes = context.lookup(Registries.BIOME); - - context.register(ADD_PATCH_FIREFLY_BUSH_SWAMP, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( - biomes.getOrThrow(Tags.Biomes.IS_SWAMP), - HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY)), - GenerationStep.Decoration.VEGETAL_DECORATION - )); - - context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( - biomes.getOrThrow(Tags.Biomes.IS_SWAMP), - HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY)), - GenerationStep.Decoration.VEGETAL_DECORATION - )); - - context.register(ADD_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.AddFeaturesBiomeModifier( - biomes.getOrThrow(BiomeTags.IS_OVERWORLD), - HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY)), - GenerationStep.Decoration.VEGETAL_DECORATION - )); - - context.register(REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER, new ForgeBiomeModifiers.RemoveFeaturesBiomeModifier( - biomes.getOrThrow(Tags.Biomes.IS_SWAMP), - HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY)), - Set.of(GenerationStep.Decoration.VEGETAL_DECORATION) - )); - } - - private static ResourceKey registerKey(String name) { - return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)); - } -} diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java index 6433898..338aeab 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java +++ b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModConfiguredFeatures.java @@ -7,19 +7,37 @@ import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.WorldGenRegistries; import net.minecraft.world.gen.blockplacer.SimpleBlockPlacer; import net.minecraft.world.gen.blockstateprovider.SimpleBlockStateProvider; -import net.minecraft.world.gen.feature.BlockClusterFeatureConfig; -import net.minecraft.world.gen.feature.ConfiguredFeature; -import net.minecraft.world.gen.feature.Feature; -import net.minecraft.world.gen.feature.IFeatureConfig; +import net.minecraft.world.gen.feature.*; public class ModConfiguredFeatures { - public static final ConfiguredFeature PATCH_FIREFLY_BUSH_KEY = create("patch_firefly_bush", Feature.RANDOM_PATCH.configured( + public static final ConfiguredFeature CONFIGURED_PATCH_FIREFLY_BUSH = create("patch_firefly_bush", Feature.RANDOM_PATCH.configured( new BlockClusterFeatureConfig.Builder( new SimpleBlockStateProvider(ModBlocks.FIREFLY_BUSH.get().defaultBlockState()), new SimpleBlockPlacer() ).tries(20).xspread(4).zspread(4).yspread(3).build() )); - public static , CF extends ConfiguredFeature> CF create(String id, CF configuredFeature) { + public static final ConfiguredFeature CONFIGURED_PATCH_FIREFLY_BUSH_NEAR_WATER = create("patch_firefly_bush", Feature.RANDOM_PATCH.configured( + new BlockClusterFeatureConfig.Builder( + new SimpleBlockStateProvider(ModBlocks.FIREFLY_BUSH.get().defaultBlockState()), new SimpleBlockPlacer() + ).tries(20).xspread(4).zspread(4).yspread(3).needWater().build() + )); + + public static final ConfiguredFeature PLACED_PATCH_FIREFLY_BUSH_SWAMP = create("patch_firefly_bush_swamp", CONFIGURED_PATCH_FIREFLY_BUSH + .chance(8) + .decorated(Features.Placements.HEIGHTMAP_SQUARE) + ); + + public static final ConfiguredFeature PLACED_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP = create("patch_firefly_bush_near_water_swamp", CONFIGURED_PATCH_FIREFLY_BUSH_NEAR_WATER + .count(3) + .decorated(Features.Placements.HEIGHTMAP_SQUARE) + ); + + public static final ConfiguredFeature PLACED_PATCH_FIREFLY_BUSH_NEAR_WATER = create("patch_firefly_bush_near_water", CONFIGURED_PATCH_FIREFLY_BUSH_NEAR_WATER + .count(2) + .decorated(Features.Placements.TOP_SOLID_HEIGHTMAP_SQUARE) + ); + + private static , CF extends ConfiguredFeature> CF create(String id, CF configuredFeature) { Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(FireflyBushBackport.MOD_ID, id), configuredFeature); return configuredFeature; } diff --git a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java b/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java deleted file mode 100644 index c7a3094..0000000 --- a/src/main/java/dev/micle/firefly_bush_backport/worldgen/ModPlacedFeatures.java +++ /dev/null @@ -1,79 +0,0 @@ -package dev.micle.firefly_bush_backport.worldgen; - -import dev.micle.firefly_bush_backport.FireflyBushBackport; -import dev.micle.firefly_bush_backport.block.ModBlocks; -import net.minecraft.core.Holder; -import net.minecraft.core.HolderGetter; -import net.minecraft.core.Vec3i; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.worldgen.BootstapContext; -import net.minecraft.data.worldgen.placement.PlacementUtils; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.world.level.levelgen.blockpredicates.BlockPredicate; -import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; -import net.minecraft.world.level.levelgen.placement.*; -import net.minecraft.world.level.material.Fluids; - -import java.util.List; - -public class ModPlacedFeatures { - public static final ResourceKey PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_swamp"); - public static final ResourceKey PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_near_water_swamp"); - public static final ResourceKey PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY = registerKey("patch_firefly_bush_near_water"); - - public static void bootstrap(BootstapContext context) { - HolderGetter> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE); - - register(context, PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.PATCH_FIREFLY_BUSH_KEY), List.of( - RarityFilter.onAverageOnceEvery(8), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP, - BiomeFilter.biome() - )); - - register(context, PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.PATCH_FIREFLY_BUSH_KEY), List.of( - CountPlacement.of(3), - InSquarePlacement.spread(), - PlacementUtils.HEIGHTMAP, - BiomeFilter.biome(), - BlockPredicateFilter.forPredicate(BlockPredicate.allOf( - BlockPredicate.matchesBlocks(Blocks.AIR), - BlockPredicate.wouldSurvive(ModBlocks.FIREFLY_BUSH.get().defaultBlockState(), Vec3i.ZERO), - BlockPredicate.anyOf( - BlockPredicate.matchesFluids(new Vec3i(1, -1, 0), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(-1, -1, 0), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(0, -1, 1), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(0, -1, -1), List.of(Fluids.WATER, Fluids.FLOWING_WATER)) - ) - )) - )); - - register(context, PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY, configuredFeatures.getOrThrow(ModConfiguredFeatures.PATCH_FIREFLY_BUSH_KEY), List.of( - CountPlacement.of(2), - InSquarePlacement.spread(), - HeightmapPlacement.onHeightmap(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES), - BiomeFilter.biome(), - BlockPredicateFilter.forPredicate(BlockPredicate.allOf( - BlockPredicate.matchesBlocks(Blocks.AIR), - BlockPredicate.wouldSurvive(ModBlocks.FIREFLY_BUSH.get().defaultBlockState(), Vec3i.ZERO), - BlockPredicate.anyOf( - BlockPredicate.matchesFluids(new Vec3i(1, -1, 0), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(-1, -1, 0), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(0, -1, 1), List.of(Fluids.WATER, Fluids.FLOWING_WATER)), - BlockPredicate.matchesFluids(new Vec3i(0, -1, -1), List.of(Fluids.WATER, Fluids.FLOWING_WATER)) - ) - )) - )); - } - - private static ResourceKey registerKey(String name) { - return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name)); - } - - private static void register(BootstapContext context, ResourceKey key, Holder> configuration, List modifiers) { - context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers))); - } -}