Register Fabric biomes as actual modded biomes.

This commit is contained in:
dfsek
2020-12-16 01:07:04 -07:00
parent b12079694c
commit b955e3d9b9
2 changed files with 39 additions and 14 deletions
@@ -14,6 +14,7 @@ import com.dfsek.terra.api.transform.MapTransform;
import com.dfsek.terra.api.transform.NotNullValidator; import com.dfsek.terra.api.transform.NotNullValidator;
import com.dfsek.terra.api.transform.Transformer; import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.biome.UserDefinedBiome; import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.PluginConfig; import com.dfsek.terra.config.base.PluginConfig;
import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.fabric.inventory.FabricItemHandle; import com.dfsek.terra.fabric.inventory.FabricItemHandle;
@@ -26,6 +27,7 @@ import com.dfsek.terra.registry.ConfigRegistry;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.Blocks;
import net.minecraft.client.world.GeneratorType; import net.minecraft.client.world.GeneratorType;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.BuiltinRegistries;
@@ -42,6 +44,8 @@ import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.HugeMushroomFeature; import net.minecraft.world.gen.feature.HugeMushroomFeature;
import net.minecraft.world.gen.feature.TreeFeature; import net.minecraft.world.gen.feature.TreeFeature;
import net.minecraft.world.gen.feature.TreeFeatureConfig; import net.minecraft.world.gen.feature.TreeFeatureConfig;
import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder;
import net.minecraft.world.gen.surfacebuilder.TernarySurfaceConfig;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import java.io.File; import java.io.File;
@@ -158,26 +162,41 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> new FabricBiome(biomeFixer.translate((String) o))); .registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> new FabricBiome(biomeFixer.translate((String) o)));
} }
public static String createBiomeID(ConfigPack pack, UserDefinedBiome biome) {
return pack.getTemplate().getID().toLowerCase() + "/" + biome.getID().toLowerCase();
}
private Biome createBiome(UserDefinedBiome biome) { private Biome createBiome(UserDefinedBiome biome) {
SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder(); SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder();
DefaultBiomeFeatures.addFarmAnimals(spawnSettings); DefaultBiomeFeatures.addFarmAnimals(spawnSettings);
DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100); DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100);
Biome vanilla = ((FabricBiome) biome.getVanillaBiome()).getHandle();
GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); GenerationSettings.Builder generationSettings = new GenerationSettings.Builder();
generationSettings.surfaceBuilder(SurfaceBuilder.DEFAULT.withConfig(new TernarySurfaceConfig(Blocks.GRASS_BLOCK.getDefaultState(), Blocks.DIRT.getDefaultState(), Blocks.GRAVEL.getDefaultState()))); // It needs a surfacebuilder, even though we dont use it.
BiomeEffects.Builder effects = new BiomeEffects.Builder()
.waterColor(vanilla.getWaterColor())
.waterFogColor(vanilla.getWaterFogColor())
.fogColor(vanilla.getFogColor())
.skyColor(vanilla.getSkyColor())
.grassColorModifier(vanilla.getEffects().getGrassColorModifier());
if(vanilla.getEffects().getGrassColor().isPresent()) {
effects.grassColor(vanilla.getEffects().getGrassColor().get());
}
if(vanilla.getEffects().getFoliageColor().isPresent()) {
effects.foliageColor(vanilla.getEffects().getFoliageColor().get());
}
return (new Biome.Builder()) return (new Biome.Builder())
.precipitation(Biome.Precipitation.RAIN) .precipitation(vanilla.getPrecipitation())
.category(Biome.Category.NONE) .category(vanilla.getCategory())
.depth(0.125F) .depth(vanilla.getDepth())
.scale(0.05F) .scale(vanilla.getScale())
.temperature(0.8F) .temperature(0.8F)
.downfall(0.4F) .downfall(0.4F)
.effects((new BiomeEffects.Builder()) .effects(effects.build())
.waterColor(0x3f76e4)
.waterFogColor(0x050533)
.fogColor(0xc0d8ff)
.skyColor(0x77adff)
.build())
.spawnSettings(spawnSettings.build()) .spawnSettings(spawnSettings.build())
.generationSettings(generationSettings.build()) .generationSettings(generationSettings.build())
.build(); .build();
@@ -213,9 +232,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
plugin.load(this); plugin.load(this);
LangUtil.load("en_us", this); LangUtil.load("en_us", this);
logger.info("Initializing Terra..."); logger.info("Initializing Terra...");
registry.loadAll(this);
registry.loadAll(this);
registry.forEach(pack -> pack.getBiomeRegistry().forEach(biome -> Registry.register(BuiltinRegistries.BIOME, new Identifier("terra", createBiomeID(pack, biome)), createBiome(biome)))); // Register all Terra biomes.
/* /*
registry.forEach(config -> { registry.forEach(config -> {
String pack = config.getTemplate().getID().toLowerCase(); String pack = config.getTemplate().getID().toLowerCase();
@@ -1,11 +1,13 @@
package com.dfsek.terra.fabric.world; package com.dfsek.terra.fabric.world;
import com.dfsek.terra.api.gaea.generation.GenerationPhase; import com.dfsek.terra.api.gaea.generation.GenerationPhase;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid; import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryLookupCodec; import net.minecraft.util.registry.RegistryLookupCodec;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
@@ -23,12 +25,14 @@ public class TerraBiomeSource extends BiomeSource {
private final Registry<Biome> biomeRegistry; private final Registry<Biome> biomeRegistry;
private final long seed; private final long seed;
private final TerraBiomeGrid grid; private final TerraBiomeGrid grid;
private final ConfigPack pack;
public TerraBiomeSource(Registry<Biome> biomes, long seed) { public TerraBiomeSource(Registry<Biome> biomes, long seed) {
super(biomes.stream().collect(Collectors.toList())); super(biomes.stream().collect(Collectors.toList()));
this.biomeRegistry = biomes; this.biomeRegistry = biomes;
this.seed = seed; this.seed = seed;
this.grid = new TerraBiomeGrid.TerraBiomeGridBuilder(seed, TerraFabricPlugin.getInstance().getRegistry().get("DEFAULT"), TerraFabricPlugin.getInstance()).build(); this.grid = new TerraBiomeGrid.TerraBiomeGridBuilder(seed, TerraFabricPlugin.getInstance().getRegistry().get("DEFAULT"), TerraFabricPlugin.getInstance()).build();
this.pack = TerraFabricPlugin.getInstance().getRegistry().get("DEFAULT");
} }
@Override @Override
@@ -43,8 +47,8 @@ public class TerraBiomeSource extends BiomeSource {
@Override @Override
public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) { public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) {
FabricBiome biome = ((FabricBiome) grid.getBiome(biomeX * 4, biomeZ * 4, GenerationPhase.BASE).getVanillaBiome()); UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(biomeX * 4, biomeZ * 4, GenerationPhase.BASE);
return biomeRegistry.get(BuiltinRegistries.BIOME.getRawId(biome.getHandle())); return biomeRegistry.get(new Identifier("terra", TerraFabricPlugin.createBiomeID(pack, biome)));
} }