diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index d1f4b4e6..1f52b721 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -51,8 +51,7 @@ public class BetterEnd implements ModInitializer { SmithingRecipes.register(); StructureRegistry.register(); - FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class) - .forEach(BetterEndPlugin::register); + FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register); } public static Identifier makeID(String path) { diff --git a/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java b/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java index 065cec04..50b27536 100644 --- a/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java @@ -13,7 +13,7 @@ import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.NoiseChunkGenerator; import ru.betterend.world.generator.BetterEndBiomeSource; -@Mixin(DimensionType.class) +@Mixin(value = DimensionType.class, priority = 1) public class DimensionTypeMixin { @Inject(method = "createEndGenerator", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java b/src/main/java/ru/betterend/util/FeaturesHelper.java similarity index 50% rename from src/main/java/ru/betterend/mixin/common/BiomeMixin.java rename to src/main/java/ru/betterend/util/FeaturesHelper.java index aa1b4a57..5afe1296 100644 --- a/src/main/java/ru/betterend/mixin/common/BiomeMixin.java +++ b/src/main/java/ru/betterend/util/FeaturesHelper.java @@ -1,61 +1,42 @@ -package ru.betterend.mixin.common; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -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 com.google.common.collect.Sets; - -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 net.minecraft.world.gen.feature.ConfiguredStructureFeature; -import ru.betterend.registry.FeatureRegistry; -import ru.betterend.registry.StructureRegistry; - -@Mixin(Biome.class) -public abstract class BiomeMixin { - private static final Set INJECTED = Sets.newHashSet(); - - @Shadow - private Biome.Category category; - - @Shadow - private GenerationSettings generationSettings; - - @Inject(method = "generateFeatureStep", at = @At("HEAD")) - public void generateFeatureStep(StructureAccessor structureAccessor, ChunkGenerator chunkGenerator, ChunkRegion region, long populationSeed, ChunkRandom random, BlockPos pos, CallbackInfo cinfo) { - Biome biome = (Biome) (Object) this; - if (!INJECTED.contains(biome)) { - if (category.equals(Biome.Category.THEEND)) { - GenerationSettingsAccessor accessor = (GenerationSettingsAccessor) generationSettings; - List>> structures = Lists.newArrayList(accessor.getStructures()); - List>>> preFeatures = accessor.getFeatures(); - List>>> features = new ArrayList>>>(preFeatures.size()); - preFeatures.forEach((list) -> { - features.add(Lists.newArrayList(list)); - }); - - FeatureRegistry.registerBiomeFeatures(biome, features); - StructureRegistry.registerBiomeStructures(biome, structures); - - accessor.setFeatures(features); - accessor.setStructures(structures); - } - INJECTED.add(biome); - } - } -} +package ru.betterend.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.function.Supplier; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import net.minecraft.util.registry.Registry; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.gen.feature.ConfiguredFeature; +import net.minecraft.world.gen.feature.ConfiguredStructureFeature; +import ru.betterend.mixin.common.GenerationSettingsAccessor; +import ru.betterend.registry.FeatureRegistry; +import ru.betterend.registry.StructureRegistry; + +public class FeaturesHelper { + private static final Set INJECTED = Sets.newHashSet(); + + public static void addFeatures(Registry biomeRegistry) { + biomeRegistry.forEach((biome) -> { + if (biome.getCategory() == Biome.Category.THEEND && !INJECTED.contains(biome)) { + GenerationSettingsAccessor accessor = (GenerationSettingsAccessor) biome.getGenerationSettings(); + List>> structures = Lists.newArrayList(accessor.getStructures()); + List>>> preFeatures = accessor.getFeatures(); + List>>> features = new ArrayList>>>(preFeatures.size()); + preFeatures.forEach((list) -> { + features.add(Lists.newArrayList(list)); + }); + + FeatureRegistry.registerBiomeFeatures(biome, features); + StructureRegistry.registerBiomeStructures(biome, structures); + + accessor.setFeatures(features); + accessor.setStructures(structures); + INJECTED.add(biome); + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index b47505c9..31794461 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -17,6 +17,8 @@ import net.minecraft.world.biome.source.TheEndBiomeSource; import net.minecraft.world.gen.ChunkRandom; import ru.betterend.BetterEnd; import ru.betterend.registry.BiomeRegistry; +import ru.betterend.registry.BlockTagRegistry; +import ru.betterend.util.FeaturesHelper; import ru.betterend.world.biome.EndBiome; public class BetterEndBiomeSource extends BiomeSource { @@ -48,6 +50,8 @@ public class BetterEndBiomeSource extends BiomeSource { this.noise = new SimplexNoiseSampler(chunkRandom); BiomeRegistry.mutateRegistry(biomeRegistry); + BlockTagRegistry.addTerrainTags(biomeRegistry); + FeaturesHelper.addFeatures(biomeRegistry); } private static List getBiomes(Registry biomeRegistry) { diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index a2f0b333..6d2ef94a 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -24,8 +24,7 @@ "LivingEntityMixin", "BoneMealItemMixin", "SlimeEntityMixin", - "BrewingAccessor", - "BiomeMixin" + "BrewingAccessor" ], "injectors": { "defaultRequire": 1