BiomePicker mixin
This commit is contained in:
parent
46c6e9b936
commit
3bc88af019
6 changed files with 62 additions and 43 deletions
10
src/main/java/ru/betterend/interfaces/IBiomeList.java
Normal file
10
src/main/java/ru/betterend/interfaces/IBiomeList.java
Normal 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();
|
||||||
|
}
|
|
@ -1,5 +0,0 @@
|
||||||
package ru.betterend.mixin.common;
|
|
||||||
|
|
||||||
public interface WeightedBiomePickerAccessor {
|
|
||||||
|
|
||||||
}
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue