multithread structure and cave population

This commit is contained in:
dfsek
2021-03-21 22:25:19 -07:00
parent 5182651947
commit 709180de13
5 changed files with 16 additions and 17 deletions

View File

@@ -4,7 +4,6 @@ import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
import com.dfsek.terra.fabric.world.handles.FabricWorld;
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunkWorldAccess;
import com.dfsek.terra.fabric.world.handles.world.FabricWorldAccess;
import com.mojang.serialization.Codec;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.StructureWorldAccess;
@@ -29,8 +28,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(new FabricWorldAccess(world), chunk);
gen.getStructurePopulator().populate(new FabricWorldAccess(world), chunk);
gen.getOrePopulator().populate(world1, chunk);
gen.getTreePopulator().populate(world1, chunk);
gen.getFloraPopulator().populate(world1, chunk);

View File

@@ -7,6 +7,7 @@ import com.dfsek.terra.config.pack.ConfigPack;
import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.dfsek.terra.fabric.mixin.StructureAccessorAccessor;
import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.handles.chunk.FabricChunk;
import com.dfsek.terra.fabric.world.handles.world.FabricSeededWorldAccess;
import com.dfsek.terra.world.generation.generators.DefaultChunkGenerator3D;
import com.dfsek.terra.world.population.CavePopulator;
@@ -34,7 +35,6 @@ import net.minecraft.world.gen.chunk.VerticalBlockSample;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public class FabricChunkGeneratorWrapper extends ChunkGenerator implements GeneratorWrapper {
private final long seed;
@@ -72,14 +72,6 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
return floraPopulator;
}
public StructurePopulator getStructurePopulator() {
return structurePopulator;
}
public CavePopulator getCavePopulator() {
return cavePopulator;
}
public FabricChunkGeneratorWrapper(TerraBiomeSource biomeSource, long seed, ConfigPack configPack) {
super(biomeSource, new StructuresConfig(false));
this.pack = configPack;
@@ -126,7 +118,11 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
public CompletableFuture<Chunk> populateNoise(Executor executor, StructureAccessor accessor, Chunk chunk) {
return CompletableFuture.supplyAsync(() -> {
FabricSeededWorldAccess worldAccess = new FabricSeededWorldAccess(((StructureAccessorAccessor) accessor).getWorld(), seed, this);
com.dfsek.terra.api.platform.world.Chunk c = new FabricChunk(worldAccess, chunk);
delegate.generateChunkData(worldAccess, new FastRandom(), chunk.getPos().x, chunk.getPos().z, new FabricChunkData(chunk));
cavePopulator.populate(worldAccess, c);
structurePopulator.populate(worldAccess, c);
return chunk;
}, executor);
}

View File

@@ -60,7 +60,7 @@ public class FabricWorld implements World, FabricWorldHandle {
@Override
public Chunk getChunkAt(int x, int z) {
return new FabricChunk(delegate.world.getChunk(x, z));
return new FabricChunk(this, delegate.world.getChunk(x, z));
}
@Override

View File

@@ -4,14 +4,18 @@ 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.FabricWorldHandle;
import net.minecraft.util.math.BlockPos;
import org.jetbrains.annotations.NotNull;
public class FabricChunk implements Chunk {
private final net.minecraft.world.chunk.Chunk chunk;
private final FabricWorldHandle worldHandle;
public FabricChunk(net.minecraft.world.chunk.Chunk chunk) {
public FabricChunk(FabricWorldHandle worldHandle, net.minecraft.world.chunk.Chunk chunk) {
this.worldHandle = worldHandle;
this.chunk = chunk;
}
@@ -27,12 +31,13 @@ public class FabricChunk implements Chunk {
@Override
public World getWorld() {
return null;
return worldHandle;
}
@Override
public Block getBlock(int x, int y, int z) {
return null;
BlockPos pos = new BlockPos(x + (chunk.getPos().x << 4), y, z + (chunk.getPos().z << 4));
return new FabricBlock(pos, worldHandle.getWorld());
}
@Override

View File

@@ -1,7 +1,8 @@
package com.dfsek.terra.fabric.world.handles.world;
import com.dfsek.terra.api.platform.world.World;
import net.minecraft.world.WorldAccess;
public interface FabricWorldHandle {
public interface FabricWorldHandle extends World {
WorldAccess getWorld();
}