From 6b20a142a108b11c138a4a568088630e1a51bb09 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Sep 2020 18:00:47 +0300 Subject: [PATCH 1/4] 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": { From d599312b4030a5f892cd28fb0fe77571f4df640d Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Sep 2020 21:31:17 +0300 Subject: [PATCH 2/4] Update BiomeMixin.java --- .../ru/betterend/mixin/common/BiomeMixin.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java index 7c64d400..82cf739f 100644 --- a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java @@ -6,10 +6,8 @@ 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; @@ -30,13 +28,21 @@ public abstract class BiomeMixin { @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(); - }); + private boolean injected = false; + + @Inject(method = "generateFeatureStep", at = @At("HEAD")) + public void generateFeatureStep(StructureAccessor structureAccessor, ChunkGenerator chunkGenerator, ChunkRegion region, long populationSeed, ChunkRandom random, BlockPos pos, CallbackInfo cinfo) { + if (!injected) { + if (category.equals(Biome.Category.THEEND)) { + int index = FeatureRegistry.ENDER_ORE.getFeatureStep().ordinal(); + List>>> features = this.generationSettings.getFeatures(); + if (features.size() > index) { + features.get(index).add(() -> { + return FeatureRegistry.ENDER_ORE.getFeatureConfigured(); + }); + } + } + this.injected = true; } } } From 2fda09036e15680e257e3d814551a66bad39f7cc Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Sep 2020 22:09:08 +0300 Subject: [PATCH 3/4] Done. Ender Ore generation. --- .../java/ru/betterend/mixin/common/BiomeMixin.java | 13 ++++++++++--- .../world/biome/BiomeFoggyMushroomland.java | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java index 82cf739f..b8e05e02 100644 --- a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java @@ -9,6 +9,8 @@ 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.util.math.BlockPos; import net.minecraft.world.ChunkRegion; import net.minecraft.world.biome.Biome; @@ -24,10 +26,8 @@ public abstract class BiomeMixin { @Shadow private Biome.Category category; - @Shadow private GenerationSettings generationSettings; - private boolean injected = false; @Inject(method = "generateFeatureStep", at = @At("HEAD")) @@ -36,10 +36,17 @@ public abstract class BiomeMixin { if (category.equals(Biome.Category.THEEND)) { int index = FeatureRegistry.ENDER_ORE.getFeatureStep().ordinal(); List>>> features = this.generationSettings.getFeatures(); - if (features.size() > index) { + int size = features.size(); + if (size > index) { features.get(index).add(() -> { return FeatureRegistry.ENDER_ORE.getFeatureConfigured(); }); + } else { + List>> feature = Lists.newArrayList(); + feature.add(() -> { + return FeatureRegistry.ENDER_ORE.getFeatureConfigured(); + }); + features.add(feature); } } this.injected = true; diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java index b34cbbf4..8f241211 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -11,8 +11,8 @@ public class BiomeFoggyMushroomland extends EndBiome { .setWaterColor(119, 227, 250) .setWaterFogColor(119, 227, 250) .setSurface(BlockRegistry.END_MOSS, BlockRegistry.END_MYCELIUM) + .addFeature(FeatureRegistry.ENDER_ORE) .addFeature(FeatureRegistry.END_LAKE) - .addFeature(FeatureRegistry.MOSSY_GLOWSHROOM) - .addFeature(FeatureRegistry.ENDER_ORE)); + .addFeature(FeatureRegistry.MOSSY_GLOWSHROOM)); } } From 3b891e1c824b7048eb4d68da483feb1ea7f39339 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Sep 2020 22:10:07 +0300 Subject: [PATCH 4/4] Update BiomeMixin.java --- src/main/java/ru/betterend/mixin/common/BiomeMixin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java index b8e05e02..5900b1de 100644 --- a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/BiomeMixin.java @@ -36,8 +36,7 @@ public abstract class BiomeMixin { if (category.equals(Biome.Category.THEEND)) { int index = FeatureRegistry.ENDER_ORE.getFeatureStep().ordinal(); List>>> features = this.generationSettings.getFeatures(); - int size = features.size(); - if (size > index) { + if (features.size() > index) { features.get(index).add(() -> { return FeatureRegistry.ENDER_ORE.getFeatureConfigured(); });