Ported world generation features.
This commit is contained in:
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,5 @@
|
|||||||
package dev.micle.firefly_bush_backport.proxy;
|
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.block.ModBlocks;
|
||||||
import dev.micle.firefly_bush_backport.config.Config;
|
import dev.micle.firefly_bush_backport.config.Config;
|
||||||
import dev.micle.firefly_bush_backport.event.OnWandererTradesEventHandler;
|
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.FireflyParticle;
|
||||||
import dev.micle.firefly_bush_backport.particle.ModParticles;
|
import dev.micle.firefly_bush_backport.particle.ModParticles;
|
||||||
import dev.micle.firefly_bush_backport.sound.ModSounds;
|
import dev.micle.firefly_bush_backport.sound.ModSounds;
|
||||||
|
import dev.micle.firefly_bush_backport.event.OnBiomeLoadingEventHandler;
|
||||||
import net.minecraft.block.ComposterBlock;
|
import net.minecraft.block.ComposterBlock;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
@ -53,6 +53,7 @@ public class Proxy implements IProxy {
|
|||||||
|
|
||||||
// Register event handlers
|
// Register event handlers
|
||||||
MinecraftForge.EVENT_BUS.register(new OnWandererTradesEventHandler());
|
MinecraftForge.EVENT_BUS.register(new OnWandererTradesEventHandler());
|
||||||
|
MinecraftForge.EVENT_BUS.register(new OnBiomeLoadingEventHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setup(FMLCommonSetupEvent event) {
|
private static void setup(FMLCommonSetupEvent event) {
|
||||||
|
|||||||
@ -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<BiomeModifier> ADD_PATCH_FIREFLY_BUSH_SWAMP = registerKey("add_patch_firefly_bush_swamp");
|
|
||||||
public static final ResourceKey<BiomeModifier> ADD_PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP = registerKey("add_patch_firefly_bush_near_water_swamp");
|
|
||||||
public static final ResourceKey<BiomeModifier> ADD_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("add_patch_firefly_bush_near_water");
|
|
||||||
public static final ResourceKey<BiomeModifier> REMOVE_PATCH_FIREFLY_BUSH_NEAR_WATER = registerKey("remove_patch_firefly_bush_near_water");
|
|
||||||
|
|
||||||
public static void bootstrap(BootstapContext<BiomeModifier> context) {
|
|
||||||
HolderGetter<PlacedFeature> placedFeatures = context.lookup(Registries.PLACED_FEATURE);
|
|
||||||
HolderGetter<Biome> 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<BiomeModifier> registerKey(String name) {
|
|
||||||
return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -7,19 +7,37 @@ import net.minecraft.util.registry.Registry;
|
|||||||
import net.minecraft.util.registry.WorldGenRegistries;
|
import net.minecraft.util.registry.WorldGenRegistries;
|
||||||
import net.minecraft.world.gen.blockplacer.SimpleBlockPlacer;
|
import net.minecraft.world.gen.blockplacer.SimpleBlockPlacer;
|
||||||
import net.minecraft.world.gen.blockstateprovider.SimpleBlockStateProvider;
|
import net.minecraft.world.gen.blockstateprovider.SimpleBlockStateProvider;
|
||||||
import net.minecraft.world.gen.feature.BlockClusterFeatureConfig;
|
import net.minecraft.world.gen.feature.*;
|
||||||
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|
||||||
import net.minecraft.world.gen.feature.Feature;
|
|
||||||
import net.minecraft.world.gen.feature.IFeatureConfig;
|
|
||||||
|
|
||||||
public class ModConfiguredFeatures {
|
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 BlockClusterFeatureConfig.Builder(
|
||||||
new SimpleBlockStateProvider(ModBlocks.FIREFLY_BUSH.get().defaultBlockState()), new SimpleBlockPlacer()
|
new SimpleBlockStateProvider(ModBlocks.FIREFLY_BUSH.get().defaultBlockState()), new SimpleBlockPlacer()
|
||||||
).tries(20).xspread(4).zspread(4).yspread(3).build()
|
).tries(20).xspread(4).zspread(4).yspread(3).build()
|
||||||
));
|
));
|
||||||
|
|
||||||
public static <FC extends IFeatureConfig, F extends Feature<FC>, CF extends ConfiguredFeature<FC, F>> 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 <FC extends IFeatureConfig, F extends Feature<FC>, CF extends ConfiguredFeature<FC, F>> CF create(String id, CF configuredFeature) {
|
||||||
Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(FireflyBushBackport.MOD_ID, id), configuredFeature);
|
Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(FireflyBushBackport.MOD_ID, id), configuredFeature);
|
||||||
return configuredFeature;
|
return configuredFeature;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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<PlacedFeature> PATCH_FIREFLY_BUSH_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_swamp");
|
|
||||||
public static final ResourceKey<PlacedFeature> PATCH_FIREFLY_BUSH_NEAR_WATER_SWAMP_PLACED_KEY = registerKey("patch_firefly_bush_near_water_swamp");
|
|
||||||
public static final ResourceKey<PlacedFeature> PATCH_FIREFLY_BUSH_NEAR_WATER_PLACED_KEY = registerKey("patch_firefly_bush_near_water");
|
|
||||||
|
|
||||||
public static void bootstrap(BootstapContext<PlacedFeature> context) {
|
|
||||||
HolderGetter<ConfiguredFeature<?, ?>> 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<PlacedFeature> registerKey(String name) {
|
|
||||||
return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(FireflyBushBackport.MOD_ID, name));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void register(BootstapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> configuration, List<PlacementModifier> modifiers) {
|
|
||||||
context.register(key, new PlacedFeature(configuration, List.copyOf(modifiers)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user