From 3f3454e6344430102f7f5063cbef6263fe48d1bb Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 8 Jul 2022 00:12:39 +0200 Subject: [PATCH] [Feature] More flexible/extensible End-Biome Placement --- .../java/org/betterx/betterend/BetterEnd.java | 10 +--- .../world/generator/EndLandBiomeDecider.java | 60 +++++++++++++++++++ 2 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/betterx/betterend/world/generator/EndLandBiomeDecider.java diff --git a/src/main/java/org/betterx/betterend/BetterEnd.java b/src/main/java/org/betterx/betterend/BetterEnd.java index bc2e5ccb..15757a59 100644 --- a/src/main/java/org/betterx/betterend/BetterEnd.java +++ b/src/main/java/org/betterx/betterend/BetterEnd.java @@ -1,5 +1,6 @@ package org.betterx.betterend; +import org.betterx.bclib.api.v2.generator.BiomeDecider; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; import org.betterx.bclib.util.Logger; import org.betterx.betterend.api.BetterEndPlugin; @@ -11,8 +12,8 @@ import org.betterx.betterend.recipe.*; import org.betterx.betterend.registry.*; import org.betterx.betterend.util.BonemealPlants; import org.betterx.betterend.util.LootTableUtil; +import org.betterx.betterend.world.generator.EndLandBiomeDecider; import org.betterx.betterend.world.generator.GeneratorOptions; -import org.betterx.betterend.world.generator.TerrainGenerator; import org.betterx.worlds.together.world.WorldConfig; import net.minecraft.resources.ResourceLocation; @@ -59,12 +60,7 @@ public class BetterEnd implements ModInitializer { Configs.saveConfigs(); if (GeneratorOptions.useNewGenerator()) { - org.betterx.bclib.api.v2.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock()); - org.betterx.bclib.api.v2.generator.GeneratorOptions.setEndLandFunction((pos, height) -> TerrainGenerator.isLand( - pos.x, - pos.y, - height - )); + BiomeDecider.registerDecider(makeID("end_land"), new EndLandBiomeDecider()); } BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { diff --git a/src/main/java/org/betterx/betterend/world/generator/EndLandBiomeDecider.java b/src/main/java/org/betterx/betterend/world/generator/EndLandBiomeDecider.java new file mode 100644 index 00000000..b7889332 --- /dev/null +++ b/src/main/java/org/betterx/betterend/world/generator/EndLandBiomeDecider.java @@ -0,0 +1,60 @@ +package org.betterx.betterend.world.generator; + +import org.betterx.bclib.api.v2.generator.BCLBiomeSource; +import org.betterx.bclib.api.v2.generator.BCLibEndBiomeSource; +import org.betterx.bclib.api.v2.generator.BiomeDecider; +import org.betterx.bclib.api.v2.generator.config.BCLEndBiomeSourceConfig; +import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI; + +import net.minecraft.core.Registry; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.BiomeSource; + +public class EndLandBiomeDecider extends BiomeDecider { + public EndLandBiomeDecider() { + this(null); + } + + protected EndLandBiomeDecider(Registry biomeRegistry) { + super(biomeRegistry, (biome) -> false); + } + + @Override + public boolean canProvideFor(BiomeSource source) { + if (source instanceof BCLibEndBiomeSource endSource) { + return endSource.getTogetherConfig().generatorVersion == BCLEndBiomeSourceConfig.EndBiomeGeneratorType.PAULEVS; + } + return false; + } + + @Override + public BiomeDecider createInstance(BCLBiomeSource biomeSource) { + return new EndLandBiomeDecider(biomeSource.getBiomeRegistry()); + } + + @Override + public BiomeAPI.BiomeType suggestType( + BiomeAPI.BiomeType originalType, + BiomeAPI.BiomeType suggestedType, + double density, + int maxHeight, + int blockX, + int blockY, + int blockZ, + int quarterX, + int quarterY, + int quarterZ + ) { + if (!TerrainGenerator.isLand(quarterX, quarterZ, maxHeight)) { + return suggestedType.equals(BiomeAPI.BiomeType.END_CENTER) + ? BiomeAPI.BiomeType.END_BARRENS + : BiomeAPI.BiomeType.END_VOID; + } + return suggestedType; + } + + @Override + public boolean canProvideBiome(BiomeAPI.BiomeType suggestedType) { + return false; + } +}