From 6b20a142a108b11c138a4a568088630e1a51bb09 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Sep 2020 18:00:47 +0300 Subject: [PATCH] WIP: add ore generation --- src/main/java/ru/betterend/BetterEnd.java | 2 +- .../ru/betterend/mixin/common/BiomeMixin.java | 42 +++++++++++++++++++ .../common/DefaultBiomeCreatorMixin.java | 4 ++ .../mixin/common/GenerationSettingsMixin.java | 36 ++++++++++++++++ .../ru/betterend/recipe/AlloyingRecipes.java | 1 + .../ru/betterend/recipe/CraftingRecipes.java | 1 + .../ru/betterend/registry/BiomeRegistry.java | 1 + .../betterend/registry/BlockTagRegistry.java | 2 + .../betterend/registry/FeatureRegistry.java | 2 +- .../ru/betterend/registry/ItemRegistry.java | 1 + .../surface/DoubleBlockSurfaceBuilder.java | 1 + .../resources/betterend.mixins.common.json | 2 + 12 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/BiomeMixin.java create mode 100644 src/main/java/ru/betterend/mixin/common/GenerationSettingsMixin.java diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index 3c8bead2..823e2318 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -29,9 +29,9 @@ public class BetterEnd implements ModInitializer { FeatureRegistry.register(); BiomeRegistry.register(); BetterEndBiomeSource.register(); + BlockTagRegistry.register(); CraftingRecipes.register(); AlloyingRecipes.register(); - BlockTagRegistry.register(); } public static Identifier getResId(String path) { diff --git a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java new file mode 100644 index 00000000..7c64d400 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java @@ -0,0 +1,42 @@ +package ru.betterend.mixin.common; + +import java.util.List; +import java.util.function.Supplier; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.ChunkRegion; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.ChunkRandom; +import net.minecraft.world.gen.StructureAccessor; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import ru.betterend.registry.FeatureRegistry; + +@Mixin(Biome.class) +public abstract class BiomeMixin { + + @Shadow + private Biome.Category category; + + @Shadow + private GenerationSettings generationSettings; + + @Inject(method = "generateFeatureStep", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/biome/GenerationSettings;getFeatures()Ljava/util/List;", shift = Shift.AFTER), locals = LocalCapture.CAPTURE_FAILHARD) + public void generateFeatureStep(StructureAccessor structureAccessor, ChunkGenerator chunkGenerator, ChunkRegion region, long populationSeed, ChunkRandom random, BlockPos pos, CallbackInfo cinfo, List>>> list) { + if (category.equals(Biome.Category.THEEND)) { + int index = FeatureRegistry.ENDER_ORE.getFeatureStep().ordinal(); + list.get(index).add(() -> { + return FeatureRegistry.ENDER_ORE.getFeatureConfigured(); + }); + } + } +} diff --git a/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java b/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java index b8eb8797..6cca4a96 100644 --- a/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/DefaultBiomeCreatorMixin.java @@ -8,6 +8,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.DefaultBiomeCreator; import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.GenerationStep; + +import ru.betterend.BetterEnd; +import ru.betterend.registry.FeatureRegistry; @Mixin(DefaultBiomeCreator.class) public abstract class DefaultBiomeCreatorMixin { diff --git a/src/main/java/ru/betterend/mixin/common/GenerationSettingsMixin.java b/src/main/java/ru/betterend/mixin/common/GenerationSettingsMixin.java new file mode 100644 index 00000000..1e56a41a --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/GenerationSettingsMixin.java @@ -0,0 +1,36 @@ +package ru.betterend.mixin.common; + +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.google.common.collect.Lists; + +import net.minecraft.world.biome.GenerationSettings; +import net.minecraft.world.gen.GenerationStep; +import net.minecraft.world.gen.carver.ConfiguredCarver; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.ConfiguredStructureFeature; +import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilder; + +@Mixin(GenerationSettings.class) +public abstract class GenerationSettingsMixin { + + @Shadow + private List>>> features; + + @Inject(method = "", at = @At("TAIL")) + void init(Supplier> surfaceBuilder, Map>>> carvers, List>>> features, List>> structureFeatures, CallbackInfo cinfo) { + List>>> mutableFeatures = Lists.newArrayList(); + this.features.forEach(supplierList -> { + mutableFeatures.add(Lists.newArrayList(supplierList)); + }); + this.features = mutableFeatures; + } +} diff --git a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java index fe832d48..c5a201cf 100644 --- a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java +++ b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java @@ -2,6 +2,7 @@ package ru.betterend.recipe; import net.minecraft.block.Blocks; import net.minecraft.item.Items; + import ru.betterend.registry.ItemRegistry; public class AlloyingRecipes { diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index 18c4efe7..e2b36cf2 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -5,6 +5,7 @@ import net.minecraft.block.Blocks; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.util.registry.Registry; + import ru.betterend.registry.BlockRegistry; public class CraftingRecipes { diff --git a/src/main/java/ru/betterend/registry/BiomeRegistry.java b/src/main/java/ru/betterend/registry/BiomeRegistry.java index 7495aaf5..7d97a7e3 100644 --- a/src/main/java/ru/betterend/registry/BiomeRegistry.java +++ b/src/main/java/ru/betterend/registry/BiomeRegistry.java @@ -12,6 +12,7 @@ import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.Category; import net.minecraft.world.biome.BiomeKeys; + import ru.betterend.world.biome.BiomeFoggyMushroomland; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.generator.BiomePicker; diff --git a/src/main/java/ru/betterend/registry/BlockTagRegistry.java b/src/main/java/ru/betterend/registry/BlockTagRegistry.java index a82cac0e..5ec14e43 100644 --- a/src/main/java/ru/betterend/registry/BlockTagRegistry.java +++ b/src/main/java/ru/betterend/registry/BlockTagRegistry.java @@ -1,9 +1,11 @@ package ru.betterend.registry; import net.fabricmc.fabric.api.tag.TagRegistry; + import net.minecraft.block.Block; import net.minecraft.tag.Tag; import net.minecraft.tag.Tag.Identified; + import ru.betterend.BetterEnd; import ru.betterend.util.TagHelper; diff --git a/src/main/java/ru/betterend/registry/FeatureRegistry.java b/src/main/java/ru/betterend/registry/FeatureRegistry.java index 536b38ef..1698b52d 100644 --- a/src/main/java/ru/betterend/registry/FeatureRegistry.java +++ b/src/main/java/ru/betterend/registry/FeatureRegistry.java @@ -7,7 +7,7 @@ import ru.betterend.world.features.MossyGlowshroomFeature; public class FeatureRegistry { public static final EndFeature MOSSY_GLOWSHROOM = new EndFeature("mossy_glowshroom", new MossyGlowshroomFeature(), 1); public static final EndFeature END_LAKE = EndFeature.makeLakeFeature("end_lake", new EndLakeFeature(), 100); - public static final EndFeature ENDER_ORE = EndFeature.makeOreFeature("ender_ore", BlockRegistry.ENDER_ORE, 2, 3, 0, 4, 128); + public static final EndFeature ENDER_ORE = EndFeature.makeOreFeature("ender_ore", BlockRegistry.ENDER_ORE, 6, 3, 0, 4, 96); public static void register() {} } diff --git a/src/main/java/ru/betterend/registry/ItemRegistry.java b/src/main/java/ru/betterend/registry/ItemRegistry.java index 08101d5a..54830293 100644 --- a/src/main/java/ru/betterend/registry/ItemRegistry.java +++ b/src/main/java/ru/betterend/registry/ItemRegistry.java @@ -9,6 +9,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.Items; import net.minecraft.util.registry.Registry; + import ru.betterend.BetterEnd; public class ItemRegistry { diff --git a/src/main/java/ru/betterend/world/surface/DoubleBlockSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/DoubleBlockSurfaceBuilder.java index 7c728c2d..375a5be8 100644 --- a/src/main/java/ru/betterend/world/surface/DoubleBlockSurfaceBuilder.java +++ b/src/main/java/ru/betterend/world/surface/DoubleBlockSurfaceBuilder.java @@ -10,6 +10,7 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; import net.minecraft.world.gen.surfacebuilder.TernarySurfaceConfig; + import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.util.MHelper; diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 245f1613..c21ca9d1 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -10,6 +10,8 @@ "TagGroupLoaderMixin", "CraftingScreenHandlerMixin", "DefaultBiomeCreatorMixin", + "GenerationSettingsMixin", + "BiomeMixin", "TagAccessor" ], "injectors": {