[Feature] More flexible/extensible End-Biome Placement

This commit is contained in:
Frank 2022-07-08 00:12:39 +02:00
parent c695e0af5e
commit 3f3454e634
2 changed files with 63 additions and 7 deletions

View file

@ -1,5 +1,6 @@
package org.betterx.betterend; 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.api.v2.levelgen.biomes.BiomeAPI;
import org.betterx.bclib.util.Logger; import org.betterx.bclib.util.Logger;
import org.betterx.betterend.api.BetterEndPlugin; import org.betterx.betterend.api.BetterEndPlugin;
@ -11,8 +12,8 @@ import org.betterx.betterend.recipe.*;
import org.betterx.betterend.registry.*; import org.betterx.betterend.registry.*;
import org.betterx.betterend.util.BonemealPlants; import org.betterx.betterend.util.BonemealPlants;
import org.betterx.betterend.util.LootTableUtil; 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.GeneratorOptions;
import org.betterx.betterend.world.generator.TerrainGenerator;
import org.betterx.worlds.together.world.WorldConfig; import org.betterx.worlds.together.world.WorldConfig;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -59,12 +60,7 @@ public class BetterEnd implements ModInitializer {
Configs.saveConfigs(); Configs.saveConfigs();
if (GeneratorOptions.useNewGenerator()) { if (GeneratorOptions.useNewGenerator()) {
org.betterx.bclib.api.v2.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock()); BiomeDecider.registerDecider(makeID("end_land"), new EndLandBiomeDecider());
org.betterx.bclib.api.v2.generator.GeneratorOptions.setEndLandFunction((pos, height) -> TerrainGenerator.isLand(
pos.x,
pos.y,
height
));
} }
BiomeAPI.registerEndBiomeModification((biomeID, biome) -> { BiomeAPI.registerEndBiomeModification((biomeID, biome) -> {

View file

@ -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<Biome> 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;
}
}