mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-02-16 02:20:57 +00:00
Vanilla biome setting (sort of) works on Fabric now
This commit is contained in:
@@ -23,8 +23,8 @@ public class BukkitChunkGeneratorWrapper extends ChunkGenerator implements Handl
|
||||
@Override
|
||||
public @NotNull ChunkData generateChunkData(@NotNull World world, @NotNull Random random, int x, int z, @NotNull BiomeGrid biome) {
|
||||
BukkitWorld bukkitWorld = new BukkitWorld(world);
|
||||
|
||||
return (ChunkData) delegate.generateChunkData(bukkitWorld, random, x, z, new BukkitBiomeGrid(biome), new BukkitChunkGenerator.BukkitChunkData(createChunkData(world))).getHandle();
|
||||
delegate.generateBiomes(bukkitWorld, random, x, z, new BukkitBiomeGrid(biome));
|
||||
return (ChunkData) delegate.generateChunkData(bukkitWorld, random, x, z, new BukkitChunkGenerator.BukkitChunkData(createChunkData(world))).getHandle();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,8 @@ import com.dfsek.terra.registry.ConfigRegistry;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.client.world.GeneratorType;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.BuiltinRegistries;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
@@ -127,7 +129,15 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||
registry
|
||||
.registerLoader(BlockData.class, (t, o, l) -> worldHandle.createBlockData((String) o))
|
||||
.registerLoader(MaterialData.class, (t, o, l) -> worldHandle.createMaterialData((String) o))
|
||||
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> new FabricBiome());
|
||||
.registerLoader(com.dfsek.terra.api.generic.world.Biome.class, (t, o, l) -> {
|
||||
String id = (String) o;
|
||||
if(!id.contains(":")) id = "minecraft:" + id.toLowerCase();
|
||||
Identifier identifier = new Identifier(id);
|
||||
logger.info("Registering Vanilla biome: " + o.toString() + " with ID " + identifier + "/" + id);
|
||||
Biome biome = BuiltinRegistries.BIOME.get(identifier);
|
||||
logger.info("Found " + biome + " in registry.");
|
||||
return new FabricBiome(biome);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,8 +3,15 @@ package com.dfsek.terra.fabric.world;
|
||||
import com.dfsek.terra.api.generic.world.Biome;
|
||||
|
||||
public class FabricBiome implements Biome {
|
||||
private final net.minecraft.world.biome.Biome delegate;
|
||||
|
||||
public FabricBiome(net.minecraft.world.biome.Biome delegate) {
|
||||
this.delegate = delegate;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Object getHandle() {
|
||||
return null;
|
||||
public net.minecraft.world.biome.Biome getHandle() {
|
||||
return delegate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package com.dfsek.terra.fabric.world;
|
||||
|
||||
import com.dfsek.terra.api.generic.world.Biome;
|
||||
import com.dfsek.terra.api.generic.world.BiomeGrid;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class FabricBiomeGrid implements BiomeGrid {
|
||||
@Override
|
||||
public @NotNull Biome getBiome(int x, int z) {
|
||||
return new FabricBiome();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Biome getBiome(int x, int y, int z) {
|
||||
return new FabricBiome();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(int x, int z, @NotNull Biome bio) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(int x, int y, int z, @NotNull Biome bio) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getHandle() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.dfsek.terra.fabric.world;
|
||||
|
||||
import com.dfsek.terra.api.generic.TerraPlugin;
|
||||
import com.dfsek.terra.api.gaea.generation.GenerationPhase;
|
||||
import com.dfsek.terra.biome.grid.master.TerraBiomeGrid;
|
||||
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
||||
import com.mojang.serialization.Codec;
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||
@@ -8,6 +9,7 @@ import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.util.registry.RegistryLookupCodec;
|
||||
import net.minecraft.world.biome.Biome;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
import net.minecraft.world.gen.feature.StructureFeature;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -19,13 +21,13 @@ public class TerraBiomeSource extends BiomeSource {
|
||||
|
||||
private final Registry<Biome> biomeRegistry;
|
||||
private final long seed;
|
||||
private final TerraPlugin main;
|
||||
private final TerraBiomeGrid grid;
|
||||
|
||||
public TerraBiomeSource(Registry<Biome> biomes, long seed) {
|
||||
super(biomes.stream().collect(Collectors.toList()));
|
||||
this.biomeRegistry = biomes;
|
||||
this.seed = seed;
|
||||
this.main = TerraFabricPlugin.getInstance();
|
||||
this.grid = new TerraBiomeGrid.TerraBiomeGridBuilder(seed, TerraFabricPlugin.getInstance().getRegistry().get("DEFAULT"), TerraFabricPlugin.getInstance()).build();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -40,6 +42,14 @@ public class TerraBiomeSource extends BiomeSource {
|
||||
|
||||
@Override
|
||||
public Biome getBiomeForNoiseGen(int biomeX, int biomeY, int biomeZ) {
|
||||
return null;
|
||||
FabricBiome biome = ((FabricBiome) grid.getBiome(biomeX * 4, biomeZ * 4, GenerationPhase.BASE).getVanillaBiome());
|
||||
return biome.getHandle();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasStructureFeature(StructureFeature<?> feature) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.dfsek.terra.fabric.world.generator;
|
||||
import com.dfsek.terra.api.gaea.util.FastRandom;
|
||||
import com.dfsek.terra.api.generic.Handle;
|
||||
import com.dfsek.terra.fabric.TerraFabricPlugin;
|
||||
import com.dfsek.terra.fabric.world.FabricBiomeGrid;
|
||||
import com.dfsek.terra.fabric.world.TerraBiomeSource;
|
||||
import com.dfsek.terra.fabric.world.handles.FabricSeededWorldAccess;
|
||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||
import com.mojang.serialization.Codec;
|
||||
@@ -14,7 +14,6 @@ import net.minecraft.world.BlockView;
|
||||
import net.minecraft.world.ChunkRegion;
|
||||
import net.minecraft.world.Heightmap;
|
||||
import net.minecraft.world.WorldAccess;
|
||||
import net.minecraft.world.biome.source.BiomeSource;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.gen.StructureAccessor;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
@@ -24,15 +23,18 @@ import net.minecraft.world.gen.chunk.VerticalBlockSample;
|
||||
public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Handle {
|
||||
private final long seed;
|
||||
private final TerraChunkGenerator delegate;
|
||||
private final TerraBiomeSource biomeSource;
|
||||
private final Codec<FabricChunkGeneratorWrapper> codec = RecordCodecBuilder.create(instance -> instance.group(
|
||||
BiomeSource.CODEC.fieldOf("biome_source").forGetter(generator -> generator.biomeSource),
|
||||
TerraBiomeSource.CODEC.fieldOf("biome_source").forGetter(generator -> generator.biomeSource),
|
||||
Codec.LONG.fieldOf("seed").stable().forGetter(generator -> generator.seed))
|
||||
.apply(instance, instance.stable(FabricChunkGeneratorWrapper::new)));
|
||||
|
||||
public FabricChunkGeneratorWrapper(BiomeSource biomeSource, long seed) {
|
||||
public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed) {
|
||||
super(biomeSource, new StructuresConfig(false));
|
||||
|
||||
this.delegate = new TerraChunkGenerator(TerraFabricPlugin.getInstance().getRegistry().get("DEFAULT"), TerraFabricPlugin.getInstance());
|
||||
delegate.getMain().getLogger().info("Loading world...");
|
||||
this.biomeSource = biomeSource;
|
||||
|
||||
this.seed = seed;
|
||||
}
|
||||
@@ -49,7 +51,7 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Handl
|
||||
|
||||
@Override
|
||||
public ChunkGenerator withSeed(long seed) {
|
||||
return new FabricChunkGeneratorWrapper(this.biomeSource.withSeed(seed), seed);
|
||||
return new FabricChunkGeneratorWrapper((TerraBiomeSource) this.biomeSource.withSeed(seed), seed);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,7 +61,8 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Handl
|
||||
|
||||
@Override
|
||||
public void populateNoise(WorldAccess world, StructureAccessor accessor, Chunk chunk) {
|
||||
delegate.generateChunkData(new FabricSeededWorldAccess(world, seed, this), new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricBiomeGrid(), new FabricChunkData(chunk));
|
||||
FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(world, seed, this);
|
||||
delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user