diff --git a/src/main/java/ru/bclib/mixin/client/IStructureFeatures.java b/src/main/java/ru/bclib/mixin/client/IStructureFeatures.java new file mode 100644 index 00000000..85e92535 --- /dev/null +++ b/src/main/java/ru/bclib/mixin/client/IStructureFeatures.java @@ -0,0 +1,12 @@ +package ru.bclib.mixin.client; + +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public interface IStructureFeatures { + public void bclib_registerStructure(Consumer, ResourceKey>> callback); +} diff --git a/src/main/java/ru/bclib/mixin/client/StructureFeaturesMixin.java b/src/main/java/ru/bclib/mixin/client/StructureFeaturesMixin.java new file mode 100644 index 00000000..b6d1064a --- /dev/null +++ b/src/main/java/ru/bclib/mixin/client/StructureFeaturesMixin.java @@ -0,0 +1,29 @@ +package ru.bclib.mixin.client; + +import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.LinkedList; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +@Mixin(StructureFeatures.class) +public abstract class StructureFeaturesMixin implements IStructureFeatures{ + @Inject(method="registerStructures", at=@At("TAIL")) + static void bclib_registerStructures(BiConsumer, ResourceKey> biConsumer, CallbackInfo ci){ + bclib_callbacks.forEach(consumer -> consumer.accept(biConsumer)); + bclib_callbacks.clear(); + } + + private static List, ResourceKey>> > bclib_callbacks = new LinkedList<>(); + public void bclib_registerStructure(Consumer, ResourceKey>> callback){ + bclib_callbacks.add(callback); + } +} diff --git a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java index 2b3f7faf..cbd7ac45 100644 --- a/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java +++ b/src/main/java/ru/bclib/world/biomes/BCLBiomeDef.java @@ -2,8 +2,11 @@ package ru.bclib.world.biomes; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.data.BuiltinRegistries; +import net.minecraft.data.worldgen.StructureFeatures; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.Music; import net.minecraft.sounds.Musics; @@ -31,7 +34,9 @@ import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import net.minecraft.world.level.levelgen.surfacebuilders.ConfiguredSurfaceBuilder; import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilder; import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; +import net.minecraft.resources.ResourceKey; import ru.bclib.config.IdConfig; +import ru.bclib.mixin.client.IStructureFeatures; import ru.bclib.util.ColorUtil; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.structures.BCLStructureFeature; @@ -44,7 +49,8 @@ public class BCLBiomeDef { public static final int DEF_FOLIAGE_OVERWORLD = ColorUtil.color(110, 143, 64); public static final int DEF_FOLIAGE_NETHER = ColorUtil.color(117, 10, 10); public static final int DEF_FOLIAGE_END = ColorUtil.color(197, 210, 112); - + + private final IStructureFeatures structureFeatures = (IStructureFeatures)new StructureFeatures(); private final List> structures = Lists.newArrayList(); private final List features = Lists.newArrayList(); private final List carvers = Lists.newArrayList(); @@ -340,7 +346,7 @@ public class BCLBiomeDef { if (particleConfig != null) effects.ambientParticle(particleConfig); effects.backgroundMusic(music != null ? new Music(music, 600, 2400, true) : Musics.END); - return new Biome.BiomeBuilder().precipitation(precipitation) + Biome biome = new Biome.BiomeBuilder().precipitation(precipitation) .biomeCategory(category) //.depth(depth) //TODO: No longer available in 1.18 //.scale(0.2F) @@ -350,6 +356,17 @@ public class BCLBiomeDef { .mobSpawnSettings(spawnSettings.build()) .generationSettings(generationSettings.build()) .build(); + + structureFeatures.bclib_registerStructure(biConsumer -> { + ResourceKey biomeKey = ResourceKey.create(Registry.BIOME_REGISTRY, BuiltinRegistries.BIOME.getKey(biome)); + System.out.println("Biome:" + biomeKey); + structures.forEach((structure) -> { + biConsumer.accept(structure, biomeKey); + }); + + }); + + return biome; } private static final class SpawnInfo {