From 9999abf9458bbe5cfbedea07ee792035425e46ea Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Thu, 29 Apr 2021 01:08:57 +0300 Subject: [PATCH] Fixed caves crash with non-be biome source (issue #148) --- src/main/java/ru/betterend/registry/EndBiomes.java | 13 ++++++++++++- .../features/terrain/caves/EndCaveFeature.java | 3 ++- .../world/generator/BetterEndBiomeSource.java | 12 +++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index f4f38005..5b7ef6b6 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -112,7 +112,9 @@ public class EndBiomes { public static final EndCaveBiome EMPTY_AURORA_CAVE = registerCaveBiome(new EmptyAuroraCaveBiome()); public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); - public static void register() {} + public static void register() { + CAVE_BIOMES.rebuild(); + } public static void mutateRegistry(Registry biomeRegistry) { EndBiomes.biomeRegistry = biomeRegistry; @@ -407,6 +409,15 @@ public class EndBiomes { public static EndBiome getBiome(ResourceLocation biomeID) { return ID_MAP.getOrDefault(biomeID, END); } + + public static Biome getActualBiome(EndBiome biome) { + Biome actual = biome.getActualBiome(); + if (actual == null) { + biome.updateActualBiomes(biomeRegistry); + actual = biome.getActualBiome(); + } + return actual; + } public static List getModBiomes() { List result = Lists.newArrayList(); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 0afc7c87..90744cb0 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -117,7 +117,8 @@ public abstract class EndCaveFeature extends DefaultFeature { private void setBiome(WorldGenLevel world, BlockPos pos, EndCaveBiome biome) { IBiomeArray array = (IBiomeArray) world.getChunk(pos).getBiomes(); if (array != null) { - array.be_setBiome(biome.getActualBiome(), pos); + Biome bio = EndBiomes.getActualBiome(biome); + array.be_setBiome(bio, pos); } } diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index 6c85f2ab..ff86b727 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -89,12 +89,13 @@ public class BetterEndBiomeSource extends BiomeSource { mapVoid.clearCache(); } + EndBiome endBiome = null; if (GeneratorOptions.useNewGenerator()) { if (TerrainGenerator.isLand(biomeX, biomeZ)) { - return mapLand.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + endBiome = mapLand.getBiome(biomeX << 2, biomeZ << 2); } else { - return mapVoid.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + endBiome = mapVoid.getBiome(biomeX << 2, biomeZ << 2); } } else { @@ -104,9 +105,10 @@ public class BetterEndBiomeSource extends BiomeSource { return barrens; } - EndBiome endBiome = height < -10F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); - return endBiome.getActualBiome(); + endBiome = height < -10F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); } + + return EndBiomes.getActualBiome(endBiome); } public Biome getLandBiome(int biomeX, int biomeY, int biomeZ) { @@ -124,7 +126,7 @@ public class BetterEndBiomeSource extends BiomeSource { return this.centerBiome; } } - return mapLand.getBiome(biomeX << 2, biomeZ << 2).getActualBiome(); + return EndBiomes.getActualBiome(mapLand.getBiome(biomeX << 2, biomeZ << 2)); } @Override