BiomePicker mixin

This commit is contained in:
paulevsGitch 2021-03-18 03:36:55 +03:00
parent 46c6e9b936
commit 3bc88af019
6 changed files with 62 additions and 43 deletions

View file

@ -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<RegistryKey<Biome>> getBiomes();
}

View file

@ -1,5 +0,0 @@
package ru.betterend.mixin.common;
public interface WeightedBiomePickerAccessor {
}

View file

@ -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<RegistryKey<Biome>> biomes = Lists.newArrayList();
@Inject(method = "addBiome", at = @At("TAIL"))
private void be_addBiome(final RegistryKey<Biome> biome, final double weight, CallbackInfo info) {
if (be_isCorrectPicker((WeightedBiomePicker) (Object) this)) {
biomes.add(biome);
}
}
@Override
public List<RegistryKey<Biome>> 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);
}
}

View file

@ -1,6 +1,7 @@
package ru.betterend.registry; package ru.betterend.registry;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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;
import net.minecraft.world.biome.Biome.Category; import net.minecraft.world.biome.Biome.Category;
import net.minecraft.world.biome.BiomeKeys; import net.minecraft.world.biome.BiomeKeys;
import net.minecraft.world.biome.layer.util.LayerRandomnessSource;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.config.Configs; import ru.betterend.config.Configs;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.interfaces.IBiomeList;
import ru.betterend.util.JsonFactory; import ru.betterend.util.JsonFactory;
import ru.betterend.world.biome.air.BiomeIceStarfield; import ru.betterend.world.biome.air.BiomeIceStarfield;
import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome; 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.ShadowForestBiome;
import ru.betterend.world.biome.land.SulphurSpringsBiome; import ru.betterend.world.biome.land.SulphurSpringsBiome;
import ru.betterend.world.biome.land.UmbrellaJungleBiome; import ru.betterend.world.biome.land.UmbrellaJungleBiome;
import ru.betterend.world.generator.BELayerRandomSource;
import ru.betterend.world.generator.BiomePicker; import ru.betterend.world.generator.BiomePicker;
import ru.betterend.world.generator.BiomeType; import ru.betterend.world.generator.BiomeType;
@ -181,21 +181,11 @@ public class EndBiomes {
} }
private static void loadFabricAPIBiomes() { private static void loadFabricAPIBiomes() {
WeightedBiomePicker picker = InternalBiomeData.getEndBiomesMap().get(BiomeKeys.SMALL_END_ISLANDS); List<RegistryKey<Biome>> biomes = Lists.newArrayList();
LayerRandomnessSource random = new BELayerRandomSource(); biomes.addAll(getBiomes(InternalBiomeData.getEndBiomesMap().get(BiomeKeys.SMALL_END_ISLANDS)));
if (picker != null) { biomes.addAll(getBiomes(InternalBiomeData.getEndBarrensMap().get(BiomeKeys.END_BARRENS)));
for (int i = 0; i < 1000; i++) { biomes.forEach((key) -> FABRIC_VOID.add(key.getValue()));
RegistryKey<Biome> 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<Biome> key = picker.pickRandom(random);
FABRIC_VOID.add(key.getValue());
}
}
if (BetterEnd.isDevEnvironment()) { if (BetterEnd.isDevEnvironment()) {
System.out.println("=================================="); System.out.println("==================================");
System.out.println("Added void biomes from Fabric API:"); System.out.println("Added void biomes from Fabric API:");
@ -206,6 +196,11 @@ public class EndBiomes {
} }
} }
private static List<RegistryKey<Biome>> getBiomes(WeightedBiomePicker picker) {
IBiomeList biomeList = (IBiomeList) (Object) picker;
return biomeList == null ? Collections.emptyList() : biomeList.getBiomes();
}
private static JsonObject loadJsonConfig(String namespace) { private static JsonObject loadJsonConfig(String namespace) {
InputStream inputstream = EndBiomes.class.getResourceAsStream("/data/" + namespace + "/end_biome_properties.json"); InputStream inputstream = EndBiomes.class.getResourceAsStream("/data/" + namespace + "/end_biome_properties.json");
if (inputstream != null) { if (inputstream != null) {

View file

@ -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;
}
}

View file

@ -9,6 +9,7 @@
"CraftingScreenHandlerMixin", "CraftingScreenHandlerMixin",
"GenerationSettingsAccessor", "GenerationSettingsAccessor",
"NoiseChunkGeneratorMixin", "NoiseChunkGeneratorMixin",
"WeightedBiomePickerMixin",
"AnvilScreenHandlerMixin", "AnvilScreenHandlerMixin",
"ChorusPlantFeatureMixin", "ChorusPlantFeatureMixin",
"ServerPlayerEntityMixin", "ServerPlayerEntityMixin",
@ -19,8 +20,8 @@
"RecipeManagerAccessor", "RecipeManagerAccessor",
"EndSpikeFeatureMixin", "EndSpikeFeatureMixin",
"MinecraftServerMixin", "MinecraftServerMixin",
"TagGroupLoaderMixin",
"EndermanEntityMixin", "EndermanEntityMixin",
"TagGroupLoaderMixin",
"AbstractBlockMixin", "AbstractBlockMixin",
"DimensionTypeMixin", "DimensionTypeMixin",
"PlayerManagerMixin", "PlayerManagerMixin",