implement getBiomeProvider in World

This commit is contained in:
dfsek 2021-07-22 13:28:14 -07:00
parent 82169f0921
commit a91a5019f8
5 changed files with 27 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.entity.Entity;
import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
@ -60,4 +61,6 @@ public interface World extends Handle {
default TerraChunkGenerator getTerraGenerator() {
return ((GeneratorWrapper) getGenerator().getHandle()).getHandle();
}
BiomeProvider getBiomeProvider();
}

View File

@ -7,6 +7,7 @@ import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
@ -60,4 +61,9 @@ public class DummyWorld implements World {
public int getMinHeight() {
return 0;
}
@Override
public BiomeProvider getBiomeProvider() {
throw new UnsupportedOperationException("Cannot get biome provider of DummyWorld");
}
}

View File

@ -56,4 +56,8 @@ public class TerraBiomeSource extends BiomeSource {
TerraBiome biome = provider.getBiome(biomeX << 2, biomeZ << 2, seed);
return biomeRegistry.get(new Identifier("terra", FabricUtil.createBiomeID(pack, biome.getID())));
}
public BiomeProvider getProvider() {
return provider;
}
}

View File

@ -7,11 +7,13 @@ import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
import com.dfsek.terra.fabric.block.FabricBlockState;
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
import com.dfsek.terra.fabric.generation.TerraBiomeSource;
import com.dfsek.terra.fabric.util.FabricUtil;
import net.minecraft.block.FluidBlock;
import net.minecraft.fluid.Fluid;
@ -107,6 +109,11 @@ public abstract class ChunkRegionMixin {
return ((FabricChunkGeneratorWrapper) terraWorld$getGenerator()).getHandle();
}
@SuppressWarnings("deprecation")
public BiomeProvider terraWorld$getBiomeProvider() {
return ((TerraBiomeSource) ((ChunkRegion) (Object) this).toServerWorld().getChunkManager().getChunkGenerator().getBiomeSource()).getProvider();
}
/**
* We need regions delegating to the same world
* to have the same hashcode. This

View File

@ -7,14 +7,17 @@ import com.dfsek.terra.api.entity.EntityType;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkGenerator;
import com.dfsek.terra.api.world.generator.GeneratorWrapper;
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
import com.dfsek.terra.fabric.block.FabricBlockState;
import com.dfsek.terra.fabric.generation.FabricChunkGeneratorWrapper;
import com.dfsek.terra.fabric.generation.TerraBiomeSource;
import com.dfsek.terra.fabric.util.FabricUtil;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ChunkRegion;
import net.minecraft.world.ServerWorldAccess;
import net.minecraft.world.WorldAccess;
import org.spongepowered.asm.mixin.Implements;
@ -83,6 +86,10 @@ public abstract class ServerWorldMixin {
return ((FabricChunkGeneratorWrapper) terra$getGenerator()).getHandle();
}
public BiomeProvider terra$getBiomeProvider() {
return ((TerraBiomeSource) ((ServerWorld) (Object) this).getChunkManager().getChunkGenerator().getBiomeSource()).getProvider();
}
/**
* Overridden in the same manner as {@link ChunkRegionMixin#hashCode()}
*