From b89afced36698a2904729940437f548e969aeb06 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 25 Sep 2020 12:17:32 +0300 Subject: [PATCH] Mutable registry --- .../java/ru/betterend/registry/BiomeRegistry.java | 13 +++++++++++++ .../ru/betterend/world/biome/BiomeDefinition.java | 10 ++++++++++ .../java/ru/betterend/world/biome/EndBiome.java | 4 ++++ .../ru/betterend/world/generator/BiomePicker.java | 15 +++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/src/main/java/ru/betterend/registry/BiomeRegistry.java b/src/main/java/ru/betterend/registry/BiomeRegistry.java index c6262729..7495aaf5 100644 --- a/src/main/java/ru/betterend/registry/BiomeRegistry.java +++ b/src/main/java/ru/betterend/registry/BiomeRegistry.java @@ -10,6 +10,7 @@ import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; 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; @@ -33,10 +34,22 @@ public class BiomeRegistry { public static void mutateRegistry(Registry biomeRegistry) { BiomeRegistry.MUTABLE.clear(); + LAND_BIOMES.clearMutables(); + for (EndBiome biome : BiomeRegistry.LAND_BIOMES.getBiomes()) BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome); for (EndBiome biome : BiomeRegistry.VOID_BIOMES.getBiomes()) BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome); + + biomeRegistry.forEach((biome) -> { + if (biome.getCategory() == Category.THEEND) { + if (!MUTABLE.containsKey(biome) && !biomeRegistry.getId(biome).getNamespace().equals("minecraft")) { + EndBiome endBiome = new EndBiome(biome); + LAND_BIOMES.addBiomeMutable(endBiome); + KEYS.put(endBiome, biomeRegistry.getKey(biome).get()); + } + } + }); } public static EndBiome registerBiome(RegistryKey key, BiomeType type, boolean addToGen) { diff --git a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java index d96fe445..05730723 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeDefinition.java +++ b/src/main/java/ru/betterend/world/biome/BiomeDefinition.java @@ -51,6 +51,7 @@ public class BiomeDefinition { private float fogDensity = 1F; private final Identifier id; + private float genChance = 1F; private ConfiguredSurfaceBuilder surface; @@ -86,6 +87,11 @@ public class BiomeDefinition { this.particleConfig = config; return this; } + + public BiomeDefinition setGenChance(float genChance) { + this.genChance = genChance; + return this; + } public BiomeDefinition addMobSpawn(EntityType type, int weight, int minGroupSize, int maxGroupSize) { Identifier eID = Registry.ENTITY_TYPE.getId(type); @@ -223,4 +229,8 @@ public class BiomeDefinition { public float getFodDensity() { return fogDensity; } + + public float getGenChance() { + return genChance; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index b017d6f7..5e157d5f 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -21,6 +21,7 @@ public class EndBiome { protected EndBiome biomeParent; protected float maxSubBiomeChance = 1; + protected final float genChanceUnmutable; protected float genChance = 1; private final float fogDensity; @@ -29,12 +30,14 @@ public class EndBiome { biome = definition.build(); mcID = definition.getID(); fogDensity = definition.getFodDensity(); + genChanceUnmutable = definition.getGenChance(); } public EndBiome(Biome biome) { this.biome = biome; mcID = BuiltinRegistries.BIOME.getId(biome); fogDensity = 1; + genChanceUnmutable = 1; } public void genSurfColumn(WorldAccess world, BlockPos pos, Random random) { @@ -106,6 +109,7 @@ public class EndBiome { } public float setGenChance(float chance) { + genChance = genChanceUnmutable; genChance += chance; return genChance; } diff --git a/src/main/java/ru/betterend/world/generator/BiomePicker.java b/src/main/java/ru/betterend/world/generator/BiomePicker.java index 94df9729..aae59d67 100644 --- a/src/main/java/ru/betterend/world/generator/BiomePicker.java +++ b/src/main/java/ru/betterend/world/generator/BiomePicker.java @@ -10,11 +10,26 @@ import ru.betterend.world.biome.EndBiome; public class BiomePicker { private final List biomes = Lists.newArrayList(); + private float maxChanceUnmutable = 0; private float maxChance = 0; + private int biomeCount = 0; public void addBiome(EndBiome biome) { biomes.add(biome); maxChance = biome.setGenChance(maxChance); + biomeCount ++; + maxChanceUnmutable = maxChance; + } + + public void addBiomeMutable(EndBiome biome) { + biomes.add(biome); + maxChance = biome.setGenChance(maxChance); + } + + public void clearMutables() { + maxChance = maxChanceUnmutable; + for (int i = biomes.size() - 1; i >= biomeCount; i--) + biomes.remove(i); } public EndBiome getBiome(Random random) {