From 3bc88af0199d437696a16e2ff871d72d3e10d2ab Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 18 Mar 2021 03:36:55 +0300 Subject: [PATCH] BiomePicker mixin --- .../ru/betterend/interfaces/IBiomeList.java | 10 +++++ .../common/WeightedBiomePickerAccessor.java | 5 --- .../common/WeightedBiomePickerMixin.java | 38 +++++++++++++++++++ .../java/ru/betterend/registry/EndBiomes.java | 29 ++++++-------- .../world/generator/BELayerRandomSource.java | 20 ---------- .../resources/betterend.mixins.common.json | 3 +- 6 files changed, 62 insertions(+), 43 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/IBiomeList.java delete mode 100644 src/main/java/ru/betterend/mixin/common/WeightedBiomePickerAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java delete mode 100644 src/main/java/ru/betterend/world/generator/BELayerRandomSource.java diff --git a/src/main/java/ru/betterend/interfaces/IBiomeList.java b/src/main/java/ru/betterend/interfaces/IBiomeList.java new file mode 100644 index 00000000..4db7b758 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/IBiomeList.java @@ -0,0 +1,10 @@ +package ru.betterend.interfaces; + +import java.util.List; + +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.biome.Biome; + +public interface IBiomeList { + public List> getBiomes(); +} diff --git a/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerAccessor.java b/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerAccessor.java deleted file mode 100644 index f4fc4937..00000000 --- a/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerAccessor.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.betterend.mixin.common; - -public interface WeightedBiomePickerAccessor { - -} diff --git a/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java b/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java new file mode 100644 index 00000000..ecfe1b63 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java @@ -0,0 +1,38 @@ +package ru.betterend.mixin.common; + +import java.util.List; + +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 com.google.common.collect.Lists; + +import net.fabricmc.fabric.impl.biome.InternalBiomeData; +import net.fabricmc.fabric.impl.biome.WeightedBiomePicker; +import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.biome.BiomeKeys; +import ru.betterend.interfaces.IBiomeList; + +@Mixin(value = WeightedBiomePicker.class, remap = false) +public class WeightedBiomePickerMixin implements IBiomeList { + private List> biomes = Lists.newArrayList(); + + @Inject(method = "addBiome", at = @At("TAIL")) + private void be_addBiome(final RegistryKey biome, final double weight, CallbackInfo info) { + if (be_isCorrectPicker((WeightedBiomePicker) (Object) this)) { + biomes.add(biome); + } + } + + @Override + public List> getBiomes() { + return biomes; + } + + private boolean be_isCorrectPicker(WeightedBiomePicker picker) { + return picker == InternalBiomeData.getEndBiomesMap().get(BiomeKeys.SMALL_END_ISLANDS) || picker == InternalBiomeData.getEndBarrensMap().get(BiomeKeys.END_BARRENS); + } +} diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 04f177d8..3def7d36 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -1,6 +1,7 @@ package ru.betterend.registry; import java.io.InputStream; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -26,10 +27,10 @@ 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 net.minecraft.world.biome.layer.util.LayerRandomnessSource; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; import ru.betterend.integration.Integrations; +import ru.betterend.interfaces.IBiomeList; import ru.betterend.util.JsonFactory; import ru.betterend.world.biome.air.BiomeIceStarfield; import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome; @@ -55,7 +56,6 @@ import ru.betterend.world.biome.land.PaintedMountainsBiome; import ru.betterend.world.biome.land.ShadowForestBiome; import ru.betterend.world.biome.land.SulphurSpringsBiome; import ru.betterend.world.biome.land.UmbrellaJungleBiome; -import ru.betterend.world.generator.BELayerRandomSource; import ru.betterend.world.generator.BiomePicker; import ru.betterend.world.generator.BiomeType; @@ -181,21 +181,11 @@ public class EndBiomes { } private static void loadFabricAPIBiomes() { - WeightedBiomePicker picker = InternalBiomeData.getEndBiomesMap().get(BiomeKeys.SMALL_END_ISLANDS); - LayerRandomnessSource random = new BELayerRandomSource(); - if (picker != null) { - for (int i = 0; i < 1000; i++) { - RegistryKey key = picker.pickRandom(random); - FABRIC_VOID.add(key.getValue()); - } - } - picker = InternalBiomeData.getEndBiomesMap().get(BiomeKeys.END_BARRENS); - if (picker != null) { - for (int i = 0; i < 1000; i++) { - RegistryKey key = picker.pickRandom(random); - FABRIC_VOID.add(key.getValue()); - } - } + List> biomes = Lists.newArrayList(); + biomes.addAll(getBiomes(InternalBiomeData.getEndBiomesMap().get(BiomeKeys.SMALL_END_ISLANDS))); + biomes.addAll(getBiomes(InternalBiomeData.getEndBarrensMap().get(BiomeKeys.END_BARRENS))); + biomes.forEach((key) -> FABRIC_VOID.add(key.getValue())); + if (BetterEnd.isDevEnvironment()) { System.out.println("=================================="); System.out.println("Added void biomes from Fabric API:"); @@ -206,6 +196,11 @@ public class EndBiomes { } } + private static List> getBiomes(WeightedBiomePicker picker) { + IBiomeList biomeList = (IBiomeList) (Object) picker; + return biomeList == null ? Collections.emptyList() : biomeList.getBiomes(); + } + private static JsonObject loadJsonConfig(String namespace) { InputStream inputstream = EndBiomes.class.getResourceAsStream("/data/" + namespace + "/end_biome_properties.json"); if (inputstream != null) { diff --git a/src/main/java/ru/betterend/world/generator/BELayerRandomSource.java b/src/main/java/ru/betterend/world/generator/BELayerRandomSource.java deleted file mode 100644 index fada1a7b..00000000 --- a/src/main/java/ru/betterend/world/generator/BELayerRandomSource.java +++ /dev/null @@ -1,20 +0,0 @@ -package ru.betterend.world.generator; - -import java.util.Random; - -import net.minecraft.util.math.noise.PerlinNoiseSampler; -import net.minecraft.world.biome.layer.util.LayerRandomnessSource; - -public class BELayerRandomSource implements LayerRandomnessSource { - private Random random = new Random(0); - - @Override - public int nextInt(int bound) { - return random.nextInt(bound); - } - - @Override - public PerlinNoiseSampler getNoiseSampler() { - return null; - } -} diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 82e04940..4e2de0ee 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -9,6 +9,7 @@ "CraftingScreenHandlerMixin", "GenerationSettingsAccessor", "NoiseChunkGeneratorMixin", + "WeightedBiomePickerMixin", "AnvilScreenHandlerMixin", "ChorusPlantFeatureMixin", "ServerPlayerEntityMixin", @@ -19,8 +20,8 @@ "RecipeManagerAccessor", "EndSpikeFeatureMixin", "MinecraftServerMixin", - "TagGroupLoaderMixin", "EndermanEntityMixin", + "TagGroupLoaderMixin", "AbstractBlockMixin", "DimensionTypeMixin", "PlayerManagerMixin",