Biome Providers
BiomesAPI provides a few built-in implementations of Bukkit’s BiomeProvider.
These can be used in conjunction with Bukkit’s WorldCreator to create worlds with custom biomes
from the ground-up rather than replacing biomes in existing worlds with the BiomeSetter.
Basic Biome Provider
Section titled “Basic Biome Provider”of(CustomBiome): New instance of a BasicBiomeProvider with a single biome.
Example Usage
Section titled “Example Usage”import me.outspending.biomesapi.biome.CustomBiome;
import me.outspending.biomesapi.providers.BasicBiomeProvider;
import me.outspending.biomesapi.registry.ResourceKey;
import org.bukkit.WorldCreator;
import org.bukkit.plugin.java.JavaPlugin;
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
CustomBiome customBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "biome"))
.waterColor("#DB00FD")
.foliageColor("#2F46FF")
.skyColor("#D13A71")
.register();
BasicBiomeProvider provider = BasicBiomeProvider.of(customBiome)
new WorldCreator("example")
// Other worldgen settings...
.biomeProvider(provider)
.createWorld();
}
} Replacement Biome Provider
Section titled “Replacement Biome Provider”Replaces vanilla biomes with custom biomes on a one-to-one basis. At each position it asks the world’s vanilla provider what biome would normally generate, and swaps in your custom biome if a mapping exists; unmapped biomes pass through unchanged.
builder(): NewBuilderfor mapping vanilla biomes to custom replacements.Builder#replace(Biome, CustomBiome): Map a vanilla biome to the custom biome that should replace it.Builder#build(): Build the configuredReplacementBiomeProvider.
Example Usage
Section titled “Example Usage”import me.outspending.biomesapi.biome.CustomBiome;
import me.outspending.biomesapi.providers.ReplacementBiomeProvider;
import me.outspending.biomesapi.registry.ResourceKey;
import org.bukkit.WorldCreator;
import org.bukkit.block.Biome;
import org.bukkit.plugin.java.JavaPlugin;
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
CustomBiome customBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "biome"))
.waterColor("#DB00FD")
.foliageColor("#2F46FF")
.skyColor("#D13A71")
.register();
ReplacementBiomeProvider provider = ReplacementBiomeProvider.builder()
.replace(Biome.PLAINS, customBiome)
.build();
new WorldCreator("example")
// Other worldgen settings...
.biomeProvider(provider)
.createWorld();
}
} Steps Biome Provider
Section titled “Steps Biome Provider”Determines the biome at each position by running an ordered series of steps. Each step inspects the position and either produces a biome or returns null to defer to the next step. The first step to produce a biome wins; if no step matches, the fallback is used, and if no fallback is set, generation defers to the world’s vanilla provider.
Steps are called concurrently during chunk generation, so each BiomeStep must be pure and free of side effects.
builder(): NewBuilderfor assembling an ordered list of steps.Builder#step(BiomeStep, CustomBiome…): Full-control step. The lambda returns a biome to place ornullto defer. Declare every biome the lambda can return viaproducesso the provider can advertise it fromgetBiomes(...).Builder#step(CustomBiome, BiomeCondition): Convenience step for a simple position test; the biome is auto-registered as produced.Builder#fallback(CustomBiome): Biome to use when no step produces one.Builder#build(): Build the configuredStepsBiomeProvider.
Example Usage
Section titled “Example Usage”import me.outspending.biomesapi.biome.CustomBiome;
import me.outspending.biomesapi.providers.StepsBiomeProvider;
import me.outspending.biomesapi.registry.ResourceKey;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.plugin.java.JavaPlugin;
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
CustomBiome volcanoBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "volcano"))
.skyColor("#D13A71")
.register();
CustomBiome ashBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "ash"))
.fogColor("#3A3A3A")
.ambientParticle(WrappedParticleTypes.ASH, 0.0001f)
.register();
CustomBiome oceanBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "ocean"))
.waterColor("#1E90FF")
.waterFogColor("#00BFFF")
.register();
CustomBiome plainsBiome = CustomBiome.builder()
.resourceKey(ResourceKey.of("test", "plains"))
.foliageColor("#2F46FF")
.grassColor("#2F46FF")
.register();
StepsBiomeProvider provider = StepsBiomeProvider.builder()
.step((worldInfo, x, y, z) -> {
if (y > 200) return volcanoBiome;
if (worldInfo.getEnvironment() == World.Environment.NETHER) return ashBiome;
return null; // defer to next step
}, volcanoBiome, ashBiome)
.step(oceanBiome, (worldInfo, x, y, z) -> y < 40) // convenience form, auto-registered
.fallback(plainsBiome)
.build();
new WorldCreator("example")
// Other worldgen settings...
.biomeProvider(provider)
.createWorld();
}
}