Merge pull request #57 from PolyhedralDev/biome

Biome Stuff
This commit is contained in:
dfsek
2021-02-07 15:40:45 -07:00
committed by GitHub
358 changed files with 5714 additions and 3985 deletions

View File

@@ -1,10 +1,7 @@
package com.dfsek.terra.fabric;
import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.GenericLoaders;
import com.dfsek.terra.api.language.Language;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.core.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.platform.handle.ItemHandle;
@@ -13,10 +10,13 @@ import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.transform.MapTransform;
import com.dfsek.terra.api.transform.NotNullValidator;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.PluginConfig;
import com.dfsek.terra.biome.TerraBiome;
import com.dfsek.terra.config.GenericLoaders;
import com.dfsek.terra.config.PluginConfig;
import com.dfsek.terra.config.lang.LangUtil;
import com.dfsek.terra.config.lang.Language;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.debug.DebugLogger;
import com.dfsek.terra.fabric.inventory.FabricItemHandle;
import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor;
import com.dfsek.terra.fabric.world.FabricBiome;
@@ -25,6 +25,7 @@ import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.features.PopulatorFeature;
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
import com.dfsek.terra.registry.ConfigRegistry;
import com.dfsek.terra.world.TerraWorld;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
@@ -56,6 +57,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
@@ -75,6 +77,7 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
private final GenericLoaders genericLoaders = new GenericLoaders(this);
private final Logger logger = Logger.getLogger("Terra");
private final DebugLogger debugLogger = new DebugLogger(logger);
private final ItemHandle itemHandle = new FabricItemHandle();
private final WorldHandle worldHandle = new FabricWorldHandle();
private final ConfigRegistry registry = new ConfigRegistry();
@@ -180,6 +183,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
return "Fabric";
}
@Override
public DebugLogger getDebugLogger() {
return debugLogger;
}
Transformer<String, Biome> biomeFixer = new Transformer.Builder<String, Biome>()
.addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse(id)), new NotNullValidator<>())
.addTransform(id -> BuiltinRegistries.BIOME.get(Identifier.tryParse("minecraft:" + id.toLowerCase())), new NotNullValidator<>()).build();
@@ -193,16 +201,16 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
.registerLoader(com.dfsek.terra.api.platform.world.Biome.class, (t, o, l) -> new FabricBiome(biomeFixer.translate((String) o)));
}
public static String createBiomeID(ConfigPack pack, UserDefinedBiome biome) {
public static String createBiomeID(ConfigPack pack, TerraBiome biome) {
return pack.getTemplate().getID().toLowerCase() + "/" + biome.getID().toLowerCase();
}
private Biome createBiome(UserDefinedBiome biome) {
private Biome createBiome(TerraBiome biome) {
SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder();
DefaultBiomeFeatures.addFarmAnimals(spawnSettings);
DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100);
Biome vanilla = ((FabricBiome) biome.getVanillaBiome()).getHandle();
Biome vanilla = ((FabricBiome) new ArrayList<>(biome.getVanillaBiomes().getContents()).get(0)).getHandle();
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.
@@ -250,8 +258,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
logger.setLevel(Level.INFO);
instance = this;
((FabricWorldHandle) worldHandle).setTreeTransformer(TREE_TRANSFORMER);
config = new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");
saveDefaultConfig();
plugin.load(this);

View File

@@ -2,7 +2,7 @@ package com.dfsek.terra.fabric.world;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess;
@@ -34,9 +34,4 @@ public class FabricTree implements Tree {
return MaterialSet.get(TerraFabricPlugin.getInstance().getWorldHandle().createMaterialData("minecraft:grass_block"),
TerraFabricPlugin.getInstance().getWorldHandle().createMaterialData("minecraft:podzol"));
}
@Override
public ConfiguredFeature<?, ?> getHandle() {
return delegate;
}
}

View File

@@ -3,10 +3,8 @@ package com.dfsek.terra.fabric.world;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.block.MaterialData;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.handle.WorldHandle;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.platform.world.entity.EntityType;
import com.dfsek.terra.api.transform.Transformer;
import com.dfsek.terra.fabric.world.block.FabricBlockData;
import com.dfsek.terra.fabric.world.block.FabricMaterialData;
import com.dfsek.terra.fabric.world.block.data.FabricMultipleFacing;
@@ -19,17 +17,10 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.block.BlockState;
import net.minecraft.command.argument.BlockArgumentParser;
import net.minecraft.state.property.Properties;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import java.util.Arrays;
public class FabricWorldHandle implements WorldHandle {
private Transformer<String, ConfiguredFeature<?, ?>> treeTransformer;
public void setTreeTransformer(Transformer<String, ConfiguredFeature<?, ?>> treeTransformer) {
this.treeTransformer = treeTransformer;
}
@Override
public void setBlockData(Block block, BlockData data, boolean physics) {
block.setBlockData(data, physics);
@@ -72,11 +63,6 @@ public class FabricWorldHandle implements WorldHandle {
return new FabricMaterialData(createBlockData(data).getHandle().getBlock());
}
@Override
public Tree getTree(String id) {
return new FabricTree(treeTransformer.translate(id));
}
@Override
public EntityType getEntity(String id) {
return null;

View File

@@ -1,9 +1,8 @@
package com.dfsek.terra.fabric.world;
import com.dfsek.terra.api.world.generation.GenerationPhase;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.biome.provider.BiomeProvider;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
@@ -28,14 +27,14 @@ public class TerraBiomeSource extends BiomeSource {
private final Registry<Biome> biomeRegistry;
private final long seed;
private final TerraBiomeGrid grid;
private final BiomeProvider grid;
private final ConfigPack pack;
public TerraBiomeSource(Registry<Biome> biomes, long seed, ConfigPack pack) {
super(biomes.stream().collect(Collectors.toList()));
this.biomeRegistry = biomes;
this.seed = seed;
this.grid = new TerraBiomeGrid.TerraBiomeGridBuilder(seed, pack, TerraFabricPlugin.getInstance()).build();
this.grid = pack.getTemplate().getProviderBuilder().build(seed);
this.pack = pack;
}
@@ -51,7 +50,7 @@ public class TerraBiomeSource extends BiomeSource {
@Override
public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) {
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(biomeX * 4, biomeZ * 4, GenerationPhase.BASE);
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(biomeX * 4, biomeZ * 4);
return biomeRegistry.get(new Identifier("terra", TerraFabricPlugin.createBiomeID(pack, biome)));
}

View File

@@ -27,7 +27,6 @@ public class PopulatorFeature extends Feature<DefaultFeatureConfig> {
FabricChunkGeneratorWrapper gen = (FabricChunkGeneratorWrapper) chunkGenerator;
FabricChunkWorldAccess chunk = new FabricChunkWorldAccess(world, pos.getX() >> 4, pos.getZ() >> 4);
FabricWorld world1 = new FabricWorld(world.toServerWorld(), new FabricChunkGenerator(chunkGenerator));
gen.getCavePopulator().populate(world1, chunk);
gen.getStructurePopulator().populate(new FabricSeededWorldAccess(world, world.getSeed(), chunkGenerator), chunk);
gen.getOrePopulator().populate(world1, chunk);
gen.getTreePopulator().populate(world1, chunk);

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.fabric.world.generator;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.fabric.world.block.FabricBlockData;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.chunk.Chunk;

View File

@@ -1,9 +1,9 @@
package com.dfsek.terra.fabric.world.generator;
import com.dfsek.terra.api.platform.generator.BlockPopulator;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.world.BiomeGrid;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.generator.BlockPopulator;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generation.TerraChunkGenerator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@@ -1,17 +1,16 @@
package com.dfsek.terra.fabric.world.generator;
import com.dfsek.terra.api.platform.generator.GeneratorWrapper;
import com.dfsek.terra.api.platform.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess;
import com.dfsek.terra.generation.MasterChunkGenerator;
import com.dfsek.terra.population.CavePopulator;
import com.dfsek.terra.population.FloraPopulator;
import com.dfsek.terra.population.OrePopulator;
import com.dfsek.terra.population.StructurePopulator;
import com.dfsek.terra.population.TreePopulator;
import com.dfsek.terra.world.generation.MasterChunkGenerator;
import com.dfsek.terra.world.population.FloraPopulator;
import com.dfsek.terra.world.population.OrePopulator;
import com.dfsek.terra.world.population.StructurePopulator;
import com.dfsek.terra.world.population.TreePopulator;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.block.BlockState;
@@ -46,7 +45,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
private final ConfigPack pack;
private final CavePopulator cavePopulator = new CavePopulator(TerraFabricPlugin.getInstance());
private final FloraPopulator floraPopulator = new FloraPopulator(TerraFabricPlugin.getInstance());
private final OrePopulator orePopulator = new OrePopulator(TerraFabricPlugin.getInstance());
private final TreePopulator treePopulator = new TreePopulator(TerraFabricPlugin.getInstance());
@@ -56,10 +54,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
return treePopulator;
}
public CavePopulator getCavePopulator() {
return cavePopulator;
}
public OrePopulator getOrePopulator() {
return orePopulator;
}

View File

@@ -2,12 +2,11 @@ package com.dfsek.terra.fabric.world.handles;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.entity.Entity;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.entity.Entity;
import com.dfsek.terra.api.platform.world.entity.EntityType;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk;
import net.minecraft.server.world.ServerWorld;
@@ -86,11 +85,6 @@ public class FabricWorld implements World {
return getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
@Override
public boolean generateTree(Location l, Tree vanillaTreeType) {
return false;
}
@Override
public Entity spawnEntity(Location location, EntityType entityType) {
return null;

View File

@@ -1,8 +1,12 @@
package com.dfsek.terra.fabric.world.handles.chunk;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.fabric.world.block.FabricBlockData;
import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.NotNull;
public class FabricChunk implements Chunk {
private final net.minecraft.world.chunk.Chunk chunk;
@@ -35,4 +39,14 @@ public class FabricChunk implements Chunk {
public net.minecraft.world.chunk.Chunk getHandle() {
return chunk;
}
@Override
public void setBlock(int x, int y, int z, @NotNull BlockData blockData) {
chunk.setBlockState(new BlockPos(x, y, z), ((FabricBlockData) blockData).getHandle(), false);
}
@Override
public @NotNull BlockData getBlockData(int x, int y, int z) {
return getBlock(x, y, z).getBlockData();
}
}

View File

@@ -1,12 +1,15 @@
package com.dfsek.terra.fabric.world.handles.chunk;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.block.FabricBlockData;
import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.WorldAccess;
import org.jetbrains.annotations.NotNull;
public class FabricChunkWorldAccess implements Chunk {
private final WorldAccess chunkRegion;
@@ -44,4 +47,14 @@ public class FabricChunkWorldAccess implements Chunk {
public WorldAccess getHandle() {
return chunkRegion;
}
@Override
public void setBlock(int x, int y, int z, @NotNull BlockData blockData) {
chunkRegion.setBlockState(new BlockPos(x + this.x, y, z + this.z), ((FabricBlockData) blockData).getHandle(), 0);
}
@Override
public @NotNull BlockData getBlockData(int x, int y, int z) {
return getBlock(x, y, z).getBlockData();
}
}

View File

@@ -2,12 +2,11 @@ package com.dfsek.terra.fabric.world.handles.world;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.entity.Entity;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.entity.Entity;
import com.dfsek.terra.api.platform.world.entity.EntityType;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import net.minecraft.util.math.BlockPos;
@@ -75,11 +74,6 @@ public class FabricSeededWorldAccess implements World {
return getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
@Override
public boolean generateTree(Location l, Tree vanillaTreeType) {
return false;
}
@Override
public Entity spawnEntity(Location location, EntityType entityType) {
return null;

View File

@@ -2,12 +2,11 @@ package com.dfsek.terra.fabric.world.handles.world;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.entity.Entity;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.entity.Entity;
import com.dfsek.terra.api.platform.world.entity.EntityType;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import net.minecraft.util.math.BlockPos;
@@ -76,11 +75,6 @@ public class FabricWorldAccess implements World {
return getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
@Override
public boolean generateTree(Location l, Tree vanillaTreeType) {
return false;
}
@Override
public Entity spawnEntity(Location location, EntityType entityType) {
return null;

View File

@@ -2,12 +2,11 @@ package com.dfsek.terra.fabric.world.handles.world;
import com.dfsek.terra.api.math.vector.Location;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.generator.ChunkGenerator;
import com.dfsek.terra.api.platform.entity.Entity;
import com.dfsek.terra.api.platform.entity.EntityType;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.platform.world.Tree;
import com.dfsek.terra.api.platform.world.World;
import com.dfsek.terra.api.platform.world.entity.Entity;
import com.dfsek.terra.api.platform.world.entity.EntityType;
import com.dfsek.terra.api.platform.world.generator.ChunkGenerator;
import com.dfsek.terra.fabric.world.block.FabricBlock;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import net.minecraft.util.math.BlockPos;
@@ -85,11 +84,6 @@ public class FabricWorldChunkRegion implements World {
return getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ());
}
@Override
public boolean generateTree(Location l, Tree vanillaTreeType) {
return false;
}
@Override
public Entity spawnEntity(Location location, EntityType entityType) {
return null;