2019-01-14 23:17:22 +00:00
|
|
|
/*******************************************************************************
|
|
|
|
* Copyright 2014-2019, the Biomes O' Plenty Team
|
|
|
|
*
|
|
|
|
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
|
|
|
|
*
|
|
|
|
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
|
|
|
|
******************************************************************************/
|
|
|
|
package biomesoplenty.common.biome;
|
|
|
|
|
|
|
|
import biomesoplenty.api.enums.BOPClimates;
|
2020-09-19 09:10:20 +00:00
|
|
|
import biomesoplenty.core.BiomesOPlenty;
|
2020-09-07 02:10:07 +00:00
|
|
|
import net.minecraft.util.RegistryKey;
|
2020-09-19 09:10:20 +00:00
|
|
|
import net.minecraft.util.ResourceLocation;
|
2020-08-25 11:51:25 +00:00
|
|
|
import net.minecraft.util.math.MathHelper;
|
2020-09-19 09:10:20 +00:00
|
|
|
import net.minecraft.util.registry.DynamicRegistries;
|
|
|
|
import net.minecraft.util.registry.Registry;
|
|
|
|
import net.minecraft.util.registry.WorldGenRegistries;
|
2019-01-14 23:17:22 +00:00
|
|
|
import net.minecraft.world.biome.Biome;
|
2020-08-20 10:18:53 +00:00
|
|
|
import net.minecraft.world.biome.BiomeGenerationSettings;
|
2019-06-13 07:31:07 +00:00
|
|
|
import net.minecraft.world.biome.Biomes;
|
2020-08-20 10:18:53 +00:00
|
|
|
import net.minecraft.world.biome.MobSpawnInfo;
|
2020-09-19 09:10:20 +00:00
|
|
|
import net.minecraft.world.gen.GenerationStage;
|
|
|
|
import net.minecraft.world.gen.feature.ConfiguredFeature;
|
|
|
|
import net.minecraftforge.registries.ForgeRegistries;
|
2019-01-14 23:17:22 +00:00
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
2020-08-20 10:18:53 +00:00
|
|
|
public class BiomeTemplate
|
2019-01-14 23:17:22 +00:00
|
|
|
{
|
2020-09-07 02:10:07 +00:00
|
|
|
private Map<BOPClimates, Integer> weightMap = new HashMap<BOPClimates, Integer>();
|
|
|
|
private RegistryKey<Biome> beachBiome = Biomes.BEACH;
|
|
|
|
private RegistryKey<Biome> riverBiome = Biomes.RIVER;
|
2019-01-14 23:17:22 +00:00
|
|
|
|
2020-08-20 10:18:53 +00:00
|
|
|
protected void configureBiome(Biome.Builder builder) {}
|
2020-09-19 09:10:20 +00:00
|
|
|
protected void configureGeneration(BiomeGenerationSettingsRegistryBuilder builder) {}
|
2020-08-20 10:18:53 +00:00
|
|
|
protected void configureMobSpawns(MobSpawnInfo.Builder builder) {}
|
|
|
|
|
2020-09-07 02:10:07 +00:00
|
|
|
protected void configureDefaultMobSpawns(MobSpawnInfo.Builder builder)
|
|
|
|
{
|
|
|
|
builder.setPlayerCanSpawn();
|
|
|
|
}
|
|
|
|
|
2020-08-20 10:18:53 +00:00
|
|
|
public final Biome build()
|
|
|
|
{
|
|
|
|
Biome.Builder biomeBuilder = new Biome.Builder();
|
|
|
|
|
|
|
|
// Configure the biome generation
|
2020-09-19 09:10:20 +00:00
|
|
|
BiomeGenerationSettingsRegistryBuilder biomeGenBuilder = new BiomeGenerationSettingsRegistryBuilder();
|
2020-08-20 10:18:53 +00:00
|
|
|
this.configureGeneration(biomeGenBuilder);
|
|
|
|
biomeBuilder.generationSettings(biomeGenBuilder.build());
|
|
|
|
|
|
|
|
// Configure mob spawning
|
|
|
|
MobSpawnInfo.Builder mobSpawnBuilder = new MobSpawnInfo.Builder();
|
2020-09-07 02:10:07 +00:00
|
|
|
this.configureDefaultMobSpawns(mobSpawnBuilder);
|
2020-08-20 10:18:53 +00:00
|
|
|
this.configureMobSpawns(mobSpawnBuilder);
|
|
|
|
biomeBuilder.mobSpawnSettings(mobSpawnBuilder.build());
|
|
|
|
|
|
|
|
// Configure and build the biome
|
|
|
|
this.configureBiome(biomeBuilder);
|
|
|
|
return biomeBuilder.build();
|
|
|
|
}
|
|
|
|
|
2020-09-07 02:10:07 +00:00
|
|
|
public final BiomeMetadata buildMetadata()
|
2019-01-14 23:17:22 +00:00
|
|
|
{
|
2020-09-07 02:10:07 +00:00
|
|
|
return new BiomeMetadata(this.weightMap, this.beachBiome, this.riverBiome);
|
2019-01-14 23:17:22 +00:00
|
|
|
}
|
|
|
|
|
2020-09-07 02:10:07 +00:00
|
|
|
public void addWeight(BOPClimates climate, int weight)
|
2019-05-24 05:35:07 +00:00
|
|
|
{
|
2020-09-07 02:10:07 +00:00
|
|
|
this.weightMap.put(climate, weight);
|
2019-05-24 05:35:07 +00:00
|
|
|
}
|
|
|
|
|
2020-09-07 02:10:07 +00:00
|
|
|
public void setBeachBiome(RegistryKey<Biome> biome)
|
2019-01-14 23:17:22 +00:00
|
|
|
{
|
2020-09-07 02:10:07 +00:00
|
|
|
this.beachBiome = biome;
|
2019-01-14 23:17:22 +00:00
|
|
|
}
|
2020-02-14 00:01:09 +00:00
|
|
|
|
2020-09-07 02:10:07 +00:00
|
|
|
public void setRiverBiome(RegistryKey<Biome> biome)
|
2020-02-14 00:01:09 +00:00
|
|
|
{
|
2020-09-07 02:10:07 +00:00
|
|
|
this.riverBiome = biome;
|
2020-02-14 00:01:09 +00:00
|
|
|
}
|
2020-08-25 11:51:25 +00:00
|
|
|
|
|
|
|
public static int calculateSkyColor(float temperature)
|
|
|
|
{
|
|
|
|
float lvt_1_1_ = temperature / 3.0F;
|
|
|
|
lvt_1_1_ = MathHelper.clamp(lvt_1_1_, -1.0F, 1.0F);
|
|
|
|
return MathHelper.hsvToRgb(0.62222224F - lvt_1_1_ * 0.05F, 0.5F + lvt_1_1_ * 0.1F, 1.0F);
|
|
|
|
}
|
2020-09-19 09:10:20 +00:00
|
|
|
|
|
|
|
protected static class BiomeGenerationSettingsRegistryBuilder extends BiomeGenerationSettings.Builder
|
|
|
|
{
|
|
|
|
public BiomeGenerationSettings.Builder addFeature(GenerationStage.Decoration stage, ConfiguredFeature<?, ?> feature)
|
|
|
|
{
|
|
|
|
// As a temporary measure, register configured features as we go
|
|
|
|
// Thanks for continuing to fuck us over Mojang.
|
|
|
|
if (!WorldGenRegistries.CONFIGURED_FEATURE.getResourceKey(feature).isPresent())
|
|
|
|
{
|
|
|
|
Registry.register(WorldGenRegistries.CONFIGURED_FEATURE, new ResourceLocation(BiomesOPlenty.MOD_ID, "" + feature.hashCode()), feature);
|
|
|
|
}
|
|
|
|
|
|
|
|
return super.addFeature(stage, feature);
|
|
|
|
}
|
|
|
|
}
|
2019-01-14 23:17:22 +00:00
|
|
|
}
|