From 0a0f3232ea46e192f43957e81e23c950bd680ab5 Mon Sep 17 00:00:00 2001 From: Max Becker Date: Tue, 26 Jan 2021 03:36:46 +0100 Subject: [PATCH] Add modded biomes to overworld biome list (#7360) --- .../OverworldBiomeProvider.java.patch | 11 ++++++++ .../minecraftforge/common/BiomeManager.java | 26 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 patches/minecraft/net/minecraft/world/biome/provider/OverworldBiomeProvider.java.patch diff --git a/patches/minecraft/net/minecraft/world/biome/provider/OverworldBiomeProvider.java.patch b/patches/minecraft/net/minecraft/world/biome/provider/OverworldBiomeProvider.java.patch new file mode 100644 index 0000000000..f2a93701d6 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/biome/provider/OverworldBiomeProvider.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/biome/provider/OverworldBiomeProvider.java ++++ b/net/minecraft/world/biome/provider/OverworldBiomeProvider.java +@@ -35,7 +35,7 @@ + private final Registry field_242636_k; + + public OverworldBiomeProvider(long p_i241958_1_, boolean p_i241958_3_, boolean p_i241958_4_, Registry p_i241958_5_) { +- super(field_226847_e_.stream().map((p_242638_1_) -> { ++ super(java.util.stream.Stream.concat(field_226847_e_.stream(), net.minecraftforge.common.BiomeManager.getAdditionalOverworldBiomes().stream()).map((p_242638_1_) -> { + return () -> { + return p_i241958_5_.func_243576_d(p_242638_1_); + }; diff --git a/src/main/java/net/minecraftforge/common/BiomeManager.java b/src/main/java/net/minecraftforge/common/BiomeManager.java index 78884fb799..cde6250f3d 100644 --- a/src/main/java/net/minecraftforge/common/BiomeManager.java +++ b/src/main/java/net/minecraftforge/common/BiomeManager.java @@ -34,6 +34,7 @@ import net.minecraft.world.biome.Biome; public class BiomeManager { private static TrackedList[] biomes = setupBiomes(); + private static final List> additionalOverworldBiomes = new ArrayList<>(); private static TrackedList[] setupBiomes() { @@ -97,11 +98,26 @@ public class BiomeManager } */ + /** + * Add biomes that you add to the overworld without using {@link BiomeManager#addBiome(BiomeType, BiomeEntry)} + */ + public static void addAdditionalOverworldBiomes(RegistryKey biome){ + if (!"minecraft".equals(biome.func_240901_a_().getNamespace()) && additionalOverworldBiomes.stream().noneMatch(entry -> entry.func_240901_a_().equals(biome.func_240901_a_()))) + { + additionalOverworldBiomes.add(biome); + } + } + public static boolean addBiome(BiomeType type, BiomeEntry entry) { int idx = type.ordinal(); List list = idx > biomes.length ? null : biomes[idx]; - return list == null ? false : list.add(entry); + if(list != null) + { + additionalOverworldBiomes.add(entry.key); + return list.add(entry); + } + return false; } public static boolean removeBiome(BiomeType type, BiomeEntry entry) @@ -111,6 +127,14 @@ public class BiomeManager return list == null ? false : list.remove(entry); } + /** + * @return list of biomes that might be generated in the overworld in addition to the vanilla biomes + */ + public static List> getAdditionalOverworldBiomes() + { + return additionalOverworldBiomes; + } + public static ImmutableList getBiomes(BiomeType type) { int idx = type.ordinal();